- 论坛徽章:
- 0
|
start.rar
(3.39 KB, 下载次数: 45)
附件是arm920t的start.s文件的压缩包,我在第relocate这个标号开始的这段拷贝代码有点看不懂,问题在于如下这几句话:
relocate:
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 stack_setup
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2 /* r2 <- size of armboot */
add r2, r0, r2 /* r2 <- source end address */
copy_loop:
ldmia r0!, {r3-r10} /* copy from source address [r0] */
stmia r1!, {r3-r10} /* copy to target address [r1] */
cmp r0, r2 /* until source end addreee [r2] */
ble copy_loop
问题1. 上面代码中r0 r1各自都存的是上面值?我个人感觉r0中存的就是start的第一句代码,即b start_code,而r1中存的应该是_TEXT_BASE这个变量,这2者怎么可能会出现相等这种情况呢?也就是说beq stack_setup何时会执行?
问题2. 上面代码中一个sub 和一个add执行完后,进入loop之前,r2是个什么值?为什么要把sub得到的armboot长度加到r0上来,这算什么意思?这里所谓的armboot是不是就是第一个c程序_armboot_start?
问题3. 该带代码要把armboot具体复制到哪里?是复制到存放中断向量表的bootsram还是赋值到SDRAM?我的开发板显示bootsram是0x0开始的4KB,SDRAM是从0x30000000开始的。
非常感谢高手能帮我解答,如果有想一起讨论的,可以加Q:215587754 ,加的时候注明u-boot。 |
|