<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 《ARM與Linux些許問(wèn)題》第一章:ARM工作模式

          《ARM與Linux些許問(wèn)題》第一章:ARM工作模式

          作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
          ====================================================================================================================================

          早期的ARM核有狀態(tài)(ARM或Thumb)切換(通過(guò)BX等指令修改CPSR寄存器(當(dāng)前程序狀態(tài)寄存器,存放條件碼標(biāo)志,中斷禁止位,當(dāng)前處理器模式以及其他狀態(tài)和控制信息)中T的控制位完成程序狀態(tài)的切換),現(xiàn)在ARM都只使用Thumb狀態(tài)了。所以,我們不在討論狀態(tài)切換相關(guān)。

          本文引用地址:http://www.ex-cimer.com/article/201611/317766.htm

          一、ARM七種工作模式及其應(yīng)用場(chǎng)合(Linux操作系統(tǒng)使用了其中USR和SVC模式、出現(xiàn)異常時(shí)還可能通過(guò)進(jìn)入其他模式轉(zhuǎn)為L(zhǎng)inux內(nèi)核態(tài))

          在CPSR寄存器中設(shè)置M[4:0]位,分別對(duì)應(yīng)如下七種模式(注意:用戶模式和系統(tǒng)模式只有對(duì)CPSR的讀權(quán)限,因此、這兩種模式下不可以通過(guò)直接設(shè)置CPSR進(jìn)入其他模式(SWI匯編指令除外)):

          1.用戶模式(USR):用于正常執(zhí)行程序。在Linux操作系統(tǒng)中,用戶空間進(jìn)程就是在這種模式下運(yùn)行。CPSR寄存器M[4:0]設(shè)置10000。

          2.系統(tǒng)模式(SYS):運(yùn)行有特權(quán)的操作系統(tǒng)任務(wù)。CPSR寄存器M[4:0]設(shè)置11011。

          這個(gè)模式和用戶模式共用R15-pc(程序計(jì)數(shù)器,存放下一條指令所在單元的地址)的值,因此不用ARM強(qiáng)制賦值。

          ARM進(jìn)入以下幾種模式后,都需要給R15-PC寄存器重新賦值、也就是開(kāi)始執(zhí)行新的指令。

          3.管理模式(SVC):操作系統(tǒng)使用的保護(hù)模式(高權(quán)限)。在Linux操作系統(tǒng)中,內(nèi)核空間在這種模式下運(yùn)行。CPSR寄存器M[4:0]設(shè)置10011。

          當(dāng)ARM剛上電或復(fù)位時(shí)、進(jìn)入該模式,并強(qiáng)制PC從0x0000 0000處取指令;當(dāng)系統(tǒng)軟中斷(如系統(tǒng)調(diào)用,調(diào)用ARM的SWI匯編指令)時(shí)、進(jìn)入該模式,并強(qiáng)制PC從0x0000 0008處取指令——這也是ARM從用戶模式主動(dòng)切入管理模式(Linux從用戶態(tài)主動(dòng)進(jìn)入內(nèi)核態(tài))的唯一方法。后面章節(jié)會(huì)詳細(xì)分析。

          《ARM與Linux些許問(wèn)題》第三章:Linux如何從用戶態(tài)進(jìn)入內(nèi)核態(tài)

          《ARM與Linux些許問(wèn)題》第四章:ARM平臺(tái)系統(tǒng)調(diào)用原理分析

          當(dāng)出現(xiàn)異常狀況時(shí),Linux還有可能在如下幾種ARM模式下運(yùn)行;如硬件中斷、程序問(wèn)題導(dǎo)致的異常等。

          4.快速中斷模式(FIQ):用于高速數(shù)據(jù)傳輸。CPSR寄存器M[4:0]設(shè)置10001。

          進(jìn)入該模式后、ARM強(qiáng)制PC從0x0000 001C處取指令。

          5.外部中斷模式(IRQ):用于通常的中斷處理。CPSR寄存器M[4:0]設(shè)置10010。

          進(jìn)入該模式后、ARM強(qiáng)制PC從0x0000 0018處取指令。

          6.數(shù)據(jù)訪問(wèn)終止模式(ABT):當(dāng)數(shù)據(jù)或指令預(yù)取終止時(shí)進(jìn)入該模式,可用于虛擬內(nèi)存及存儲(chǔ)保護(hù)。CPSR寄存器M[4:0]設(shè)置10111。

          當(dāng)指令取終止時(shí)、進(jìn)入該模式,并強(qiáng)制PC從0x0000 000C處取指令;當(dāng)數(shù)據(jù)取終止時(shí)、進(jìn)入該模式;并強(qiáng)制PC從0x0000 0010處取指令。

          7.未定義指令終止模式(UND):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件。CPSR寄存器M[4:0]設(shè)置11111。

          當(dāng)程序中出現(xiàn)未定義的指令時(shí)、進(jìn)入該模式,并強(qiáng)制PC從0x0000 0004處取指令。

          在非user模式下的其他6中模式,有SVC,F(xiàn)IQ,IRQ,ABT,UND,SYS 都可以修改CPSR寄存器、從而控制ARM工作模式的切換。

          在Linux操作系統(tǒng)中;當(dāng)CPU處于特權(quán)模式(Linux處于內(nèi)核態(tài))時(shí),可以隨意進(jìn)入用戶態(tài)。而當(dāng)CPU處于用戶模式(Linux處于用戶態(tài))時(shí),Linux從用戶態(tài)切換到內(nèi)核態(tài)(ARM從用戶模式切換到其他特權(quán)模式)只有在系統(tǒng)調(diào)用和中斷(中斷進(jìn)入IRQ模式,也可以操作內(nèi)核)兩種情況下發(fā)生,一般程序一開(kāi)始都是運(yùn)行于用戶態(tài),當(dāng)程序需要使用系統(tǒng)資源時(shí),就必須通過(guò)調(diào)用軟中斷進(jìn)入內(nèi)核態(tài)。

          每一種工作模式的R13-SP(堆棧指針寄存器,在堆棧操作中使用)都是獨(dú)立的。因此,對(duì)程序中需要用到的每一種模式都要給SP定義一個(gè)堆棧地址。方法是改變狀態(tài)寄存器(CPSR)內(nèi)的狀態(tài)位,使處理器切換到不同的狀態(tài),然后給SP賦值。注意:不要切換到User模式進(jìn)行User模式的堆棧設(shè)置,因?yàn)檫M(jìn)入U(xiǎn)ser模式后就不能再操作CPSR回到別的模式了,可能會(huì)對(duì)接下去的程序執(zhí)行造成影響。

          ARM在剛上電或復(fù)位后、進(jìn)入SVC管理模式,并從0x0000 0000開(kāi)始取指令;bootloader和Linux Kernel都是工作在此模式。

          二、ARM工作模式切換的兩種方法

          1.被動(dòng)切換:是指ARM在當(dāng)前工作模式下,沒(méi)有要求模式切換、而被動(dòng)地進(jìn)入另外一種模式。在ARM運(yùn)行的時(shí)候產(chǎn)生一些異常(包括軟中斷)或者中斷(硬中斷)來(lái)進(jìn)行模式切換。如上邊提到的Linux操作系統(tǒng)從用戶態(tài)到內(nèi)核態(tài),如硬件中斷或程序異常。內(nèi)核態(tài)不會(huì)被動(dòng)切換到用戶態(tài)。

          2.主動(dòng)切換:是指ARM在當(dāng)前工作模式下,通過(guò)一些自主操作、主動(dòng)的要求切換工作模式。ARM通過(guò)軟件改變,即軟件設(shè)置寄存器來(lái)進(jìn)行ARM的模式切換,因?yàn)锳RM的工作模式都是可以通過(guò)相應(yīng)寄存器的賦值來(lái)切換的。如上邊提到的Linux操作系統(tǒng)從內(nèi)核態(tài)到用戶態(tài);這里邊有一個(gè)比較特殊的情況:Linux用戶態(tài)可以通過(guò)系統(tǒng)調(diào)用主要要求切換到內(nèi)核態(tài)。

          后邊,我還會(huì)分析重點(diǎn)分析從Linux從用戶態(tài)到內(nèi)核態(tài)的切換。見(jiàn)《ARM與Linux些許問(wèn)題》第三章:Linux如何從用戶態(tài)進(jìn)入內(nèi)核態(tài)

          ====================================================================================================================================

          ARM主要寄存器匯總:

          CPSR及SPSR:當(dāng)前程序狀態(tài)寄存器和保存程序狀態(tài)寄存器;

          R15-PC及R14-LR:程序計(jì)數(shù)器和用戶保存PC的連接寄存器;

          R13-SP:堆棧指針。



          關(guān)鍵詞: ARMLinux工作模

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();