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