Li
ux内核构成内核构成
1archarmbootcompressedMakefile2archarmker
elvmli
uxlds
archarmbootcompressedvmli
uxlds
Li
ux内核启动流程内核启动流程
archarmbootcompressedstartSStarttypereptmove
drbwordloaderwordword1movmovstart_edatar7r1r8r2absoluteloadru
zImageaddresszImagee
daddresssavearchitectureIDsaveatagspoi
ter1f0x016f2818Magic
umberstohelpthestartfu
ctio
8r0r0
bootloader生命终止。生命终止。这也标志着uboot将系统完全的交给了OS,,之后代码在133行会读取cpsr并判断是否处理器处于supervisor模式模式从uboot进入ker
el,从,系统已经处于SVC32模式;模式,还需要额外两条指令。之后是再次确认中断关闭,模式;而利用a
gel进入则处于user模式,还需要额外两条指令。之后是再次确认中断关闭,并完成cpsr写入mrststb
emovswi
ot_a
gelmrsorrmsrr2cpsrr2r20xc0cpsr_cr2tur
offi
terruptstopreve
ta
gelfromru
i
gr2cpsrr23
ot_a
gelr00x170x123456a
gel_SWIreaso
_E
terSVCa
gel_SWI_ARMgetcurre
tmode
otuser
然后在LC0地址处将分段信息导入r0r6、ip、sp等寄存器,并检查代码是否运行在与链接时、、等寄存器,相同的目标地址,以决定是否进行处理。相同的目标地址,以决定是否进行处理。由于现在很少有人不使用loader和tags,将zImage,位置执行,所以这个处理是必须的(烧写到rom直接从0x0位置执行,所以这个处理是必须的(但是zImage的头现在也保留了不用loader也可启动的能力)arm架构下自解压头一般是链接在0x0地址而被加载到。0x30008000运行,所以要修正这个变化。涉及到运行,所以要修正这个变化。
fr5寄存器存放的zImage基地址r6和r12(即ip寄存器)存放的got(globaloffsettable)寄存器)(()r2和r3存放的bss段起止地址sp栈指针地址很简单,很简单,这些寄存器统统被加上一个你也能猜到的偏移地址0x30008000。该地址是s3c2410。相关的,相关的,其他的ARM处理器可以参考下表PXA2xx是0xa0008000IXP2x00和IXP4xx是0x00008000FreescaleiMX3137是0x80008000TIdavi
ciDM64xx是0x80008000TIomap系列是0x80008000AT91RMSAM92xx系列是0x20008000CirrusEP93xx是0x00008000行开始的地方,这些操作发生在代码172行开始的地方,下面只粘贴一部分addaddaddr5r5r0r6r6r0ipipr0
后面在211行进行bss段的清零工作
ot_relocated1movstrstrstrstrcmpblor00r0r24r0r24r0r24r0r24r2r31bclearbss
然后224行,打开cache,并为后面解压缩设置64KB的临时malloc空间,blmovaddcache_o
r1spr2sp0x10000r