資料介紹
摘要:在Wind River公司開發(fā)的VxWorks嵌入式操作系統(tǒng)平臺(tái)上,改進(jìn)交換機(jī)產(chǎn)品bootrom軟件的實(shí)現(xiàn)方式;給出實(shí)現(xiàn)方法和改進(jìn)目的,為BSP開發(fā)人員提供一套全新的bootrom實(shí)現(xiàn)方案。?
?????? 關(guān)鍵詞:VxWorks bootrom BSP makefile?
1 問題的提出?
?????? VxWorks是Wind River公司開發(fā)的一種嵌入式操作系統(tǒng),具有強(qiáng)大的功能和友好的用戶界面。VxWorks軟件應(yīng)用非常廣泛,不僅應(yīng)用在網(wǎng)絡(luò)設(shè)備、家用電器當(dāng)中,而且還應(yīng)用在航天、導(dǎo)彈等高端領(lǐng)域。在網(wǎng)絡(luò)設(shè)備應(yīng)用領(lǐng)域中,通常利用VxWorks來開發(fā)bootrom代碼、BSP(Boadr Support Packet)代碼以及上層的網(wǎng)絡(luò)協(xié)議代碼。?
?????? 通常,Bootrom軟件有以下功能:①通過串口下載操作系統(tǒng)映像;②通過串口升級(jí)自身映像;③通過串口下載系統(tǒng)配置文件、系統(tǒng)信息文件;④加載操作系統(tǒng)映像,使其正常啟動(dòng);⑤其它的輔助功能,如地址內(nèi)容查看功能、址內(nèi)容修改功能和bootrom菜單顯示信息控制的功能等。對(duì)于通常的bootrom代碼編譯,大多數(shù)用戶選擇使用GNU make的DOS命令來進(jìn)行。因?yàn)槿绻鸼ootrom不提供網(wǎng)口功能的話,單純的CPU驅(qū)動(dòng)部分代碼量是不大的;但如果提供網(wǎng)口功能的話,代碼量相對(duì)較大,文件之間的內(nèi)在關(guān)系比較復(fù)雜,因此,系統(tǒng)使用GNU make的DOS命令來編譯生成bootrom就顯得有點(diǎn)麻煩。Makefile文件主要是由“目標(biāo)”(target)、“依賴性”(dependencies)和“動(dòng)作”組成的一系列規(guī)則,而VxWorks提供的GNU make工具就是根據(jù)Makefile指定的規(guī)則來編譯和鏈接程序的。Makefile基本結(jié)構(gòu)雖然簡(jiǎn)單,但正確、靈活地運(yùn)用這些規(guī)則并不是那么輕松的事情。即使根據(jù)GNU Makefile規(guī)則書寫出適當(dāng)?shù)腗akefile文件,但隨著代碼的改變,Makefile還需要經(jīng)常修改,這就增加了BSP開發(fā)人員的負(fù)擔(dān)。而且,對(duì)于交換產(chǎn)品而言,其成本控制是非常嚴(yán)格的。對(duì)于存放bootrom軟件的Flash來說,通常要求大小為512KB,這樣就需要考慮到容量的限制。?
?????? 因此,必須使用新的方法來簡(jiǎn)化bootrom代碼編譯,而且要在保證提供網(wǎng)口功能的情況下,系統(tǒng)提供的bootrom軟件小于512KB。?
2 實(shí)現(xiàn)方法?
2.1 通過建立工程生成bootrom映像?
?????? 采用建立工程的方式可以有效地解決這個(gè)問題。首先依據(jù)bootrom中的BSP代碼來新建一個(gè)工程,然后將網(wǎng)中驅(qū)動(dòng)代碼加入到建好的工程中。這樣就可以通過編譯工程實(shí)現(xiàn)帶有網(wǎng)口下載功能的bootrom軟件。但對(duì)于VxWorks嵌入式系統(tǒng)而言,它有自己一套規(guī)范,求bootrom軟件在加電后必須從romInit()函數(shù)開始運(yùn)行,而建立工程所得的入口函數(shù)為sysInit()。因此需要增加一個(gè)系統(tǒng)殼代碼,這個(gè)殼代碼所要完成的任務(wù)就是加載bootrom工程的映像,并從romInit()開始執(zhí)行bootrom代碼。通過建立工程來調(diào)試bootrom代碼有以下優(yōu)點(diǎn)。?
?????? (1)責(zé)任分明?
?????? 開發(fā)產(chǎn)品是一個(gè)復(fù)雜的工程,需要多人合作完成。對(duì)于CPU子系統(tǒng)和網(wǎng)口驅(qū)動(dòng)系統(tǒng)這兩塊內(nèi)容來說,更需要責(zé)任明確。通過建立工程來調(diào)試代碼,可以準(zhǔn)確地定位錯(cuò)誤文件和函數(shù)的位置。是BSP代碼出現(xiàn)問題,還是網(wǎng)口驅(qū)動(dòng)代碼出現(xiàn)問題,可以一目了然,做到責(zé)任明確。?
?????? (2)提高效率?
?????? 通過建立工程可以節(jié)省書寫Makefile文件時(shí)間,并可以讓VxWorks軟件的友好圖形界面這優(yōu)點(diǎn)得到更好的體現(xiàn)。另外,建立工程也可以減少文件編譯排錯(cuò)的難度,方便工程文件的調(diào)試以及功能的驗(yàn)證,從而大大提高工作效率,加快工作進(jìn)度。?
2.2 編寫殼代碼并實(shí)現(xiàn)加載?
?????? 建立工程生成映像文件的入口函數(shù)為sysInit(),而VxWorks規(guī)范中要求系統(tǒng)加電后要從romInit()函數(shù)開始運(yùn)行。因此,需要設(shè)計(jì)一個(gè)方案來加載編譯工程得到的映像,而且要具備初始化CPU和SDRAM存儲(chǔ)空間的功能。?
?????? 首先,系統(tǒng)從romInit()函數(shù)中開始運(yùn)行,完成CPU和SDRAM初始化,跳轉(zhuǎn)到函數(shù)romStart()運(yùn)行。然后,加載第二份bootrom代碼到系統(tǒng)的低地址處,運(yùn)行殼代碼中的sysInit()函數(shù),并調(diào)用自己構(gòu)造的解壓函數(shù)usrInit(),將壓縮后的工程映像文件解壓縮到系統(tǒng)高地址處,之后系統(tǒng)繼續(xù)運(yùn)行解壓后的bootrom代碼。此時(shí),系統(tǒng)開始運(yùn)行sysInit()函數(shù),調(diào)用VxWorks系統(tǒng)中的usrInit()函數(shù),開始初始化系統(tǒng)硬件、內(nèi)核以及其它外圍設(shè)備。?
?????? 殼函數(shù)usrInit()代碼如下:?
void usrInit(void){?
volatile FUNCPTR absEntry;?
if(inflate((UCHAR*)ROM_OFFSET(_binArrayStart),?
(UCHAR *)(RAM_LOW_ADRS),&_binArrayEndbinArrayStart)!=OK)?
return;?
absEntry=(FUNCPTR)(RAM_LOW_ADRS);?
(absEntry)();?
}?
?????? 其中RAM_LOW_ADRS為系統(tǒng)低地址,是操作系統(tǒng)運(yùn)行的起始地址,但bootrom可以利用低地址來實(shí)現(xiàn)在系統(tǒng)高地址的運(yùn)行。宏ROM_OFFSET用于準(zhǔn)確定位函數(shù)地址,因?yàn)閎ootrom中運(yùn)行的代碼要求以相對(duì)地址方式來尋址,而不能以絕對(duì)地址方式尋址。_binArrayStart為壓縮后二進(jìn)制代碼的開始符,_binArrayEnd為壓縮后二進(jìn)制代碼的結(jié)束符。Inflate()是VxWorks軟件的解壓縮函數(shù),用于解壓縮由deflate()壓縮函數(shù)壓縮的二進(jìn)制文件映像。同時(shí),需要將下述代碼添加到編譯規(guī)則文件rules.vxWorks中的相應(yīng)部分:?
$(CC)-c $(CFLAGS)$(BSP_DIR)/unzip.c-o$(BSP_DIR)/unzip.o?
$(LD)$(LDFLAGS)-e sysInit -Ttext $(RAM_LOW_ADRS)o?
?????? 關(guān)鍵詞:VxWorks bootrom BSP makefile?
1 問題的提出?
?????? VxWorks是Wind River公司開發(fā)的一種嵌入式操作系統(tǒng),具有強(qiáng)大的功能和友好的用戶界面。VxWorks軟件應(yīng)用非常廣泛,不僅應(yīng)用在網(wǎng)絡(luò)設(shè)備、家用電器當(dāng)中,而且還應(yīng)用在航天、導(dǎo)彈等高端領(lǐng)域。在網(wǎng)絡(luò)設(shè)備應(yīng)用領(lǐng)域中,通常利用VxWorks來開發(fā)bootrom代碼、BSP(Boadr Support Packet)代碼以及上層的網(wǎng)絡(luò)協(xié)議代碼。?
?????? 通常,Bootrom軟件有以下功能:①通過串口下載操作系統(tǒng)映像;②通過串口升級(jí)自身映像;③通過串口下載系統(tǒng)配置文件、系統(tǒng)信息文件;④加載操作系統(tǒng)映像,使其正常啟動(dòng);⑤其它的輔助功能,如地址內(nèi)容查看功能、址內(nèi)容修改功能和bootrom菜單顯示信息控制的功能等。對(duì)于通常的bootrom代碼編譯,大多數(shù)用戶選擇使用GNU make的DOS命令來進(jìn)行。因?yàn)槿绻鸼ootrom不提供網(wǎng)口功能的話,單純的CPU驅(qū)動(dòng)部分代碼量是不大的;但如果提供網(wǎng)口功能的話,代碼量相對(duì)較大,文件之間的內(nèi)在關(guān)系比較復(fù)雜,因此,系統(tǒng)使用GNU make的DOS命令來編譯生成bootrom就顯得有點(diǎn)麻煩。Makefile文件主要是由“目標(biāo)”(target)、“依賴性”(dependencies)和“動(dòng)作”組成的一系列規(guī)則,而VxWorks提供的GNU make工具就是根據(jù)Makefile指定的規(guī)則來編譯和鏈接程序的。Makefile基本結(jié)構(gòu)雖然簡(jiǎn)單,但正確、靈活地運(yùn)用這些規(guī)則并不是那么輕松的事情。即使根據(jù)GNU Makefile規(guī)則書寫出適當(dāng)?shù)腗akefile文件,但隨著代碼的改變,Makefile還需要經(jīng)常修改,這就增加了BSP開發(fā)人員的負(fù)擔(dān)。而且,對(duì)于交換產(chǎn)品而言,其成本控制是非常嚴(yán)格的。對(duì)于存放bootrom軟件的Flash來說,通常要求大小為512KB,這樣就需要考慮到容量的限制。?
?????? 因此,必須使用新的方法來簡(jiǎn)化bootrom代碼編譯,而且要在保證提供網(wǎng)口功能的情況下,系統(tǒng)提供的bootrom軟件小于512KB。?
? |
2 實(shí)現(xiàn)方法?
2.1 通過建立工程生成bootrom映像?
?????? 采用建立工程的方式可以有效地解決這個(gè)問題。首先依據(jù)bootrom中的BSP代碼來新建一個(gè)工程,然后將網(wǎng)中驅(qū)動(dòng)代碼加入到建好的工程中。這樣就可以通過編譯工程實(shí)現(xiàn)帶有網(wǎng)口下載功能的bootrom軟件。但對(duì)于VxWorks嵌入式系統(tǒng)而言,它有自己一套規(guī)范,求bootrom軟件在加電后必須從romInit()函數(shù)開始運(yùn)行,而建立工程所得的入口函數(shù)為sysInit()。因此需要增加一個(gè)系統(tǒng)殼代碼,這個(gè)殼代碼所要完成的任務(wù)就是加載bootrom工程的映像,并從romInit()開始執(zhí)行bootrom代碼。通過建立工程來調(diào)試bootrom代碼有以下優(yōu)點(diǎn)。?
?????? (1)責(zé)任分明?
?????? 開發(fā)產(chǎn)品是一個(gè)復(fù)雜的工程,需要多人合作完成。對(duì)于CPU子系統(tǒng)和網(wǎng)口驅(qū)動(dòng)系統(tǒng)這兩塊內(nèi)容來說,更需要責(zé)任明確。通過建立工程來調(diào)試代碼,可以準(zhǔn)確地定位錯(cuò)誤文件和函數(shù)的位置。是BSP代碼出現(xiàn)問題,還是網(wǎng)口驅(qū)動(dòng)代碼出現(xiàn)問題,可以一目了然,做到責(zé)任明確。?
?????? (2)提高效率?
?????? 通過建立工程可以節(jié)省書寫Makefile文件時(shí)間,并可以讓VxWorks軟件的友好圖形界面這優(yōu)點(diǎn)得到更好的體現(xiàn)。另外,建立工程也可以減少文件編譯排錯(cuò)的難度,方便工程文件的調(diào)試以及功能的驗(yàn)證,從而大大提高工作效率,加快工作進(jìn)度。?
2.2 編寫殼代碼并實(shí)現(xiàn)加載?
?????? 建立工程生成映像文件的入口函數(shù)為sysInit(),而VxWorks規(guī)范中要求系統(tǒng)加電后要從romInit()函數(shù)開始運(yùn)行。因此,需要設(shè)計(jì)一個(gè)方案來加載編譯工程得到的映像,而且要具備初始化CPU和SDRAM存儲(chǔ)空間的功能。?
?????? 首先,系統(tǒng)從romInit()函數(shù)中開始運(yùn)行,完成CPU和SDRAM初始化,跳轉(zhuǎn)到函數(shù)romStart()運(yùn)行。然后,加載第二份bootrom代碼到系統(tǒng)的低地址處,運(yùn)行殼代碼中的sysInit()函數(shù),并調(diào)用自己構(gòu)造的解壓函數(shù)usrInit(),將壓縮后的工程映像文件解壓縮到系統(tǒng)高地址處,之后系統(tǒng)繼續(xù)運(yùn)行解壓后的bootrom代碼。此時(shí),系統(tǒng)開始運(yùn)行sysInit()函數(shù),調(diào)用VxWorks系統(tǒng)中的usrInit()函數(shù),開始初始化系統(tǒng)硬件、內(nèi)核以及其它外圍設(shè)備。?
?????? 殼函數(shù)usrInit()代碼如下:?
void usrInit(void){?
volatile FUNCPTR absEntry;?
if(inflate((UCHAR*)ROM_OFFSET(_binArrayStart),?
(UCHAR *)(RAM_LOW_ADRS),&_binArrayEndbinArrayStart)!=OK)?
return;?
absEntry=(FUNCPTR)(RAM_LOW_ADRS);?
(absEntry)();?
}?
?????? 其中RAM_LOW_ADRS為系統(tǒng)低地址,是操作系統(tǒng)運(yùn)行的起始地址,但bootrom可以利用低地址來實(shí)現(xiàn)在系統(tǒng)高地址的運(yùn)行。宏ROM_OFFSET用于準(zhǔn)確定位函數(shù)地址,因?yàn)閎ootrom中運(yùn)行的代碼要求以相對(duì)地址方式來尋址,而不能以絕對(duì)地址方式尋址。_binArrayStart為壓縮后二進(jìn)制代碼的開始符,_binArrayEnd為壓縮后二進(jìn)制代碼的結(jié)束符。Inflate()是VxWorks軟件的解壓縮函數(shù),用于解壓縮由deflate()壓縮函數(shù)壓縮的二進(jìn)制文件映像。同時(shí),需要將下述代碼添加到編譯規(guī)則文件rules.vxWorks中的相應(yīng)部分:?
$(CC)-c $(CFLAGS)$(BSP_DIR)/unzip.c-o$(BSP_DIR)/unzip.o?
$(LD)$(LDFLAGS)-e sysInit -Ttext $(RAM_LOW_ADRS)o?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- STM32CubeIDE XiP 和 BootROM介紹, XiP外部?jī)?nèi)存QSPI FLASH執(zhí)行用戶代碼
- 結(jié)合動(dòng)態(tài)行為和機(jī)器學(xué)習(xí)的惡意代碼檢測(cè)方法 11次下載
- 51單片機(jī)點(diǎn)陣代碼和詳細(xì)解析資料免費(fèi)下載
- 代碼編寫器Studio的新的和改進(jìn)的特性詳細(xì)概述 1次下載
- 基于S3C2440平臺(tái)上的Vxworks BSP的移植 4次下載
- C++的G代碼解析算法研究 0次下載
- Vxworks基礎(chǔ) 0次下載
- VxWorks BSP框架源代碼包含頭文件和驅(qū)動(dòng) 114次下載
- VxWorks及BSP啟動(dòng)流程與順序 104次下載
- 基于VxWorks網(wǎng)絡(luò)數(shù)據(jù)報(bào)存儲(chǔ)轉(zhuǎn)發(fā)的應(yīng)用研究
- VxWorks在測(cè)控系統(tǒng)中的應(yīng)用
- 基于LPC2104 的VxWorks BSP 設(shè)計(jì)
- 基于VxWorks的bootrom代碼改進(jìn)
- 基于VxWorks的WindNet PPPoE協(xié)議棧的研究和
- 關(guān)于Vxworks應(yīng)用的資料. 0次下載
- 更快的tsv解析代碼分享 323次閱讀
- 華為具有改進(jìn)的熱性能的倒裝芯片封裝專利解析 692次閱讀
- 代碼覆蓋率工具的重要性 1319次閱讀
- 如何從命令行獲取和解析參數(shù) 2574次閱讀
- 探索鴻蒙OS應(yīng)用開發(fā)的hello world代碼 1813次閱讀
- 基于三星S3C44B0芯片實(shí)現(xiàn)VxWorks網(wǎng)絡(luò)接口的軟硬件設(shè)計(jì) 1503次閱讀
- AirPods Pro的延遲改進(jìn)測(cè)試 6169次閱讀
- LED顯示屏的EMC設(shè)計(jì)與改進(jìn)方法解析 2847次閱讀
- 70行代碼來打造MCU性能分析利器! 4078次閱讀
- 關(guān)于基于VxWorks的星務(wù)管理系統(tǒng)軟件多任務(wù)實(shí)時(shí)性調(diào)度設(shè)計(jì) 4566次閱讀
- ARM平臺(tái)上運(yùn)行Xen 可同時(shí)管理linux和VxWorks 7071次閱讀
- 蟻群算法matlab程序代碼 3.7w次閱讀
- XPT2046觸摸屏實(shí)驗(yàn)過程詳解與STM32代碼解析 2.4w次閱讀
- vxworks和linux有什么區(qū)別 3.8w次閱讀
- vxworks的特點(diǎn)介紹 2w次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多