《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于VxWorks的產(chǎn)品映象設(shè)計(jì)
基于VxWorks的產(chǎn)品映象設(shè)計(jì)
電子設(shè)計(jì)應(yīng)用
烽火通信科技股份有限公司 鄭更生 鄭煒煜
摘要: 基于VxWorks的產(chǎn)品映象設(shè)計(jì), 本文分析了VxWorks的映象特點(diǎn),設(shè)計(jì)了幾種VxWorks下產(chǎn)品映象的構(gòu)造方案,并指出了這些構(gòu)造設(shè)計(jì)的應(yīng)用場合。
Abstract:
Key words :

摘 要: 本文分析了VxWorks的映象特點(diǎn),設(shè)計(jì)了幾種VxWorks下產(chǎn)品映象的構(gòu)造方案,并指出了這些構(gòu)造設(shè)計(jì)的應(yīng)用場合。
關(guān)鍵詞: VxWorks;映象;啟動(dòng)代碼

    VxWorks是目前占?jí)艛嗟匚坏膶?shí)時(shí)操作系統(tǒng),在許多領(lǐng)域獲得廣泛應(yīng)用,但其產(chǎn)品映象設(shè)計(jì)卻一直是令設(shè)計(jì)工程師頭疼的問題。本文在實(shí)踐驗(yàn)證的基礎(chǔ)上,討論了基于VxWorks操作系統(tǒng)上的產(chǎn)品映象設(shè)計(jì)技術(shù),具有很強(qiáng)的實(shí)用性。

VxWorks的映象分析
    VxWorks映象內(nèi)容包括:代碼段(Text segment)、數(shù)據(jù)段(Data Segment)和符號(hào)起始?jí)K段(BSS Segment)。其中,代碼段指可執(zhí)行的指令集合;數(shù)據(jù)段指已經(jīng)初始化的全局和靜態(tài)變量;符號(hào)起始?jí)K段是未初始化的全局和靜態(tài)變量,ANSI C/C++中要求這些變量初始化為零。

    VxWorks映象按類型分為:可下載的映象(Loadable images)、基于ROM的映象(ROM-based images)和ROM駐留映象(ROM-Resident images)三種。Loadable images一般用于調(diào)試,ROM或Flash中的啟動(dòng)代碼BSP打通調(diào)試通道后,將其從PC機(jī)上裝入RAM運(yùn)行。ROM-based images整個(gè)映象在ROM或Flash中,由BSP從ROM或Flash中裝載整個(gè)映象到RAM中運(yùn)行,并分為壓縮和非壓縮方式。ROM-resident images則只拷貝VxWorks的data和bss部分到RAM中運(yùn)行,運(yùn)行效率低。

基于VxWorks的產(chǎn)品映象設(shè)計(jì)
    本文bootable VxWorks映象即為ROM-based images,downloadable應(yīng)用模塊對應(yīng)Loadable images。VxWorks最終產(chǎn)品映象一般燒錄在Flash中,但由于Flash容量有限,并且為了動(dòng)態(tài)更換程序方便,有時(shí)需要使用兩片F(xiàn)lash。其中,第一片小容量的Flash僅作為啟動(dòng)和下載程序功能,采用插件式,以便替換;第二片大容量的Flash存放用戶應(yīng)用代碼,多采用貼片方式。具體VxWorks的產(chǎn)品映象構(gòu)造可使用以下四種技術(shù)方案。

方案一
Flash中存放BOOT+OS+ APPLICATION代碼(Tornado圖形環(huán)境下選項(xiàng)為bootable映象,rules=VxWorks_rom)。

    在Flash中的 BOOT啟動(dòng)后,就將OS裝入RAM,跳到OS入口點(diǎn),OS執(zhí)行,并由OS最終調(diào)起用戶應(yīng)用程序。這種設(shè)計(jì)最為簡潔,只需一片F(xiàn)lash裝載程序。缺點(diǎn)是,采用插件Flash容量很小,僅適合程序不大的場合;而采用貼片方式的Flash,則有一個(gè)頭疼的程序燒寫問題。

