国产在线导航,欧美日本中文,黄色在线观看网站永久免费乱码,chinese国产在线视频,亚洲欧洲第一视频,天天做人人爱夜夜爽2020毛片,亚洲欧美中文字幕在线网站

現(xiàn)在位置:范文先生網(wǎng)>理工論文>電子通信論文>Bootrom功能改進(jìn)經(jīng)驗(yàn)談

Bootrom功能改進(jìn)經(jīng)驗(yàn)談

時(shí)間:2023-02-20 23:16:09 電子通信論文 我要投稿
  • 相關(guān)推薦

Bootrom功能改進(jìn)經(jīng)驗(yàn)談

摘要:以VxWorks嵌入式實(shí)時(shí)操作系統(tǒng)為例,介紹了改進(jìn)啟動(dòng)代碼(Bootrom)功能的四點(diǎn)經(jīng)驗(yàn):(1)具備故障保護(hù)功能的Bootrom的自我在線更新;(2)增加重啟功能;(3)自動(dòng)運(yùn)行應(yīng)用軟件;(4)多種應(yīng)用軟件的選擇。

    關(guān)鍵詞:Bootrom 嵌入式實(shí)時(shí)操作系統(tǒng) FTP

VxWorks是美國(guó)WindRiver System公司于1983年設(shè)計(jì)開(kāi)發(fā)后個(gè)運(yùn)行在目標(biāo)機(jī)上的高性能、可裁減的嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)。它是一種功能強(qiáng)大而且比較復(fù)雜的操作系統(tǒng),包括了進(jìn)程管理、存儲(chǔ)管理、設(shè)備管理、文件系統(tǒng)管理、網(wǎng)絡(luò)協(xié)議及系統(tǒng)應(yīng)用等幾部分。VxWorks為程序員提供了高效的實(shí)時(shí)多任務(wù)調(diào)度、中斷管理、實(shí)時(shí)的系統(tǒng)資源以及實(shí)時(shí)的任務(wù)間通信。其核心功能主要有微內(nèi)核、任務(wù)間通信機(jī)制、網(wǎng)絡(luò)支持、文件系統(tǒng)和I/O管理、POSIX標(biāo)準(zhǔn)實(shí)時(shí)擴(kuò)展以及C++等其他標(biāo)準(zhǔn)支持。在各種CPU平臺(tái)上提供了統(tǒng)一的編程接口和一致的運(yùn)行特性,盡可能地屏蔽不同CPU之間的底層差異。應(yīng)用程序員可以將盡可能多的精力放在應(yīng)用程序本身,而不必關(guān)心系統(tǒng)資源的管理。VxWorks以其良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在通信、軍事、航空、航天等高精類技術(shù)及實(shí)時(shí)要求極高的領(lǐng)域中,如衛(wèi)星通信、彈道制導(dǎo)、飛機(jī)導(dǎo)航等。

設(shè)計(jì)師通常利用VxWorks開(kāi)發(fā)Bootrom代碼。Bootrom相當(dāng)于PC機(jī)中的BIOS,它完成對(duì)加載過(guò)程中所需設(shè)備的初始化及驅(qū)動(dòng);然后,通過(guò)某種可選擇的通信手段(如網(wǎng)口、串口),將VxWorks內(nèi)核加載。VxWorks內(nèi)核相關(guān)于PC機(jī)上的操作系統(tǒng),如Linux、Windows。此外,Bootrom還提供了一些輔助功能,如地址內(nèi)容查看、地址內(nèi)容修改和Bootrom菜單顯示信息控制等功能。但是,在實(shí)際應(yīng)用中,這些功能不夠豐富,便利性不足。本文介紹了幾點(diǎn)筆者在工作中行之有效的改進(jìn)Bootrom功能的經(jīng)驗(yàn)。
(范文先生網(wǎng)www.qkfawen.com收集整理)
1 具備故障保護(hù)功能的Bootrom的自我在線更新

