基于VxWorks的BSP概念與開發(fā)
互聯(lián)網(wǎng)
摘要: 本文以VxWorks操作系統(tǒng)為例闡述了BSP的概念和系統(tǒng)啟動(dòng)流程,,并描述了BSP的開發(fā)過程。關(guān)鍵詞:BSP,;VxWorks,;...
Abstract:
Key words :
摘 要:本文以VxWorks操作系統(tǒng)為例闡述了BSP的概念和系統(tǒng)啟動(dòng)流程,,并描述了BSP的開發(fā)過程。
關(guān)鍵詞:BSP,;VxWorks,;鏡像;boot Rom
概述
VxWorks操作系統(tǒng)是美國WindRiver公司于1983年設(shè)計(jì)開發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS),,它采用微內(nèi)核的結(jié)構(gòu),,具有支持多種處理器,豐富的網(wǎng)絡(luò)協(xié)議,,良好的兼容性和裁減性等特點(diǎn),,同時(shí)具有程序動(dòng)態(tài)鏈接和下載的功能。
BSP(Board Support Packet——板級(jí)支持包)是介于底層硬件和上層軟件之間的底層軟件開發(fā)包,,它主要功能為屏蔽硬件,,提供操作系統(tǒng)的驅(qū)動(dòng)及硬件驅(qū)動(dòng),具體功能包括:
·單板硬件初始化,,主要是CPU的初始化,,為整個(gè)軟件系統(tǒng)提供底層硬件支持;
·為操作系統(tǒng)提供設(shè)備驅(qū)動(dòng)程序和系統(tǒng)中斷服務(wù)程序,;
·定制操作系統(tǒng)的功能,,為軟件系統(tǒng)提供一個(gè)實(shí)時(shí)多任務(wù)的運(yùn)行環(huán)境;
·初始化操作系統(tǒng),為操作系統(tǒng)的正常運(yùn)行做好準(zhǔn)備,;
BSP在VxWorks系統(tǒng)中的地位見圖1,。
BSP文件在vxworks/target/config/all和vxworks/target/config/bspname文件夾里。其中,,all文件夾里的文件是所有BSP的通用文件,,bspname文件夾的文件是用戶自己定制的BSP文件。
經(jīng)過編譯,、鏈接,,并在makefile和depend. bspname等文件的控制下,原程序最后將生成鏡像,。VxWorks的鏡像可分為兩類:可下載鏡像和可引導(dǎo)鏡像,。
·可下載鏡像(Loadable Image):實(shí)際包括兩部分,一是vxWorks,,二是boot ROM,,兩部分是獨(dú)立創(chuàng)建的。其中boot ROM包括被壓縮的boot ROM鏡像(bootrom),、非壓縮的boot ROM鏡像(bootrom_uncmp)和駐留ROM的boot ROM鏡像(bootrom_res)三種類型,;
·可引導(dǎo)鏡像(Bootable Image):是將引導(dǎo)程序和vxWorks融為一體的鏡像,它常常是最終產(chǎn)品,,包括不駐留ROM的鏡像和駐留ROM的鏡像兩種類型,。
VxWorks系統(tǒng)啟動(dòng)流程
一般來說,所有處理器的VxWorks系統(tǒng)啟動(dòng)流程都是相似的,,但有些處理器會(huì)有一些特殊的步驟,,而另一些處理器會(huì)跳過幾個(gè)步驟。
下面以CPU為ARM7TDMI為例具體描述(見表1),。
對(duì)于可引導(dǎo)鏡像在usrConfig.c文件里執(zhí)行,,對(duì)于可下載鏡像在bootConfig.c文件里執(zhí)行。
圖2為壓縮的可引導(dǎo)鏡像的啟動(dòng)過程圖示,,其中所用到的地址的說明見表2,。
BSP的開發(fā)過程
建立開發(fā)環(huán)境
主要是以目標(biāo)板CPU的BSP文件為模板,在 ornado argetconfig目錄下創(chuàng)建用戶的BSP目錄bspname,,把 ornado argetconfigall下的文件和BSP模板文件拷貝到該目錄下,,根據(jù)具體情況選擇合適的VxWorks鏡像類型。
修改模板程序
Makefile
Makefile文件控制鏡像的創(chuàng)建,,在Makefile文件里使用了將近135個(gè)宏,,最簡單的Makefile文件要包含以下的宏:
·CPU:目標(biāo)板CPU的類型;
·TOOL:主機(jī)的make工具,,為GNU,;
·TGT_DIR:target路徑,默認(rèn)為$(WIND_BASE)/target;
·TARGET_DIR:BSP目錄名,;
·VENDER:目標(biāo)板生產(chǎn)商名,;
·BOARD:目標(biāo)板名;
·ROM_TEXT_ADRS:boot ROM的入口地址(以16進(jìn)制表示,,并且與config.h文件定義相同),;
·ROM_SIZE:ROM的大小,;
·RAM_LOW_ADRS:加載vxWorks的目標(biāo)地址,;
·RAM_HIGH_ADRS:boot ROM拷貝到RAM的目標(biāo)地址;
·HEX_FLAGS:特殊結(jié)構(gòu)的標(biāo)記,,用于產(chǎn)生S-記錄文件,;
·MACH_EXTRA:擴(kuò)展文件,用戶可以加入自己的目標(biāo)模塊,;
·除此以外,,Makefile文件還需要包括以下文件:
·$(TGT_DIR)/h/make/defs.bsp:Vxworks系統(tǒng)運(yùn)行的標(biāo)準(zhǔn)變量定義;
·$(TGT_DIR)/h/make/make.$(CPU)$(TOOL):提供了特別的目標(biāo)機(jī)結(jié)構(gòu)和一套編譯工具,,如make. ARM7TDMI_Tgnu;
·$(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE):提供了與主機(jī)系統(tǒng)有關(guān)的定義,;
·rules.bsp:在創(chuàng)建目標(biāo)文件時(shí)所需要的規(guī)則,;
·rules. $(WIND_HOST_TYPE):指出創(chuàng)建目標(biāo)文件時(shí)所需的從屬文件表;
·如果沒有用all目錄下的文件而是拷貝到bspname下修改并使用,,需要定義與這些文件有關(guān)的宏,,如
BOOTINIT=bootInit.c
這樣在創(chuàng)建鏡像時(shí)就不會(huì)用all目錄下的文件而使用bspname目錄下的相應(yīng)文件了;
·在Makefile文件里凡是16進(jìn)制數(shù)前面都無需加“0x”,;
bspname.h
根據(jù)具體目標(biāo)板設(shè)置串行接口,、時(shí)鐘以及I/O設(shè)備等。在該文件中必須包含以下內(nèi)容:
·中斷向量/級(jí)別
·I/O設(shè)備地址
·設(shè)備寄存器位的含義
·系統(tǒng)和附加時(shí)鐘參數(shù)(最大和最小速率)
config.h
根據(jù)目標(biāo)板的具體情況配置宏定義,,注意ROM_TEXT_ADRS,、ROM_SIZE、RAM_LOW_ADRS,、RAM_HIGH_ADRS要與Makefile文件里定義的一致,,LOCAL_MEM_LOCAL_ADRS和LOCAL_MEM_SIZE要正確。
romInit.s
這是系統(tǒng)上電后運(yùn)行的第一個(gè)程序,,根據(jù)具體目標(biāo)板對(duì)寄存器和CPU進(jìn)行設(shè)置,;以CPU為ARM7TDMI為例,romInit.s 需要進(jìn)行的工作有:
·保存啟動(dòng)方式:對(duì)于冷啟動(dòng),,如果CPU配置的是HIGH VECTORS,,就設(shè)置入口地址為0xFFFF0000,否則設(shè)置入口地址為0x00000000;
·屏蔽中斷:通過設(shè)置cpsr的I_BIT和F_BIT都為1來實(shí)現(xiàn),,還要設(shè)置中斷寄存器為關(guān)模式,,同時(shí)設(shè)定運(yùn)行模式為SVC32模式;
·初始化堆棧指針pc和sp:堆棧指針sp指向STACK_ADRS,,這個(gè)宏的定義為當(dāng)鏡像為駐留ROM時(shí),,該宏值為_sdata,當(dāng)鏡像為非駐留ROM時(shí)該宏值為_romInit,,這兩個(gè)地址經(jīng)過地址映射后都指向被拷貝鏡像在RAM的目標(biāo)地址,;
·初始化cache,屏蔽cache,;
·根據(jù)具體目標(biāo)板的需要初始化其他寄存器,;
·指針跳轉(zhuǎn)到romStart()函數(shù)并執(zhí)行;
bootConfig.c
一般不需要用戶修改,,也可以根據(jù)具體情況做適當(dāng)修改,;
sysALib.s
與romInit.s文件實(shí)現(xiàn)的功能相似,但如果在romInit.s文件里對(duì)DRAM和內(nèi)存控制器進(jìn)行了初始化在這里不再進(jìn)行這項(xiàng)工作,;
創(chuàng)建VxWorks鏡像
根據(jù)具體需要在命令行環(huán)境下利用Makefile創(chuàng)建各種鏡像,,也可以在Tornado的集成環(huán)境下Build菜單中選擇Build Boot ROM來創(chuàng)建各種類型的Boot ROM;
除此以外,,如果系統(tǒng)硬件包括串口,,還要根據(jù)具體情況修改sysSerial.c文件;如果包含網(wǎng)絡(luò)部分要修改configNet.h,;如果包含NVRAM要修改bootnv.h文件,。總之,,BSP的開發(fā)要根據(jù)具體目標(biāo)板的硬件進(jìn)行,。
結(jié)語
我們已經(jīng)利用基于VxWorks的BSP開發(fā)包成功的進(jìn)行了線纜調(diào)制解調(diào)器的底層軟件開發(fā)。在開發(fā)過程中深感BSP在整個(gè)系統(tǒng)軟件中的重要性——沒有正確的BSP軟件,,整個(gè)系統(tǒng)的啟動(dòng)和運(yùn)行也不會(huì)正確,。另外需要強(qiáng)調(diào)的是:BSP的概念只是針對(duì)嵌入式操作系統(tǒng)而言的,而像DOS,、WINDOWS,、UNIX等BIOS操作系統(tǒng)是無BSP可言的。對(duì)同一目標(biāo)板而言,,不同操作系統(tǒng)的BSP在本質(zhì)上是一樣的,,但是不同的操作系統(tǒng)將提供不同的支持庫,另外在BSP結(jié)構(gòu)上也可能會(huì)有所不同,,在做BSP移植的時(shí)候應(yīng)該注意,?!?br />
參考文獻(xiàn)
1. Tornado BSP Developer誷 Kit for VxWorks User誷 Guide,Tornado 2.0,,Edition 1,,1999
2. Tornado BSP Developer誷 Kit for VxWorks User誷 Guide,Tornado 1.0.1,,Edition 1,,1997
3. VxWorks Programmer誷 Guides,Edition 1,,1999
關(guān)鍵詞:BSP,;VxWorks,;鏡像;boot Rom
概述
VxWorks操作系統(tǒng)是美國WindRiver公司于1983年設(shè)計(jì)開發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS),,它采用微內(nèi)核的結(jié)構(gòu),,具有支持多種處理器,豐富的網(wǎng)絡(luò)協(xié)議,,良好的兼容性和裁減性等特點(diǎn),,同時(shí)具有程序動(dòng)態(tài)鏈接和下載的功能。
BSP(Board Support Packet——板級(jí)支持包)是介于底層硬件和上層軟件之間的底層軟件開發(fā)包,,它主要功能為屏蔽硬件,,提供操作系統(tǒng)的驅(qū)動(dòng)及硬件驅(qū)動(dòng),具體功能包括:
·單板硬件初始化,,主要是CPU的初始化,,為整個(gè)軟件系統(tǒng)提供底層硬件支持;
·為操作系統(tǒng)提供設(shè)備驅(qū)動(dòng)程序和系統(tǒng)中斷服務(wù)程序,;
·定制操作系統(tǒng)的功能,,為軟件系統(tǒng)提供一個(gè)實(shí)時(shí)多任務(wù)的運(yùn)行環(huán)境;
·初始化操作系統(tǒng),為操作系統(tǒng)的正常運(yùn)行做好準(zhǔn)備,;
BSP在VxWorks系統(tǒng)中的地位見圖1,。
BSP文件在vxworks/target/config/all和vxworks/target/config/bspname文件夾里。其中,,all文件夾里的文件是所有BSP的通用文件,,bspname文件夾的文件是用戶自己定制的BSP文件。
經(jīng)過編譯,、鏈接,,并在makefile和depend. bspname等文件的控制下,原程序最后將生成鏡像,。VxWorks的鏡像可分為兩類:可下載鏡像和可引導(dǎo)鏡像,。
·可下載鏡像(Loadable Image):實(shí)際包括兩部分,一是vxWorks,,二是boot ROM,,兩部分是獨(dú)立創(chuàng)建的。其中boot ROM包括被壓縮的boot ROM鏡像(bootrom),、非壓縮的boot ROM鏡像(bootrom_uncmp)和駐留ROM的boot ROM鏡像(bootrom_res)三種類型,;
·可引導(dǎo)鏡像(Bootable Image):是將引導(dǎo)程序和vxWorks融為一體的鏡像,它常常是最終產(chǎn)品,,包括不駐留ROM的鏡像和駐留ROM的鏡像兩種類型,。
VxWorks系統(tǒng)啟動(dòng)流程
一般來說,所有處理器的VxWorks系統(tǒng)啟動(dòng)流程都是相似的,,但有些處理器會(huì)有一些特殊的步驟,,而另一些處理器會(huì)跳過幾個(gè)步驟。
下面以CPU為ARM7TDMI為例具體描述(見表1),。
對(duì)于可引導(dǎo)鏡像在usrConfig.c文件里執(zhí)行,,對(duì)于可下載鏡像在bootConfig.c文件里執(zhí)行。
圖2為壓縮的可引導(dǎo)鏡像的啟動(dòng)過程圖示,,其中所用到的地址的說明見表2,。
BSP的開發(fā)過程
建立開發(fā)環(huán)境
主要是以目標(biāo)板CPU的BSP文件為模板,在 ornado argetconfig目錄下創(chuàng)建用戶的BSP目錄bspname,,把 ornado argetconfigall下的文件和BSP模板文件拷貝到該目錄下,,根據(jù)具體情況選擇合適的VxWorks鏡像類型。
修改模板程序
Makefile
Makefile文件控制鏡像的創(chuàng)建,,在Makefile文件里使用了將近135個(gè)宏,,最簡單的Makefile文件要包含以下的宏:
·CPU:目標(biāo)板CPU的類型;
·TOOL:主機(jī)的make工具,,為GNU,;
·TGT_DIR:target路徑,默認(rèn)為$(WIND_BASE)/target;
·TARGET_DIR:BSP目錄名,;
·VENDER:目標(biāo)板生產(chǎn)商名,;
·BOARD:目標(biāo)板名;
·ROM_TEXT_ADRS:boot ROM的入口地址(以16進(jìn)制表示,,并且與config.h文件定義相同),;
·ROM_SIZE:ROM的大小,;
·RAM_LOW_ADRS:加載vxWorks的目標(biāo)地址,;
·RAM_HIGH_ADRS:boot ROM拷貝到RAM的目標(biāo)地址;
·HEX_FLAGS:特殊結(jié)構(gòu)的標(biāo)記,,用于產(chǎn)生S-記錄文件,;
·MACH_EXTRA:擴(kuò)展文件,用戶可以加入自己的目標(biāo)模塊,;
·除此以外,,Makefile文件還需要包括以下文件:
·$(TGT_DIR)/h/make/defs.bsp:Vxworks系統(tǒng)運(yùn)行的標(biāo)準(zhǔn)變量定義;
·$(TGT_DIR)/h/make/make.$(CPU)$(TOOL):提供了特別的目標(biāo)機(jī)結(jié)構(gòu)和一套編譯工具,,如make. ARM7TDMI_Tgnu;
·$(TGT_DIR)/h/make/defs.$(WIND_HOST_TYPE):提供了與主機(jī)系統(tǒng)有關(guān)的定義,;
·rules.bsp:在創(chuàng)建目標(biāo)文件時(shí)所需要的規(guī)則,;
·rules. $(WIND_HOST_TYPE):指出創(chuàng)建目標(biāo)文件時(shí)所需的從屬文件表;
·如果沒有用all目錄下的文件而是拷貝到bspname下修改并使用,,需要定義與這些文件有關(guān)的宏,,如
BOOTINIT=bootInit.c
這樣在創(chuàng)建鏡像時(shí)就不會(huì)用all目錄下的文件而使用bspname目錄下的相應(yīng)文件了;
·在Makefile文件里凡是16進(jìn)制數(shù)前面都無需加“0x”,;
bspname.h
根據(jù)具體目標(biāo)板設(shè)置串行接口,、時(shí)鐘以及I/O設(shè)備等。在該文件中必須包含以下內(nèi)容:
·中斷向量/級(jí)別
·I/O設(shè)備地址
·設(shè)備寄存器位的含義
·系統(tǒng)和附加時(shí)鐘參數(shù)(最大和最小速率)
config.h
根據(jù)目標(biāo)板的具體情況配置宏定義,,注意ROM_TEXT_ADRS,、ROM_SIZE、RAM_LOW_ADRS,、RAM_HIGH_ADRS要與Makefile文件里定義的一致,,LOCAL_MEM_LOCAL_ADRS和LOCAL_MEM_SIZE要正確。
romInit.s
這是系統(tǒng)上電后運(yùn)行的第一個(gè)程序,,根據(jù)具體目標(biāo)板對(duì)寄存器和CPU進(jìn)行設(shè)置,;以CPU為ARM7TDMI為例,romInit.s 需要進(jìn)行的工作有:
·保存啟動(dòng)方式:對(duì)于冷啟動(dòng),,如果CPU配置的是HIGH VECTORS,,就設(shè)置入口地址為0xFFFF0000,否則設(shè)置入口地址為0x00000000;
·屏蔽中斷:通過設(shè)置cpsr的I_BIT和F_BIT都為1來實(shí)現(xiàn),,還要設(shè)置中斷寄存器為關(guān)模式,,同時(shí)設(shè)定運(yùn)行模式為SVC32模式;
·初始化堆棧指針pc和sp:堆棧指針sp指向STACK_ADRS,,這個(gè)宏的定義為當(dāng)鏡像為駐留ROM時(shí),,該宏值為_sdata,當(dāng)鏡像為非駐留ROM時(shí)該宏值為_romInit,,這兩個(gè)地址經(jīng)過地址映射后都指向被拷貝鏡像在RAM的目標(biāo)地址,;
·初始化cache,屏蔽cache,;
·根據(jù)具體目標(biāo)板的需要初始化其他寄存器,;
·指針跳轉(zhuǎn)到romStart()函數(shù)并執(zhí)行;
bootConfig.c
一般不需要用戶修改,,也可以根據(jù)具體情況做適當(dāng)修改,;
sysALib.s
與romInit.s文件實(shí)現(xiàn)的功能相似,但如果在romInit.s文件里對(duì)DRAM和內(nèi)存控制器進(jìn)行了初始化在這里不再進(jìn)行這項(xiàng)工作,;
創(chuàng)建VxWorks鏡像
根據(jù)具體需要在命令行環(huán)境下利用Makefile創(chuàng)建各種鏡像,,也可以在Tornado的集成環(huán)境下Build菜單中選擇Build Boot ROM來創(chuàng)建各種類型的Boot ROM;
除此以外,,如果系統(tǒng)硬件包括串口,,還要根據(jù)具體情況修改sysSerial.c文件;如果包含網(wǎng)絡(luò)部分要修改configNet.h,;如果包含NVRAM要修改bootnv.h文件,。總之,,BSP的開發(fā)要根據(jù)具體目標(biāo)板的硬件進(jìn)行,。
結(jié)語
我們已經(jīng)利用基于VxWorks的BSP開發(fā)包成功的進(jìn)行了線纜調(diào)制解調(diào)器的底層軟件開發(fā)。在開發(fā)過程中深感BSP在整個(gè)系統(tǒng)軟件中的重要性——沒有正確的BSP軟件,,整個(gè)系統(tǒng)的啟動(dòng)和運(yùn)行也不會(huì)正確,。另外需要強(qiáng)調(diào)的是:BSP的概念只是針對(duì)嵌入式操作系統(tǒng)而言的,而像DOS,、WINDOWS,、UNIX等BIOS操作系統(tǒng)是無BSP可言的。對(duì)同一目標(biāo)板而言,,不同操作系統(tǒng)的BSP在本質(zhì)上是一樣的,,但是不同的操作系統(tǒng)將提供不同的支持庫,另外在BSP結(jié)構(gòu)上也可能會(huì)有所不同,,在做BSP移植的時(shí)候應(yīng)該注意,?!?br />
參考文獻(xiàn)
1. Tornado BSP Developer誷 Kit for VxWorks User誷 Guide,Tornado 2.0,,Edition 1,,1999
2. Tornado BSP Developer誷 Kit for VxWorks User誷 Guide,Tornado 1.0.1,,Edition 1,,1997
3. VxWorks Programmer誷 Guides,Edition 1,,1999
此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。