21.核心初始化之svc模式
21.核心初始化之svc模式
要設置系統工作svc特權模式,從前面的學習知道這需要設置CPSR程序狀態寄存器。
在ARM Architecture Reference Manual.pdf文檔中,2.Programmers' Model的2.5.Program status register。
可以看到CPSR的最后五位:M[4:0],就是來設置系統工作的系統模式。
接下來就是把CPSR的最后五位設置為0b10011,就是完成了設置系統的SVC模式。
實現的思路是:
取得這五位
清零,使用bic位清零指令。
置第0,1,4位為1,即可,使用orr位或指令。
要取得CPSR的后五位,由于是操作CPSR/SPSR,不能像操作一般的寄存器一樣,直接操作,需要將CPSR/SPSR寄存器的值取出再進行相應的操作。取出的指令:mrs。最后是存入:msr。這樣就完成了修改操作。
修改的代碼:
上面的操作就能夠實現把cpsr的末尾5位設置為0b10011。完成了設置系統工作在SVC模式。
我們做這些操作的時候,一般都是參考uboot里的設置來操作的。看看uboot里是怎么設置的:
可以看到OK6410的uboot里是設置為0xd3的,0xd3的二進制:
看到uboot里,還把[6][7]位設置為了1,看看這兩位的功能,是設置中斷的,uboot把中斷和快中斷都關閉了。
由于uboot是老大,所以,這里也改為了0xd3,2440,6410,210都是一樣的操作。最后start.S的代碼是:
.text
.global_start
_start:
breset
ldrpc, _undefined_instruction
ldrpc, _software_interrupt
ldrpc, _prefetch_abort
ldrpc, _data_abort
ldrpc, _not_used
ldrpc, _irq
ldrpc, _fiq
_undefined_instruction: .word undefined_instruction
_software_interrupt:.word software_interrupt
_prefetch_abort:.word prefetch_abort
_data_abort:.word data_abort
_not_used:.word not_used
_irq:.word irq
_fiq:.word fiq
undefined_instruction:
nop
software_interrupt:
nop
prefetch_abort:
nop
data_abort:
nop
not_used:
nop
irq:
nop
fiq:
nop
reset:
bl set_svc
set_svc:
mrs r1,cpsr
bic r1,#0x1f @clear r1的后五位,
@即是清除cpsr的后五位
orr r1,r1,#0xd3 @0b10011=0x13
msr cpsr,r1
總結
以上是生活随笔為你收集整理的21.核心初始化之svc模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux ftp上传下载文件,Linu
- 下一篇: SSH框架详解