- 论坛徽章:
- 0
|
我刚开始学嵌入式,在移植U-Boot,在看U-Boot代码的时候 有小段代码不太理解。希望高手们指点一下。谢谢了啊
/* Prepare to disable the MMU */
adr r1, mmu_disable_phys
/* We presume we're within the first 1024 bytes */
and r1, r1, #0x3fc
ldr r2, _TEXT_PHY_BASE
ldr r3, =0xfff00000
and r2, r2, r3
orr r2, r2, r1
b mmu_disable
.align 5
/* Run in a single cache-line */
mmu_disable:
mcr p15, 0, r0, c1, c0, 0
nop
nop
mov pc, r2
#endif
mmu_disable_phys:
#ifdef CONFIG_S3C64XX
/* Peri port setup */
ldr r0, =0x70000000
orr r0, r0, #0x13
mcr p15,0,r0,c15,c2,4 @ 256M (0x70000000 - 0x7fffffff) //外设地址空间
#endif
1.adr指令是取 mmu_disable_phys函数的当前地址吧?那r2最后得到的是 mmu_disable_phys链接地址?程序执行到这里还没有进行 uboot重定位呢啊,所以我就搞不清楚 mov pc,r2这条指令跳转到哪里去执行了 囧~
2. .align 5 我查过资料 说是4字节对齐,我疑惑的是 为什么在这边加四字节对齐,他的作用域一直到哪里?什么时候使用 .align 5?
谢谢了 :wink::wink::wink: |
|