方案二
    第一片小容量Flash放BOOT代碼;第二片大容量的Flash放OS+APPLICATION代碼(Tornado圖形環(huán)境下選項(xiàng)為bootable映象,rules=VxWorks)。

    由VxWorks的Loadable images啟動(dòng)過程可知,第一片F(xiàn)lash會(huì)將BOOT code拷貝到RAM_HIGH_ADRS為起址的RAM空間,BOOT code則將OS拷貝到RAM_LOW_ADRS為起址的RAM空間,并跳到OS入口點(diǎn),即RAM_LOW_ADRS執(zhí)行。所以這種方法是在第一片F(xiàn)lash啟動(dòng)后,接著將第二片F(xiàn)lash中保存的OS+APPLICATION映象拷貝到RAM的RAM_LOW_ADRS ~ RAM_HIGH_ADRS之間,然后跳到RAM中的RAM_LOW_ADRS地址處即OS入口點(diǎn)執(zhí)行。

方案三
    第一片小容量Flash放BOOT代碼;第二片大容量的Flash放BOOT+OS+APPLICATION(Tornado圖形環(huán)境下選項(xiàng)為bootable映象,rules=VxWorks_rom)。

    第一片BOOT啟動(dòng)后,其代碼執(zhí)行的最后一句跳至第二片F(xiàn)lash的啟動(dòng)代碼romInit()處執(zhí)行。第一片F(xiàn)lash代碼用來將程序下載到第二片F(xiàn)lash中,正常情況下則是簡單地啟動(dòng)第二片F(xiàn)lash中已有的程序。在做第二片F(xiàn)lash中的BOOT+OS+APPLICATION映象時(shí),需要將BSP中config.h文件的ROM_BASE_ADRS參數(shù)修改為第二片F(xiàn)lash的基址,表示基于第二片F(xiàn)lash啟動(dòng)運(yùn)行。這里第二片F(xiàn)lash執(zhí)行并不等同復(fù)位CPU,只是又執(zhí)行了一次與第一片F(xiàn)lash中上電復(fù)位后內(nèi)容類似的初始化代碼并新啟動(dòng)了一個(gè)OS,這個(gè)OS重新接管了SDRAM以及CPU的所有寄存器等,而第一片F(xiàn)lash中代碼不再執(zhí)行。

    下面提供一種方法,通過第一片F(xiàn)lash中的代碼,可以將遠(yuǎn)程PC機(jī)上編譯好的二進(jìn)制可執(zhí)行文件 rom.bin(含有BOOT+OS+APPLICATION)ftp到第二片F(xiàn)lash:
/*(1)將PC ftp Server上的二進(jìn)制可執(zhí)行文件rom.bin(含有BOOT+OS+APPLICATION)ftp到target的SDRAM緩沖區(qū)buf中*/
if (ftpXfer ("server", "fred", "magic", "", "RETR %s", "/usr/appl", "rom.bin",
&ctrlSock, &dataSock) == ERROR)
return (ERROR);
while ((nBytes = read (dataSock, buf, 5*1024)) > 0)
{
buf = buf + nBytes;
TotalNum = TotalNum + nBytes;
}
close (dataSock);
if (ftpReplyGet (ctrlSock, TRUE) != FTP_COMPLETE)
status = ERROR;
if (ftpCommand (ctrlSock, "QUIT", 0, 0, 0, 0, 0, 0) != FTP_COMPLETE)
status = ERROR;
close (ctrlSock);
/*(2)將ftp到SDRAM中的內(nèi)容寫入第二片F(xiàn)lash中*/
writeFlash2(buf-TotalNum,FLASH2BASE,TotalNum);
/*(3)第一片F(xiàn)lash執(zhí)行的最后一行代碼是跳轉(zhuǎn)到第二片F(xiàn)lash中第一條語句執(zhí)行*/
FUNCPTR entry = (FUNCPTR)(FLASH2BASE+0x100);
go (entry); 

方案四
    第一片小容量Flash放BOOT+OS+LOADER代碼(Tornado圖形環(huán)境下選項(xiàng)為bootable映象,rules=VxWorks_rom);第二片大容量Flash放APPLICATION(Tornado圖形環(huán)境下選項(xiàng)為downloadable應(yīng)用模塊且可重定位,rules=objects),此片F(xiàn)lash必須有文件系統(tǒng)。
   
    第一片F(xiàn)lash中是一個(gè)完整的產(chǎn)品映象,等同于BOOT+OS+APPLICATION,LOADER就是一個(gè)簡單的APPLICATION,利用VxWorks提供給用戶的目標(biāo)模塊加載器loadlib來完成LOADER功能。在第一片F(xiàn)lash啟動(dòng)運(yùn)行到LOADER時(shí),由LOADER的loadModule()函數(shù)將第二片F(xiàn)lash的APPLICATION文件動(dòng)態(tài)加載入RAM,并與OS連接為可直接執(zhí)行的映象,然后用symFindByName()找到應(yīng)用代碼文件appl.o中用戶應(yīng)用入口點(diǎn)"ApplEntry",最后跳到應(yīng)用入口函數(shù)執(zhí)行。

