- 相關(guān)推薦
Bootrom功能改進經(jīng)驗談
摘要:以VxWorks嵌入式實時操作系統(tǒng)為例,介紹了改進啟動代碼(Bootrom)功能的四點經(jīng)驗:(1)具備故障保護功能的Bootrom的自我在線更新;(2)增加重啟功能;(3)自動運行應(yīng)用軟件;(4)多種應(yīng)用軟件的選擇。VxWorks是美國WindRiver System公司于1983年設(shè)計開發(fā)后個運行在目標機上的高性能、可裁減的嵌入式實時操作系統(tǒng)(RTOS)。它是一種功能強大而且比較復(fù)雜的操作系統(tǒng),包括了進程管理、存儲管理、設(shè)備管理、文件系統(tǒng)管理、網(wǎng)絡(luò)協(xié)議及系統(tǒng)應(yīng)用等幾部分。VxWorks為程序員提供了高效的實時多任務(wù)調(diào)度、中斷管理、實時的系統(tǒng)資源以及實時的任務(wù)間通信。其核心功能主要有微內(nèi)核、任務(wù)間通信機制、網(wǎng)絡(luò)支持、文件系統(tǒng)和I/O管理、POSIX標準實時擴展以及C 等其他標準支持。在各種CPU平臺上提供了統(tǒng)一的編程接口和一致的運行特性,盡可能地屏蔽不同CPU之間的底層差異。應(yīng)用程序員可以將盡可能多的精力放在應(yīng)用程序本身,而不必關(guān)心系統(tǒng)資源的管理。VxWorks以其良好的可靠性和卓越的實時性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精類技術(shù)及實時要求極高的領(lǐng)域中,如衛(wèi)星通信、彈道制導(dǎo)、飛機導(dǎo)航等。
設(shè)計師通常利用VxWorks開發(fā)Bootrom代碼。Bootrom相當于PC機中的BIOS,它完成對加載過程中所需設(shè)備的初始化及驅(qū)動;然后,通過某種可選擇的通信手段(如網(wǎng)口、串口),將VxWorks內(nèi)核加載。VxWorks內(nèi)核相關(guān)于PC機上的操作系統(tǒng),如Linux、Windows。此外,Bootrom還提供了一些輔助功能,如地址內(nèi)容查看、地址內(nèi)容修改和Bootrom菜單顯示信息控制等功能。但是,在實際應(yīng)用中,這些功能不夠豐富,便利性不足。本文介紹了幾點筆者在工作中行之有效的改進Bootrom功能的經(jīng)驗。
1 具備故障保護功能的Bootrom的自我在線更新
Bootrom一般以二進制文件的方式保存在非易失懷存儲介質(zhì),例如Flash、CF卡、EPROM中。通常需要仿無休止器、燒結(jié)器或JTAG工具等才能將代碼燒入這類介質(zhì),在實際應(yīng)用中非常不便。以Flash為例介紹如何在線更新Bootrom。
首先,為了做到故障保護,防止在更新過程中發(fā)生更新文件出錯、斷電等災(zāi)難性故障,Bootrom的數(shù)據(jù)必須在更新之前備份在Flash的另一區(qū)域。因此,F(xiàn)lash中必須存在兩片物理區(qū)域,暫且命名為PA和PB,每片512KB(假設(shè)Bootrom文件小于512KB)。兩片物理區(qū)域的起始地址可以互換,其中一片區(qū)域的起始地址必須為系統(tǒng)的上電啟動地址,這個地址因處理器而異,例如,PowerPC體系結(jié)構(gòu)的處理器的啟動地址一般是0xfff00100,而MIPS體系結(jié)構(gòu)的處理器的啟動地址是0xbfc00000。在邏輯上,以啟動地址開始的區(qū)域為主Boot區(qū),另一片區(qū)域為備Boot區(qū)。
為了實現(xiàn)地址互聯(lián)換,在CPU模塊和Flash芯片之間,增加了一片CPLD(可編程邏輯器件)和一個跳線或撥號開關(guān),開關(guān)信號JP輸入到CPLD。CPU訪問Flash的地址信號和片選信號經(jīng)過CPLD進行地址互換,再到Flash芯片。如果不跳線(默認情況),JP信號為高,則PA的起始地址為啟動地址,PA為主Boot區(qū),PB為備Boot區(qū);否則,JP信號為低,PB的起始地址為啟動地址,PB為主Boot區(qū),PA為備Boot區(qū)。默認情況下,PA為主Boot區(qū)。如圖1。
如果系統(tǒng)中有兩片F(xiàn)lash芯片,可以不用CPLD,選用另一種地址互換方式,如圖2。兩個二選一邏輯實現(xiàn)兩片F(xiàn)lash片選信號(CS)的互換,從而實現(xiàn)了地址的互換。
地址互換機制屏蔽了PA和PB實際物理位置的差別,給底層軟件提供了一個統(tǒng)一的接口,帶來的好處不言而喻。Bootrom數(shù)據(jù)總線是從主Boot區(qū)備份到備Boot區(qū),系統(tǒng)總是從主Boot區(qū)啟動。
其次,編寫Flash擦寫驅(qū)動函數(shù)。Flash是一種讀寫非對稱器件,讀數(shù)據(jù)與普通器件一樣,比較簡單;而寫必須根據(jù)芯片廠商提供的算法,先擦除欲寫入數(shù)據(jù)的區(qū)域,以扇區(qū)(Sector)為單位,然后寫入數(shù)據(jù)。函數(shù)flashUpdate(char *sourceAddr,char *destAddr,int Length)集成了擦除和寫入兩個步驟。
再次,在文件bootConfig.cr Bootrom操作接口函數(shù)bootCmdLoop()中增加新命令“u”(update的編寫)。
switch(*(pLine )){
……
case 'u'; /*更新Bootrom*/
…… /*下載更新代碼并更新*/
break;
……
}
“u”命令的實現(xiàn)流程如圖3。除了flashUpdate()之外,其它函數(shù)都由VxWorks本身提供。如果更新挫敗,則改變JP設(shè)置,從備份Bootrom啟動,再次更新Bootrom或運行應(yīng)用軟件。
2 增加重啟功能
VxWorks的Bootrom用戶命令缺少重啟功能,給調(diào)試和實際應(yīng)用帶來諸多不便。與Bootrom在線更新方法相同,增加這項功能其實并不難,只要在函數(shù)bootCmdLoop()中增加新命令“r”(reset的縮寫),在命令中調(diào)用系統(tǒng)重啟函數(shù)sysReboot()即可。SysReboot()由設(shè)計師根據(jù)系統(tǒng)的不同自行編寫。
Switch(*(pLine )){
……
case 'r'; /*重啟系統(tǒng)*/
sysReboot();
break;
……
}
舉一反三,還可以根據(jù)需要在Bootrom中增加許多自己的命令
【Bootrom功能改進經(jīng)驗談】相關(guān)文章:
論我國訴訟費調(diào)節(jié)功能的缺失和改進03-22
改進管理 強化功能 參與國際物流市場競爭03-18
制度的功能01-12
聲樂社會功能與心理功能的探討03-05
旅游的審美功能03-21
論分部報告的改進03-23
如何改進成本管理03-22
功能語法視角下的英語報紙新聞標題的功能03-11