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

          新聞中心

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

          《ARM與Linux些許問題》第二章:Linux操作系統(tǒng)與ARM工作模式

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

          首先,ARM開發(fā)板在剛上電或復(fù)位后都會(huì)首先進(jìn)入SVC即管理模式,此時(shí)、程序計(jì)數(shù)器R15-PC值會(huì)被賦為0x0000 0000;bootloader就是在此模式下,位于0x0000 0000的NOR FLASH或SRAM中裝載的,因此、開機(jī)或重啟后bootloader會(huì)被首先執(zhí)行。

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

          接著,bootloader引導(dǎo)Linux內(nèi)核,此時(shí)、Linux內(nèi)核一樣運(yùn)行在ARM的SVC即管理模式下;當(dāng)內(nèi)核啟動(dòng)完畢、準(zhǔn)備進(jìn)入用戶態(tài)init進(jìn)程時(shí),內(nèi)核將ARM的當(dāng)前程序狀態(tài)CPSR寄存器M[4:0]設(shè)置為10000、進(jìn)而用戶態(tài)程序只能運(yùn)行在ARM的用戶模式。

          由于ARM用戶模式下對(duì)資源的訪問受限,因此、可以達(dá)到保護(hù)Linux操作系統(tǒng)內(nèi)核的目的。

          需要強(qiáng)調(diào)的是:Linux內(nèi)核態(tài)是從ARM的SVC即管理模式下啟動(dòng)的,但在某些情況下、如:硬件中斷、程序異常(被動(dòng))等情況下進(jìn)入ARM的其他特權(quán)模式,這時(shí)仍然可以進(jìn)入內(nèi)核態(tài)(因?yàn)榫褪强梢圆僮鲀?nèi)核了);同樣,Linux用戶態(tài)是從ARM用戶模式啟動(dòng)的,但當(dāng)進(jìn)入ARM系統(tǒng)模式時(shí)、仍然可以操作Linux用戶態(tài)程序(進(jìn)入用戶態(tài),如init進(jìn)程的啟動(dòng)過程)。

          即:Linux內(nèi)核從ARM的SVC模式下啟動(dòng),但內(nèi)核態(tài)不僅僅指ARM的SVC模式(還包括可以訪問內(nèi)核空間的所有ARM模式);Linux用戶程序從ARM的用戶模式啟動(dòng),但用戶態(tài)不僅僅指ARM的用戶模式。

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



          評(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); })();