第一片F(xiàn)lash中的LOADER代碼如下:
FUNCPTR StartEntry;
fd = open ("/Flash2/appl.o", O_RDONLY,0);
loadModule(fd, LOAD_ALL_SYMBOLS);
symFindByName(sysSymTbl,“ApplEntry”,(char **)&StartEntry,&Type);
(*StartEntry)( );
其中,(1)loadModule(int fd,int loadFlag)函數(shù)從指定的文件fd中裝載目標(biāo)模塊,并將Text、Data、BSS段放入目標(biāo)內(nèi)存池中;(2)SymFindByName(SYMTAB_ID symTblId, char* name, char** pValue, SYM_TYPE* pType)從符號(hào)表中搜尋與指定符號(hào)名匹配的符號(hào),并將值考入pValue和pType中。

VxWorks產(chǎn)品映象設(shè)計(jì)方案比較
    以上方案中,第一種設(shè)計(jì)只適合代碼小的產(chǎn)品映象;第二、三、四種適合大容量代碼的映象設(shè)計(jì)。第二種設(shè)計(jì)啟動(dòng)最快,但用戶可修改性差,不靈活。第三種設(shè)計(jì)啟動(dòng)兩次,速度慢,但可以做到動(dòng)態(tài)遠(yuǎn)程更新包括BSP在內(nèi)的整個(gè)第二片F(xiàn)lash中的映象。第四種必須在第二片F(xiàn)lash中有閃存文件系統(tǒng)TrueFFS,appl.o以文件形式存放其中,此設(shè)計(jì)最為復(fù)雜,但在增加遠(yuǎn)程程序下載更新功能方面十分方便。以上映象構(gòu)造方案在實(shí)際中都得到成功驗(yàn)證,應(yīng)用設(shè)計(jì)人員可以按照實(shí)際要求靈活選擇。