Bootrom一般以二進(jìn)制文件的方式保存在非易失懷存儲(chǔ)介質(zhì),例如Flash、CF卡、EPROM中。通常需要仿無(wú)休止器、燒結(jié)器或JTAG工具等才能將代碼燒入這類介質(zhì),在實(shí)際應(yīng)用中非常不便。以Flash為例介紹如何在線更新Bootrom。

首先,為了做到故障保護(hù),防止在更新過(guò)程中發(fā)生更新文件出錯(cuò)、斷電等災(zāi)難性故障,Bootrom的數(shù)據(jù)必須在更新之前備份在Flash的另一區(qū)域。因此,F(xiàn)lash中必須存在兩片物理區(qū)域,暫且命名為PA和PB,每片512KB(假設(shè)Bootrom文件小于512KB)。兩片物理區(qū)域的起始地址可以互換,其中一片區(qū)域的起始地址必須為系統(tǒng)的上電啟動(dòng)地址,這個(gè)地址因處理器而異,例如,PowerPC體系結(jié)構(gòu)的處理器的啟動(dòng)地址一般是0xfff00100,而MIPS體系結(jié)構(gòu)的處理器的啟動(dòng)地址是0xbfc00000。在邏輯上,以啟動(dòng)地址開(kāi)始的區(qū)域?yàn)橹鰾oot區(qū),另一片區(qū)域?yàn)閭銪oot區(qū)。

為了實(shí)現(xiàn)地址互聯(lián)換,在CPU模塊和Flash芯片之間,增加了一片CPLD(可編程邏輯器件)和一個(gè)跳線或撥號(hào)開(kāi)關(guān),開(kāi)關(guān)信號(hào)JP輸入到CPLD。CPU訪問(wèn)Flash的地址信號(hào)和片選信號(hào)經(jīng)過(guò)CPLD進(jìn)行地址互換,再到Flash芯片。如果不跳線(默認(rèn)情況),JP信號(hào)為高,則PA的起始地址為啟動(dòng)地址,PA為主Boot區(qū),PB為備Boot區(qū);否則,JP信號(hào)為低,PB的起始地址為啟動(dòng)地址,PB為主Boot區(qū),PA為備Boot區(qū)。默認(rèn)情況下,PA為主Boot區(qū)。如圖1。

如果系統(tǒng)中有兩片F(xiàn)lash芯片,可以不用CPLD,選用另一種地址互換方式,如圖2。兩個(gè)二選一邏輯實(shí)現(xiàn)兩片F(xiàn)lash片選信號(hào)(CS)的互換,從而實(shí)現(xiàn)了地址的互換。

地址互換機(jī)制屏蔽了PA和PB實(shí)際物理位置的差別,給底層軟件提供了一個(gè)統(tǒng)一的接口,帶來(lái)的好處不言而喻。Bootrom數(shù)據(jù)總線是從主Boot區(qū)備份到備Boot區(qū),系統(tǒng)總是從主Boot區(qū)啟動(dòng)。

其次,編寫Flash擦寫驅(qū)動(dòng)函數(shù)。Flash是一種讀寫非對(duì)稱器件,讀數(shù)據(jù)與普通器件一樣,比較簡(jiǎn)單;而寫必須根據(jù)芯片廠商提供的算法,先擦除欲寫入數(shù)據(jù)的區(qū)域,以扇區(qū)(Sector)為單位,然后寫入數(shù)據(jù)。函數(shù)flashUpdate(char *sourceAddr,char *destAddr,int Length)集成了擦除和寫入兩個(gè)步驟。

再次,在文件bootConfig.cr Bootrom操作接口函數(shù)bootCmdLoop()中增加新命令“u”(update的編寫)。

switch(*(pLine++)){

……

case 'u'; /*更新Bootrom*/

…… /*下載更新代碼并更新*/

break;

……

}

“u”命令的實(shí)現(xiàn)流程如圖3。除了flashUpdate()之外,其它函數(shù)都由VxWorks本身提供。如果更新挫敗,則改變JP設(shè)置,從備份Boot

