- 论坛徽章:
- 0
|
1、在_TEXT_BASE这个地址放置的是不是uboot拷贝到ram中后的代码起始值?
2、栈段是不是在_TEXT_BASE这个物理地址前面的地址?因为看见源码里是这样设置堆栈的
stack_setup:
ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */
sub r0, r0, #CONFIG_SYS_MALLOC_LEN /* malloc area */
sub r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* bdinfo */
#ifdef CONFIG_USE_IRQ
sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
sub sp, r0, #12 /* leave 3 words for abort-stack */
3、在将代码往RAM中拷贝的时候,用到了3个变量
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
beq clear_bss
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2 /* r2 <- size of armboot */
#if 1
bl CopyCode2Ram
从上面代码,可以看出,从r0处开始,往r1处拷贝,拷贝的大小是_armboot_start减去_bss_start
那么,_armboot_start的值是如何得到的,是不是_TEXT_BASE,_bss_start的值是不是完成初始化栈后sp的值呢?
那么此时的sp是指向高地址还是低地址呢? 如果用_bss_start的值减去_armboot_start的话,那么不是为负吗?因为栈的物理地址在arm启动代码前面? |
|