《ARM與Linux些許問題》第二章:Linux操作系統(tǒng)與ARM工作模式
首先,ARM開發(fā)板在剛上電或復(fù)位后都會首先進(jìn)入SVC即管理模式,此時、程序計數(shù)器R15-PC值會被賦為0x0000 0000;bootloader就是在此模式下,位于0x0000 0000的NOR FLASH或SRAM中裝載的,因此、開機(jī)或重啟后bootloader會被首先執(zhí)行。
本文引用地址:http://m.butianyuan.cn/article/201611/317767.htm接著,bootloader引導(dǎo)Linux內(nèi)核,此時、Linux內(nèi)核一樣運行在ARM的SVC即管理模式下;當(dāng)內(nèi)核啟動完畢、準(zhǔn)備進(jìn)入用戶態(tài)init進(jìn)程時,內(nèi)核將ARM的當(dāng)前程序狀態(tài)CPSR寄存器M[4:0]設(shè)置為10000、進(jìn)而用戶態(tài)程序只能運行在ARM的用戶模式。
由于ARM用戶模式下對資源的訪問受限,因此、可以達(dá)到保護(hù)Linux操作系統(tǒng)內(nèi)核的目的。
需要強(qiáng)調(diào)的是:Linux內(nèi)核態(tài)是從ARM的SVC即管理模式下啟動的,但在某些情況下、如:硬件中斷、程序異常(被動)等情況下進(jìn)入ARM的其他特權(quán)模式,這時仍然可以進(jìn)入內(nèi)核態(tài)(因為就是可以操作內(nèi)核了);同樣,Linux用戶態(tài)是從ARM用戶模式啟動的,但當(dāng)進(jìn)入ARM系統(tǒng)模式時、仍然可以操作Linux用戶態(tài)程序(進(jìn)入用戶態(tài),如init進(jìn)程的啟動過程)。
即:Linux內(nèi)核從ARM的SVC模式下啟動,但內(nèi)核態(tài)不僅僅指ARM的SVC模式(還包括可以訪問內(nèi)核空間的所有ARM模式);Linux用戶程序從ARM的用戶模式啟動,但用戶態(tài)不僅僅指ARM的用戶模式。
===========================================================================================
評論