Linux系统和bootloader应该运行在svc模式(supervisor),这可以通过修改程序状态寄存器来设置。
ARM运行模式:
程序状态寄存器:其中M[4:0]用于设置运行模式。
汇编代码:
reset:
bl set_svc
set_svc:
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3
msr cpsr, r0
mov pc, lr
即先对后五位清0,然后置1;orr r0, r0, #0xd3的作用不仅仅是修改运行模式,还屏蔽了IRQ中断和FIQ中断