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模式,也是最合適的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章