ARM七种模式理解
首先,先要了解ARM的CPU的7種模式是哪些:
? ?? ?? ? 用戶模式(usr):ARM處理器正常的程序執行狀態
? ?? ?? ? 快速中斷模式(fiq):用于高速數據傳輸或通道處理
? ?? ?? ? 中斷模式(irq):用于通用的中斷處理
? ?? ?? ? 管理模式(svc):操作系統使用的保護模式,系統復位和軟件中斷進入此模式
? ?? ?? ? 數據訪問終止模式(abt):當數據或指令預取終止時進入該模式,可用于虛擬存儲及存儲保護
? ?? ?? ? 系統模式(sys):運行具有特權的操作系統任務
? ? ? ? ? 未定義指令中止模式(und):當未定義的指令執行時進入該模式,可用于支持硬件協處理器的軟件仿真
除用戶模式外,其他6種工作模式都屬于特權模式,大多數程序運行于用戶模式,進入特權模式是為了處理中斷、異常,或者訪問被保護的系統資源。
我們簡單的來分析一下那7種模式:
- 中止abt和未定義und模式
首先可以排除的是,中止abt和未定義und模式,那都是不太正常的模式,此處程序是正常運行的,所以不應該設置CPU為其中任何一種模式,所以可以排除。
- 快中斷fiq和中斷irq模式
其次,對于快中斷fiq和中斷irq來說,此處uboot初始化的時候,也還沒啥中斷要處理和能夠處理,而且即使是注冊了終端服務程序后,能夠處理中斷,那么這兩種模式,也是自動切換過去的,所以,此處也不應該設置為其中任何一種模式。
- 用戶usr模式
雖然從理論上來說,可以設置CPU為用戶usr模式,但是由于此模式無法直接訪問很多的硬件資源,而uboot初始化,就必須要去訪問這類資源,所以此處可以排除,不能設置為用戶usr模式。
- 系統sys模式 vs 管理svc模式
首先,sys模式和usr模式相比,所用的寄存器組,都是一樣的,但是增加了一些訪問一些在usr模式下不能訪問的資源。而svc模式本身就屬于特權模式,本身就可以訪問那些受控資源,而且,比sys模式還多了些自己模式下的影子寄存器,所以,相對sys模式來說,可以訪問資源的能力相同,但是擁有更多的硬件資源。
例如,uboot初始化階段CPU處于SVC模式,從理論上來說,雖然可以設置為sys和svc模式的任一種,但是從uboot方面考慮,其要做的事情是初始化系統相關硬件資源,需要獲取盡量多的權限,以方便操作硬件,初始化硬件等。將CPU設置為SVC模式,便于展開工作。uboot最終目的是為了啟動Linux的kernel,在做好準備工作(即初始化硬件,準備好kernel和rootfs等)跳轉到kernel之前,本身就要滿足一些條件,其中一個條件,就是要求CPU處于SVC模式的。所以,uboot在最初的初始化階段,就將CPU設置為SVC模式,也是最合適的。
總結
- 上一篇: 对YUV4:2:0认识理解
- 下一篇: arm汇编指令:ldr和adr的区别