模擬器開發(fā)以及嵌入式系統(tǒng)內核調試
一、模擬器的開發(fā)
1. 什么是模擬器
模擬器是一組應用程序,它運行于一個OS之上(linux或windows),提供對目標板功能的模擬,包括中斷系統(tǒng),RAM,F(xiàn)LASH系統(tǒng),以及目標OS到宿主OS任務的映射。
2. 模擬器與虛擬機的區(qū)別
模擬器不同于虛擬機,虛擬機從設備的角度來模擬一個目標板,微細到提供對每條處理器指令的支持,而模擬器則從功能的角度進行模擬,重點在于對目標OS運行狀態(tài)的監(jiān)視,以及執(zhí)行邏輯的監(jiān)視。方便調試系統(tǒng)內核,以及開發(fā)初期的可行性調研。另外模擬器是在C語言級別上提供模擬,所以無論目標OS基于什么CPU,只要是C語言寫的,模擬器就能提供對它的模擬。
3. 如何在windows環(huán)境下開發(fā)模擬器
3.1.模擬器的基本構造
一個基本的模擬器只要提供對中斷系統(tǒng)的模擬,任務映射的模擬,內存以及堆棧的模擬就可以在其上面運行嵌入式實時內核了,當然我們還需要一個輸入輸出的設備,來干預及監(jiān)視嵌入式內核的運行。
3.2.中斷系統(tǒng)
中斷系統(tǒng)是模擬器的核心,因為任務的調度本質上都是通過中斷完成的(非搶占式系統(tǒng)例外)。以simuos為例,有8個中斷源,包括異常、時鐘、串口、鍵盤等。為了減輕模擬器的負擔,實際上只產(chǎn)生一個中斷事件,然后通過查詢的方式來進行中斷的路由。
3.3.任務映射
任務映射是模擬器與虛擬機的主要區(qū)別,虛擬機不需要任務映射,因此它也不可能了解嵌入式內核的運行邏輯與運行狀態(tài),只能通過觀察寄存器來推斷。而模擬器將每一個目標OS的任務都記錄下來,然后統(tǒng)一管理它們的運行,而達到監(jiān)視和干預的目的。
3.4.其他
LCD和鍵盤的模擬。
二、實時內核移植
1. 移植的前提
移植的唯一前提是我們必須擁有目標OS的源代碼。
2. 移植時的注意事項
注意中斷系統(tǒng)的掛接,注意任務管理器的安裝。
3. 以ucosii舉例(搶占式)
ucosii為優(yōu)先級搶占式實時系統(tǒng)內核,廣泛應用于工控領域,由于其源碼開放
所以倍受學生和廣大嵌入式愛好者的青睞。但是對于初學者而言,嵌入式系統(tǒng)就象一個黑盒子,雖然有代碼在手但卻不能感觀體驗到其運行時所帶來的魅力。將其移植到模擬器上,我們不但能觀察ucosii的任務管理方式,還能隨時設置斷點來對自己的程序進行調試。移植的源代碼及demo程序請自行下載:www.mshowtec.com
4. 以rtke舉例(非搶占式)
rtke是菲利普手機解決方案中應用的實時內核,該內核的最大缺點就是非搶占式,一個task必須自己放棄CPU的使用權才能使其他高優(yōu)先級的任務得到調度。因此在其上面寫程序必須十分小心,另外通過模擬器我們可以跟蹤到每個消息發(fā)往何處,每個信號量的使用狀況,當前內存的狀態(tài)等等。Demo程序請自行下載:www.mshowtec.com
三、VC環(huán)境下調試
1. 模擬器下調試的優(yōu)缺點
優(yōu)點是直觀方便,缺點是由于模擬器并不是真實的硬件環(huán)境,因此許多依賴于硬件的代碼無法進行調試,但是對于調試系統(tǒng)內核和普通的應用程序已經(jīng)是夠用了,尤其是在解決系統(tǒng)死鎖的問題上是最有用的利器。
2. 調試手段與方法
可以利用模擬器本身提供的調試工具進行分析系統(tǒng)狀態(tài),也可以在OS代碼中加入自己的trace信息來跟蹤系統(tǒng)的運行,具體請參照上面提供的兩個例子。
四、小結
通過對模擬器simuos的開發(fā),以及對幾個實時內核的移植,我們發(fā)現(xiàn)在嵌入式領域我們缺乏的是基礎教育,每個從事嵌入式開發(fā)的工程師大多都是工作以后才對嵌入式系統(tǒng)有一個比較完整和深刻的認識的,如果每所大學能讓我們的學生在上學期間親手移植一個甚至是幾個嵌入式系統(tǒng)內核,那么我們的畢業(yè)生的技術素質將會有顯著的提高。Simuos這個項目就是為這個目的而開發(fā)的,希望它能給正在學習或打算學習嵌入式開發(fā)的同學或工程師帶來幫助。
評論