在外企做服务器开发, 目前是项目经理, 管理两个server开发的项目。不做嵌入式好久了。
全部博文(197)
分类: LINUX
2007-12-25 09:55:17
对下面这段经典的relocate的代码, 从细节上(汇编语言角度),我还是有点疑问,
假设 BOARD/SMDK2410/config.mk 里面的 TEXT_BASE 0x63f80000
我们就讨论, u-boot 从nor flash启动的情况:
0,问个汇编的问题, 关于 .word 查了一下, 可是还是没太明白,为什么一定要用word 呢?
比如:
.globl _bss_start
_bss_start:
.word __bss_start
ldr r2, _armboot_start
ldr r3, _bss_start
那么 写成这样行吗?
ldr r3, __bss_start (这个就是定义在System.map)
relocate: /* relocate U-Boot to RAM */
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 */