.align
start:
.type
start,#function //type指定start这个符号是函数类型
.rept
8
mov
r0, r0 //空操作,重复八次
.endr
b
1f //跳转
.word
0x016f2818 @ Magic numbers to help the loader
//魔数0x016f2818是在bootloader中用于判断zImage的存在,这是内核和bootloader约定好的。
.word
start @ absolute load/run zImage address
.word
_edata @ zImage end address
1: mov
r7, r1 @ save architecture ID //bootloader 传递过来的r1 r2
mov
r8, r2 @ save atags pointer
//r1和r2中分别存放着由bootloader传递过来的architecture ID和指向标记列表的指针
#ifndef __ARM_ARCH_2__
/*
* Booting from Angel - need to enter SVC mode and disable
* FIQs/IRQs (numeric definitions from angel arm.h source).
* We only do this if we were in user mode on entry.
*/
mrs
r2, cpsr @ get current mode
tst
r2, #3 @ not user?
bne
not_angel
mov
r0, #0x17 @ angel_SWIreason_EnterSVC
swi
0x123456 @ angel_SWI_ARM
not_angel:
mrs
r2, cpsr @ turn off interrupts to
orr
r2, r2, #0xc0 @ prevent angel from running
msr
cpsr_c, r2 //关闭IRQ FIQ
#else
teqp
pc, #0x0c000003 @ turn off interrupts
#endif