.word _edata @ zImage 结束地址
THUMB( .thumb )
1: mov r7, r1 @ 保存构架 ID 到 r7(此前由 bootloader 放入 r1)
mov r8, r2 @ 保存内核启动参数地址到 r8(此前由 bootloader 放入 r2)
#ifndef __ARM_ARCH_2__
/*
* 通过 Angel 调试器启动 - 必须进入 SVC 模式且关闭 FIQs/IRQs
* (numeric definitions from angel arm.h source).
* 如果进入时在 user 模式下,我们只需要做这些
*/
mrs r2, cpsr @ 获取当前模式
tst r2, #3 @ 判断是否是 user 模式
bne not_angel
mov r0, #0x17 @ angel_SWIreason_EnterSVC
ARM( swi 0x123456 ) @ angel_SWI_ARM
THUMB( svc 0xab ) @ angel_SWI_THUMB
not_angel:
mrs r2, cpsr @ 关闭中断
orr r2, r2, #0xc0 @ 以保护调试器的运作
msr cpsr_c, r2
#else
teqp pc, #0x0c000003 @ 关闭中断(此外 bootloader 已设置模式为 SVC)
#endif
/*
* 注意一些缓存的刷新和其他事务可能需要在这里完成
* - is there an Angel SWI call for this?
*/
/*
* 一些构架的特定代码可以在这里被连接器插入,
* 但是不应使用 r7(保存构架 ID), r8(保存内核启动参数地址), and r9.
*/
.text
/*
* 此处确定解压后的内核映像的绝对地址(物理地址),保存于 r4
* 由于配置的不同可能有的结果
* (1)定义了 CONFIG_AUTO_ZRELADDR
* ZRELADDR 是已解压内核最终存放的物理地址
* 如果 AUTO_ZRELADDR 被选择了, 这个地址将会在运行是确定:
* 将当 pc 值和 0xf8000000 做与操作,
* 并加上 TEXT_OFFSET(内核最终存放的物理地址与内存起始的偏移)
* 这里假定 zImage 被放在内存开始的 128MB 内
* (2)没有定义 CONFIG_AUTO_ZRELADDR
* 直接使用 zreladdr(此值位于 arch/arm/mach-xxx/Makefile.boot 文件确定)
*/
评论0
最新资源