- 论坛徽章:
- 0
|
大家好,也许很多人已经读过u-boot的start.S代码,主要是用来为u-boot的第一阶段做准备的。
我使用的u-boot是u-boot-2008.10,其实那份start.S和老版本的差不多,经过make xxxx_config 和 make all 后成功生成了uboot.bin。
我在cpu/arm920t/ 中执行arm-linux-objdump -D start.o > file (这样做不知道对不对阿) 想看看其过程
在start.S中肯定有这么一句:
bl cpu_init_crit
但在那份file文件中却对应的是这么一句:
b8: eb00006d bl 274 <software_interrupt+0x14>
好像是跳转到 software_interrupt 去了。对于我的cpu_init_crit是这样对应的:
000001bc <cpu_init_crit>:
1bc: e3a00000 mov r0, #0 ; 0x0
1c0: ee070f17 mcr 15, 0, r0, cr7, cr7, {0}
1c4: ee080f17 mcr 15, 0, r0, cr8, cr7, {0}
....................(省略)
我看它跳转到software_interrupt+0x14,然后就找一下对应的代码,如下(比较长阿):
00000260 <software_interrupt>:
260: e51fd224 ldr sp, [pc, #-548] ; 44 <_armboot_start>
264: e24dd802 sub sp, sp, #131072 ; 0x20000
268: e24dd803 sub sp, sp, #196608 ; 0x30000
26c: e24dd088 sub sp, sp, #136 ; 0x88
270: e58de000 str lr, [sp]
274: e14fe000 mrs lr, SPSR
278: e58de004 str lr, [sp, #4]
27c: e3a0d013 mov sp, #19 ; 0x13
280: e169f00d msr SPSR_fc, sp
284: e1a0e00f mov lr, pc
288: e1b0f00e movs pc, lr
28c: e24dd048 sub sp, sp, #72 ; 0x48
290: e88d1fff stmia sp, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip}
294: e51f2258 ldr r2, [pc, #-600] ; 44 <_armboot_start>
298: e2422802 sub r2, r2, #131072 ; 0x20000
29c: e2422803 sub r2, r2, #196608 ; 0x30000
2a0: e2422088 sub r2, r2, #136 ; 0x88
2a4: e892000c ldmia r2, {r2, r3}
2a8: e28d0048 add r0, sp, #72 ; 0x48
2ac: e28d5034 add r5, sp, #52 ; 0x34
2b0: e1a0100e mov r1, lr
2b4: e885000f stmia r5, {r0, r1, r2, r3}
2b8: e1a0000d mov r0, sp
2bc: ebfffffe bl 2bc <software_interrupt+0x5c>
整个software_interrupt代码贴完了,都感觉没看到有某条指令会帮助跳回到cpu_init_crit中。
请问这是什么原因呢? |
|