2015-07-22 43 views
1

我試圖在運行ARM7TDMI處理器的舊電路板上從User切換到Supervisor模式。它有七種操作模式:用戶, FIQ,IRQ,主管,中止,未定義和系統。用戶是唯一的非特權模式。我希望進入主管模式。我使用qemu來模擬這個電路板,並使用Gnu GCC編譯器工具鏈。我在主板上也有Linux內核。在AMR7TDMI處理器中從`User`切換到`Supervisor`模式

從處理器手冊的技術文檔中我可以看到這樣做,我需要生成一個SWI(軟件中斷)。這裏是什麼文件說

http://bear.ces.cwru.edu/eecs_382/ARM7-TDMI-manual-pt2.pdf [第4.13節]

The software interrupt instruction is used to enter Supervisor mode in a controlled 
manner. The instruction causes the software interrupt trap to be taken, which effects 
the mode change. 

我想我需要寫的SWI我自己interupt處理程序。我可以看到一些帖子它

writing interrupt routines using gcc for arm

Simplest bare metal program for ARM

然而,當我按照列出的說明在上面,我收到了段錯誤。我在這裏有點困惑。閱讀我需要編寫interupt處理程序的方式我意識到我需要調整Interupt Vector Table以包含我的新SWI處理程序。這對於用戶空間計劃來說似乎具有太多的安全風險。我的分段錯誤可能是因爲我正在修復我的內存空間,或者只是因爲我不允許對內存進行更改(即將我的處理程序添加到IVT)

任何人都可以指導我獲得更好的資源,

關於如何解決這個問題的任何建議。我是嵌入式編程的新手,所以我認爲我的知識不是很好。

+0

關鍵的一點要注意的是,因爲你正在運行Linux,_you_沒有處理器的控制; Linux內核的確如此。因此你必須遵守Linux的規則。 – Notlikethat

+0

@Notlikethat謝謝我實現了同樣的;如果您有任何有關Linux內核開發的良好資源,請分享。再次感謝 – rockstar

+0

您是否正在嘗試做這個裸機(自己寫這一切),還是將功能添加到Linux?這個問題聽起來像是在同時問兩個問題。 – unixsmurf

回答

2

https://groups.google.com/forum/#!topic/comp.sys.arm/3ybxWHwKKcA

然而沒有ARM芯片允許所述處理器從用戶模式 經由MSR被切換到特權,因爲這將完全無效由操作系統實現的任何 過程保護。

切換出用戶模式的唯一方式是導致例外,其中 導致處理器切換到特權模式,以便 通過硬件向量爲其提供服務。正常的方式是直接或通過OS API 使用SWI (軟件中斷)指令。但是,完全取決於操作系統,無論是實施 此工具還是授予特定任務的權限。

所以,不是隻編寫一個「ARM中斷處理程序」,而是真的需要在操作系統級別解決這個問題。換句話說,你需要研究如何編寫一個Linux內核驅動程序(它將依次調用ARM命令來切換模式)。

有很多很多資源可以向您介紹內核編程。例如:

+0

PS:您可以直接在第二個教程「Bare Metal」教程中使用您的中斷處理程序。 *但是* ...你無法啓動你的qemu到Linux。運行操作系統「改變規則」。 – paulsm4

+0

關於爲什麼第二個教程不起作用的建議現在有意義。我會追求你以前的聯繫。感謝您的谷歌討論鏈接。 – rockstar

相關問題