參考文獻(xiàn)
1 VxWorks Programmer’s Guide,5.4[M].WindRiver ,Inc.
2 Tornado User’s Guide,2.0[M].WindRiver ,Inc.
3 孔祥營,柏桂枝.嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado[M].北京:中國電力出版社,2002.


 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美精品一区二区蜜臀亚洲| 欧美亚洲成人免费| 亚洲精品社区| 久久av在线| 亚洲欧美视频在线| 亚洲深夜福利视频| 99视频一区| 亚洲精品免费一二三区| 在线成人国产| 国产综合色一区二区三区| 国产欧美一区二区三区视频 | 国产精品私人影院| 国产精品ⅴa在线观看h| 欧美日韩免费观看一区二区三区| 欧美黄色一区二区| 欧美精品一区二区三区久久久竹菊| 麻豆国产va免费精品高清在线| 久久亚洲国产精品日日av夜夜| 久久网站免费| 美女精品在线| 欧美1区2区| 欧美成人小视频| 欧美激情精品久久久久久免费印度| 免费观看国产成人| 欧美sm视频| 欧美极品aⅴ影院| 欧美日本韩国一区| 欧美日韩伦理在线| 欧美视频观看一区| 国产精品手机视频| 国产一区二区三区成人欧美日韩在线观看 | 欧美日韩小视频| 欧美先锋影音| 国产欧美日韩另类视频免费观看| 国产亚洲a∨片在线观看| 黄色成人在线网址| 伊人久久大香线蕉av超碰演员| 亚洲国产成人午夜在线一区| 亚洲激情视频网站| 一区二区三区四区五区视频| 亚洲永久视频| 欧美伊人影院| 99ri日韩精品视频| 亚洲男同1069视频| 久久久精品网| 欧美国产激情二区三区| 欧美日韩午夜在线视频| 国产精品视频久久| 国内一区二区三区在线视频| 亚洲欧洲精品一区二区三区| 中文久久精品| 欧美中文在线观看| 9色porny自拍视频一区二区| 午夜激情综合网| 久久亚洲视频| 欧美激情精品久久久久久免费印度| 欧美午夜电影在线| 国产主播一区二区三区| 亚洲精品久久| 午夜精品福利在线| 亚洲国产日韩综合一区| 亚洲天堂成人在线观看| 久久精品日产第一区二区| 欧美激情一区在线观看| 国产精品伦一区| 亚洲第一中文字幕| 亚洲一区二区三区涩| 欧美在线影院| 一区二区三区鲁丝不卡| 久久久精品性| 欧美特黄视频| 亚洲福利视频二区| 亚洲欧美在线免费观看| 日韩亚洲欧美综合| 欧美一站二站| 欧美日韩国产一区精品一区| 国产亚洲欧美日韩日本| 亚洲精品美女| 久久国产精品久久久久久| 亚洲一区在线直播| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品久久久久一区二区| 亚洲二区免费| 欧美一区二区三区四区高清 | 新狼窝色av性久久久久久| 日韩一区二区免费看| 久久久水蜜桃| 国产精品国产三级国产专播精品人 | 亚洲一二区在线| 91久久精品国产91性色| 欧美自拍偷拍| 欧美日韩一区二区精品| 亚洲第一页自拍| 久久av一区| 欧美一区二视频在线免费观看| 欧美日韩精品一区二区天天拍小说| 国内精品久久久久久久影视蜜臀| 亚洲一区二区免费看| 一级日韩一区在线观看| 男人天堂欧美日韩| 国模 一区 二区 三区| 先锋亚洲精品| 亚洲欧美在线看| 欧美偷拍一区二区| 日韩午夜电影av| 99热在这里有精品免费| 欧美电影免费观看网站| 在线观看久久av| 欧美中日韩免费视频| 久久国产精品电影| 国产精品一区视频| 亚洲一区二区三区精品在线观看| 亚洲视频电影图片偷拍一区| 欧美美女喷水视频| 亚洲黄色三级| 日韩视频精品在线| 欧美寡妇偷汉性猛交| 亚洲福利在线看| 亚洲欧洲日韩在线| 麻豆国产va免费精品高清在线| 韩国av一区二区| 久久国产一区二区| 久久久久久一区| 国内精品久久久久伊人av| 欧美在线观看视频一区二区三区| 欧美呦呦网站| 国产午夜亚洲精品羞羞网站| 欧美一区二区福利在线| 久久久999精品视频| 国产综合色产| 亚洲电影专区| 暖暖成人免费视频| 亚洲国产一区二区三区在线播| 亚洲激情亚洲| 欧美欧美午夜aⅴ在线观看| 亚洲乱亚洲高清| 一区二区三区视频在线| 欧美视频在线视频| 中文av字幕一区| 欧美一二三视频| 国产亚洲永久域名| 亚洲黄色性网站| 欧美精品激情在线| 一本色道久久综合亚洲精品高清| 亚洲一区免费在线观看| 国产精品区一区二区三区| 亚洲欧美日韩另类| 久久精品中文字幕一区二区三区| 激情成人av| 99精品欧美一区二区三区综合在线| 欧美日本国产在线| 亚洲视频在线一区观看| 久久精品道一区二区三区| 娇妻被交换粗又大又硬视频欧美| 亚洲精品九九| 国产精品久久久久久久浪潮网站 | 99视频一区二区| 国产精品久久一区二区三区| 欧美一区二区视频在线| 欧美成人精品激情在线观看| 亚洲美女精品一区| 午夜伦欧美伦电影理论片| 国产亚洲精品综合一区91| 亚洲国产一成人久久精品| 欧美日本网站| 亚洲欧美一区二区三区在线 | 国产综合第一页| 日韩午夜免费| 国产欧美日韩一区| 亚洲精品国产精品乱码不99| 欧美三日本三级少妇三2023| 香蕉亚洲视频| 欧美精品aa| 亚洲欧美在线高清| 欧美黑人国产人伦爽爽爽| 亚洲专区一区| 欧美激情精品久久久久久久变态| 亚洲一区在线免费观看| 久热精品视频在线观看| 日韩亚洲一区二区| 久久亚洲国产精品日日av夜夜| 99国产精品国产精品毛片| 久久精视频免费在线久久完整在线看| 亚洲激情自拍| 久久精品国产亚洲aⅴ| 日韩午夜中文字幕| 久久亚洲美女| 亚洲视频一区在线观看| 欧美99久久| 亚洲自拍16p| 欧美精品免费观看二区| 欧美专区亚洲专区| 国产精品高潮呻吟久久| 亚洲人成网站色ww在线| 国产欧美日本一区视频| 正在播放亚洲一区| 国产综合一区二区| 亚洲欧美日韩爽爽影院| 最新国产拍偷乱拍精品| 久久网站热最新地址|