從上篇博文可以看到uboot開機第一件事就是設定系統為SVC模式。
還是這張熟悉的圖表:
ARM處理器有七種工作模式,對于uboot模式而已,系統工作在SVC模式,可以操作更多的資源。
通過設定程式狀态寄存器CPSR15(這個可以根據手冊查到):
這裡我們要設定M[4:0]這個字段來讓系統工作在SVC模式。那麼要怎麼設定呢?這裡還是看之前部落格裡面的一張圖
可以看到這5位要設定成10011,即把GPSR15寄存器最後5位設定成10011.
第一步: 将這5位全部清零 bic指令
第二步: 在給某些位置1 orr指令
同時這裡會用到msr指令 和 mrs指令
原因: 因為在通路CPSR/SPSR這兩個寄存器時 ,先要把寄存器導入到通用寄存器當中做相應修改然後再寫入,而不能直接修改GPSR/SPSR這兩個寄存器。
msr: 将通用寄存器的值寫入CPSR或者SPSR寄存器
mrs: 将CPSR寄存器的值導入到通用寄存器中
這裡貼上代碼:
set_svc:
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3
msr cpsr, r0
mov pc, lr
針對上一篇博文這裡隻需要修改start.S檔案, 因為一上電程式将跳到reset标号處執行,這裡講reset标号處下的代碼也稍作修改
reset:
bl set_svc