我試圖在運行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)
任何人都可以指導我獲得更好的資源,
關於如何解決這個問題的任何建議。我是嵌入式編程的新手,所以我認爲我的知識不是很好。
關鍵的一點要注意的是,因爲你正在運行Linux,_you_沒有處理器的控制; Linux內核的確如此。因此你必須遵守Linux的規則。 – Notlikethat
@Notlikethat謝謝我實現了同樣的;如果您有任何有關Linux內核開發的良好資源,請分享。再次感謝 – rockstar
您是否正在嘗試做這個裸機(自己寫這一切),還是將功能添加到Linux?這個問題聽起來像是在同時問兩個問題。 – unixsmurf