關於ARM CPU模式中的SVC
Arm中CPU的模式
【第一方面】
系統sys模式 VS 管理svc模式
首先,sys模式和usr模式相比,所用的寄存器組,都是一樣的,但是增加了一些訪問一些在usr模式下不能訪問的資源。
而svc模式本身就屬於特權模式,本身就可以訪問那些受控資源,而且,比sys模式還多了些自己模式下的影子寄存器,所以,相對sys模式來說,可以訪問資源的能力相同,但是擁有更多的硬件資源。
所以,從理論上來說,雖然可以設置為sys和svc模式的任一種,但是從uboot方面考慮,其要做的事情是初始化系統相關硬件資源,需要獲取盡量多的權限,以方便操作硬件,初始化硬件。
從uboot的目的是初始化硬件的角度來說,設置為svc模式,更有利於其工作。因此,此處將CPU設置為SVC模式。
【第二方面】
uboot作為一個bootloader來說,最終目的是為了啟動Linux的kernel,在做好准備工作(即初始化硬件,准備好kernel和rootfs等)跳轉到kernel之前,本身就要滿足一些條件,其中一個條件,就是要求CPU處於SVC模式的。
(關於滿足哪些條件,詳情請參考:
ARM Linux Kernel Boot Requirements
http://www.arm.linux.org.uk/developer/booting.php
或者Linux內核文檔:
kernel_source_root\documentation\arm\booting
中也是同樣的解釋:
“The CPU must be in SVC mode”)
所以,uboot在最初的初始化階段,就將CPU設置為SVC模式,也是最合適的。