rom啟動(dòng),再次更新Bootrom或運(yùn)行應(yīng)用軟件。

2 增加重啟功能

VxWorks的Bootrom用戶命令缺少重啟功能,給調(diào)試和實(shí)際應(yīng)用帶來(lái)諸多不便。與Bootrom在線更新方法相同,增加這項(xiàng)功能其實(shí)并不難,只要在函數(shù)bootCmdLoop()中增加新命令“r”(reset的縮寫),在命令中調(diào)用系統(tǒng)重啟函數(shù)sysReboot()即可。SysReboot()由設(shè)計(jì)師根據(jù)系統(tǒng)的不同自行編寫。

Switch(*(pLine++)){

……

case 'r'; /*重啟系統(tǒng)*/

sysReboot();

break;

……

}

舉一反三,還可以根據(jù)需要在Bootrom中增加許多自己的命令。完成之后,不要忘了在Bootrom命令解釋函數(shù)bootHelp()中添加新增命令的用途、用法等幫助信息。

3 自動(dòng)運(yùn)行應(yīng)用軟件

在實(shí)際應(yīng)用中,一般將上層軟件和VxWorks映象鏈接在一起,暫且稱之為應(yīng)用程序。默認(rèn)情況下,當(dāng)Bootrom運(yùn)行后,它會(huì)倒計(jì)時(shí)7s,然后從啟動(dòng)參數(shù)(BOOT_LINE)指定的路徑下載應(yīng)用程序。但是,因?yàn)锽ootrom提供了啟動(dòng)參數(shù)修改命令,啟動(dòng)參數(shù)可能由于某些原因發(fā)生更改。例如調(diào)試時(shí)需要從FTP服務(wù)器下載,或者疏忽好奇等,給下次應(yīng)用帶來(lái)不少麻煩,很可能出現(xiàn)應(yīng)用程序下載挫敗等故障。

為了保證自動(dòng)啟動(dòng)總是從固定路徑下載應(yīng)用程序,而不受啟動(dòng)參數(shù)的影響,需要修改文件bootConfig.c中的自動(dòng)啟動(dòng)函數(shù)autoboot()。例如,自動(dòng)啟動(dòng)總是從CF卡讀取應(yīng)用程序。

if(bytesRead ==0){ /*倒計(jì)時(shí)期間沒(méi)有輸入*/

LoadApplicationImage();/*復(fù)制應(yīng)用程序映象到起始地址為Entry的內(nèi)存中*/

go((FUNCPTR)ENTRY;/*從Entry地址開(kāi)始運(yùn)行*/

}

else{

……

}

Entry是應(yīng)用程序的入口地址,VxWorks系統(tǒng)中該值是RAM_LOW_ADRS。LoadApplicationImage()函數(shù)將應(yīng)用程序映旬從CF卡復(fù)制到起始地址為Entry的內(nèi)存中,然后將PC指針指向該地址,啟動(dòng)系統(tǒng)。如果在倒計(jì)時(shí)期間有字符輸入,則進(jìn)入Bootrom的命令界面,用戶可以修改啟動(dòng)參數(shù),然后按“@”從啟動(dòng)參數(shù)指定的路徑下載程序,而不影響調(diào)試,但是更改后的參數(shù)不會(huì)影響下次自動(dòng)啟動(dòng)的下載路徑。

4 多種應(yīng)用軟件的選擇

在通信領(lǐng)域,許多產(chǎn)品的硬件平臺(tái)其實(shí)相同,區(qū)別在于應(yīng)用軟件。不同的軟件塑造出了一個(gè)個(gè)特色鮮明的產(chǎn)品。如果能夠?qū)⒉煌能浖傻揭粋(gè)硬件平臺(tái)上,由用戶在啟動(dòng)時(shí)選擇,那么這個(gè)產(chǎn)品就擁有一機(jī)多能的特性,大大增強(qiáng)了產(chǎn)品的市場(chǎng)競(jìng)爭(zhēng)力。

