|
操作系统移植之前,bootloader的移植或编写是不可逾越的一步。但是我查阅了不少的资料,包括我阅读源码(本人是个初学者)。我发现:
1、TQ2440给test2440试验中的启动代码对栈的初始化,其完成了对6中处理器工作模式下的栈区的初始化,代码如下:
;function initializing stacks
InitStacks
;Do not use DRAM,such as stmfd,ldmfd......
;SVCstack is initialized before
;Under toolkit ver 2.5, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'
mrs r0,cpsr
bic r0,r0,#MODEMASK
orr r1,r0,#UNDEFMODE|NOINT
msr cpsr_cxsf,r1 ;UndefMode
ldr sp,=UndefStack ; UndefStack=0x33FF_5C00
orr r1,r0,#ABORTMODE|NOINT
msr cpsr_cxsf,r1 ;AbortMode
ldr sp,=AbortStack ; AbortStack=0x33FF_6000
orr r1,r0,#IRQMODE|NOINT
msr cpsr_cxsf,r1 ;IRQMode
ldr sp,=IRQStack ; IRQStack=0x33FF_7000
orr r1,r0,#FIQMODE|NOINT
msr cpsr_cxsf,r1 ;FIQMode
ldr sp,=FIQStack ; FIQStack=0x33FF_8000
bic r0,r0,#MODEMASK|NOINT
orr r1,r0,#SVCMODE
msr cpsr_cxsf,r1 ;SVCMode
ldr sp,=SVCStack ; SVCStack=0x33FF_5800
;USER mode has not be initialized.
mov pc,lr
;The LR register will not be valid if the current mode is not SVC mode.
LTORG
注释说 “ SVCstack is initialized before ” 可是我好想没有看到。
问题2:在u-boot中,源码和资料好想都显示,在u-boot中没有对每一种工作模式下的栈区和堆栈指针进行初始化,好想是只对IRQ和FRQ下的SP进行了初始化,都不知道到底是怎么回事儿了?
大侠们,初学者,说错话了或问题,原谅了,万谢!!!!!!!
|
|