退而言之,即使硬件平臺(tái)只適合于一種應(yīng)用軟件,將故障檢測(cè)程序作為另一種應(yīng)用軟件,會(huì)帶給產(chǎn)品測(cè)試和現(xiàn)場(chǎng)維修人員諸多的方便。

參考以上三點(diǎn)經(jīng)驗(yàn),在Bootrom中增加這項(xiàng)功能并非難事。以兩個(gè)應(yīng)用軟件為例,在函數(shù)bootCmdLoop()中增加新命令“o”(other的編寫),如下所示。

switch(*(pLine++)){

……

case 'o': /*啟動(dòng)另一應(yīng)用軟件*/

LoadAnoterApplicationImage();/*復(fù)制另一應(yīng)用程序映象到起始地址為Entry的內(nèi)存中*/

AutoSystemVersionSet();/*詢問(wèn)用戶是否將另一應(yīng)用軟件設(shè)置為默認(rèn)啟動(dòng)*/

go((FUNCPTR)Entry);/*從Entry地址開(kāi)始運(yùn)行*/

break;

……

}

圖3

    在Bootrom代碼中定義一個(gè)變量defaultVersion,用于記錄誰(shuí)是

默認(rèn)的啟動(dòng)軟件,該變量保存在Flash等非易失媒質(zhì)中。上電后,如果在倒計(jì)暑期間沒(méi)有任何輸入,系統(tǒng)自動(dòng)啟動(dòng)defaultVersion指定的應(yīng)用軟件;否則,用戶進(jìn)入命令界面。如果鍵入“o”命令,Bootrom調(diào)用函數(shù)LoadAnotherApplicationImage()將另一應(yīng)用程序映象復(fù)制到起始地址為Entry的內(nèi)存區(qū)域,然后詢問(wèn)用戶是否希望將另一應(yīng)用程序設(shè)置為默認(rèn)啟動(dòng);如果用戶回答“是”,更改defaultVersion值;否則,defaultVersion值不變。最后運(yùn)行當(dāng)前選定的應(yīng)用軟件。

上述的幾點(diǎn)經(jīng)驗(yàn)大部分是修改文件bootConfig.c的代碼。因?yàn)閎ootConfig.c是一個(gè)公用文件,為了不影響其它底層軟件的開(kāi)發(fā),建議將它復(fù)制到當(dāng)前Bootrom開(kāi)發(fā)目錄下,并且在Makefile文件中增加定義:BOOTCONFIG=bootConfig.c。

嵌入式系統(tǒng)開(kāi)發(fā)需要經(jīng)常開(kāi)辟新的思路,一些微小的簡(jiǎn)單改動(dòng)通常能夠帶給產(chǎn)品新的功能和特征。啟動(dòng)代碼是嵌入式系統(tǒng)的重要組成部分。筆者的以上四點(diǎn)經(jīng)驗(yàn)在PowerPC處理器(MPC8260)平臺(tái)和MIPS處理器(RM7000A)平臺(tái)上得到了驗(yàn)證,希望對(duì)其它系統(tǒng)的啟動(dòng)代碼的開(kāi)發(fā)有所借鑒和啟迪。


【Bootrom功能改進(jìn)經(jīng)驗(yàn)談】相關(guān)文章:

基于VxWorks的bootrom代碼改進(jìn)08-06

改進(jìn)管理 強(qiáng)化功能 參與國(guó)際物流市場(chǎng)競(jìng)爭(zhēng)08-05

高校重點(diǎn)學(xué)科建設(shè)中政府功能的發(fā)揮與改進(jìn)08-17

臨床科研經(jīng)驗(yàn)談08-05

我的習(xí)武經(jīng)驗(yàn)談——緣起08-18

多媒體教學(xué)經(jīng)驗(yàn)談08-17

實(shí)驗(yàn)改進(jìn)三則08-17

問(wèn)題、思考、改進(jìn)08-17

改進(jìn)話題作文07-20