王 柯
(中國(guó)電子科技集團(tuán)公司第20研究所通信事業(yè)部,陜西西安 710068)
VxWorks操作系統(tǒng)是美國(guó)風(fēng)河公司于1983年設(shè)計(jì)開發(fā)的一套具有微內(nèi)核、高性能、可伸縮的嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)VxWorks良好的可靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用在實(shí)時(shí)性要求較高的領(lǐng)域[1]。實(shí)時(shí)嵌入式操作系統(tǒng)VxWorks已經(jīng)在國(guó)內(nèi)的嵌入式系統(tǒng)開發(fā)中占據(jù)著重要地位。
在嵌入式系統(tǒng)中,板極支持包BSP(Board Support Package)是介于底層硬件和操作系統(tǒng)之間的一個(gè)接口,主要作用是初始化硬件和軟件系統(tǒng)。設(shè)備驅(qū)動(dòng)程序旨在隱藏底層硬件細(xì)節(jié),為上層應(yīng)用程序提供統(tǒng)一的API函數(shù)接口。在嵌入式系統(tǒng)的研發(fā)過程中,BSP和設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)是關(guān)鍵環(huán)節(jié),它的設(shè)計(jì)質(zhì)量直接影響到整個(gè)系統(tǒng)的可靠性和穩(wěn)定性[1]。BSP具體功能包括:(1)單板硬件初始化,主要是CPU的初始化,為整個(gè)軟件系統(tǒng)提供底層硬件支持。(2)為操作系統(tǒng)提供設(shè)備驅(qū)動(dòng)程序和系統(tǒng)中斷服務(wù)程序。(3)定制操作系統(tǒng)的功能,為軟件系統(tǒng)提供一個(gè)實(shí)時(shí)多任務(wù)的運(yùn)行環(huán)境。(4)初始化操作系統(tǒng),為操作系統(tǒng)的正常運(yùn)行做好準(zhǔn)備。
BSP主要的兩部分組成為:初始化代碼,硬件驅(qū)動(dòng)程序。
BSP的初始化是指從上電復(fù)位開始直到Wind內(nèi)核和usrRoot()函數(shù)啟動(dòng)的這段時(shí)間內(nèi)系統(tǒng)的執(zhí)行過程。具體包括:CPU初始化;設(shè)備初始化以及系統(tǒng)初始化;CPU初始化CPU內(nèi)部寄存器;設(shè)備初始化智能I/O的寄存器,將板上設(shè)備接口與系統(tǒng)接口連通;系統(tǒng)初始化為系統(tǒng)的運(yùn)行準(zhǔn)備數(shù)據(jù)結(jié)構(gòu),進(jìn)行數(shù)據(jù)初始化[2]。
Tornado是風(fēng)河公司推出的集成開發(fā)調(diào)試環(huán)境,包含3部分:交叉開發(fā)工具和實(shí)用程序;運(yùn)行在目標(biāo)機(jī)上的實(shí)時(shí)操作系統(tǒng)VxWorks;連接宿主機(jī)和目標(biāo)機(jī)的多種通訊方式,如以太網(wǎng),串口線,仿真器等[2]。
開發(fā)環(huán)境及開發(fā)工具:開發(fā)板使用研華6186P4級(jí)主板,硬件配置為1 GB內(nèi)存、2.8 GHz雙核Pentium4 CPU、80 GB 5400轉(zhuǎn)IDE硬盤、板載VGA圖形控制器、雙 10/100Base-T網(wǎng)絡(luò)控制器、RTL81x9控制芯片網(wǎng)卡、開發(fā)軟件使用Tornado 2.2,宿主機(jī)安裝目錄為“C:Tornado 2.2“。
Tornado 2.2帶有PcPentium標(biāo)準(zhǔn)板級(jí)支持包,需要對(duì)其進(jìn)行移植。移植目的為:(1)支持Pentium4處理器。(2)支持IDE硬盤。(3)支持以太網(wǎng)接口(Intel 82557/RTL81X9)。(4)支持PS2鍵盤、鼠標(biāo)。(5)支持VGA圖形控制器。
BSP移植需要熟悉并掌握VxWorks映像種類,系統(tǒng)的啟動(dòng)順序和過程,以及BSP軟件包中各文件的組成和作用以及相應(yīng)的設(shè)置文件的修改[1]。
實(shí)現(xiàn)BSP的移植有兩大步驟:
(1)修改VxWorks的配置頭文config.h中定義的相應(yīng)參數(shù),使編譯出來的系統(tǒng)引導(dǎo)程序Bootrom映象符合開發(fā)板的硬件條件[3]。本例中為修改硬盤、鍵盤、鼠標(biāo)、網(wǎng)卡、控制臺(tái)及啟動(dòng)條件等相關(guān)參數(shù)。
(2)在config.h添加原BSP中沒有的硬件定義,在BSP中添加相應(yīng)的VxWorks版本驅(qū)動(dòng)程序包,并修改相關(guān)文件。本例中需要添加RTL81X9網(wǎng)絡(luò)控制芯片的驅(qū)動(dòng)。
修改config.h中定義的相應(yīng)參數(shù)時(shí)應(yīng)復(fù)制一份純凈未作修改的C:Tornado2.2 argetconfig下的pcPentium文件夾,改名為6186,其后步驟如下:
1)打開目錄 C: ornado2.2 argetconfig6186下config.h文件。
2)指定 CPU類型:定位到“CPU auto detection with sysCpuProbe()that support Intel CPUs for now“,將CPU定義改為PENTIUM4。
#define CPU PENTIUM4/* for CPU conditionals in BSP*/
#define X86CPU_DEFAULT X86CPU_PENTIUM4/*for sysProcessor set in BSP*/
3)指定啟動(dòng)行命令:定位到“DEFAULT_BOOT_LINE”,修改啟動(dòng)命令行CPU==PENTIUM4分支定義如下
#elif(CPU==PENTIUM4)
#define DEFAULT_BOOT_LINE“ata=0,0(0,0)host:/ata0/vxWorks h = 192.168.1.3 e =192.168.1.4 u=target pw=target tn=target o=fei0”
其意義是:使用第0個(gè)ata控制器和第0個(gè)驅(qū)動(dòng);主機(jī)名稱為host;VxWorks映象下載的完整路徑是/ata0/vxWorks;宿主機(jī)IP為192.168.1.3;目標(biāo)機(jī)IP為192.168.1.4;下載VxWorks映象的FTP服務(wù)器的用戶名為target;FTP密碼為target;目標(biāo)機(jī)名稱為target;通過網(wǎng)口1(fei0,Intel 82557芯片控制)使用WDB(WindDebug)協(xié)議。
4)指定啟動(dòng)映象路徑:定位到”BOOTROM_BIN”,指定 Bootrom映象路徑為“/ata0/vxworks/bootrom.bin”。
5)指定網(wǎng)卡驅(qū)動(dòng)程序:定位到“Network driver options”設(shè)置 INCLUDE_END處于定義狀態(tài);設(shè)置INCLUDE_FEI_END(Intel 82557芯片)處于定義狀態(tài)(define);添加RTL81X9芯片相應(yīng)定義如下
#define INCLUDE_END/*Enhanced Network Driver Support*/
#define INCLUDE_FEI_END/*(END)Intel 8255[7/8/9]PCI interface*/
#define INCLUDE_RTL_81X9_END/*(END)Realtek 81x9Fast Ethernet Controller*/
定位到“/* Include PCI support for drivers&libraries that require it.*/”,添加 define(INCLUDE_RTL_81X9_END)分支條件。
6)指定硬盤及文件系統(tǒng):定位到“/* driver and file system options*/”修改文件系統(tǒng)及硬盤相應(yīng)參數(shù)如下
#define INCLUDE_DOSFS/* include dosFs file system*/
#undef INCLUDE_FD/* include floppy disk driver*/
#define INCLUDE_ATA/* include IDE/EIDE(ATA)hard disk driver*/
定位到“/* ATA controller one ataResources[]parameters*/”修改IDE硬盤相關(guān)參數(shù)如下:
#define ATA1_CTRL_TYPE(IDE_LOCAL)/*ATA 1 logical type*/
#define ATA1_NUM_DRIVES(0)/* ATA 1number drives present*/
#define ATA1_INT_LVL(0x0f)/*ATA 1 interrupt level*/
定位到“/* Warm boot(reboot)devices and parameters*/”,修改 SYS_WARM_TYPE值為 SYS_WARM_ATA使系統(tǒng)由硬盤熱啟動(dòng)。
7)指定外部輸入設(shè)備定義:定位到“INCLUDE_PC_CONSOLE”,設(shè)置為定義狀態(tài)(define)。VxWorks缺省狀態(tài)不接受外部輸入,該設(shè)置用于對(duì)控制臺(tái)的支持,也是使用鍵盤、鼠標(biāo)等外部輸入設(shè)備的前提。
8)指定圖形接口定義:添加 INCLUDE_WINDML、INCLUDE_WINDML_PS2_KEYBOARD、INCLUDE_WINDML_PS2_POINTER3個(gè)選項(xiàng)并設(shè)置為定義狀態(tài)。該項(xiàng)設(shè)置用于使用WINDML(Wind Media Library)提供基本的圖形、視頻和聲頻技術(shù)以及提供設(shè)計(jì)標(biāo)準(zhǔn)設(shè)備驅(qū)動(dòng)程序框架,后兩個(gè)設(shè)置用于在圖形界面下使用PS2鍵盤及鼠標(biāo)。
經(jīng)上述操作后,config.h中定義的相應(yīng)參數(shù)已修改完畢,并添加了RTL81x9芯片定義,下一步需要添加相應(yīng)的VxWorks版本驅(qū)動(dòng)程序包,步驟如下:
①在Realtek主頁上有提供for VxWorks的81X9系列的驅(qū)動(dòng),下載后解壓縮得到驅(qū)動(dòng)程序包。
②將驅(qū)動(dòng)程序包中的configNet.h和sysLib.c覆蓋6186中原有文件,congfig.h需要修改的部分在前一步中已經(jīng)添加了相應(yīng)定義。
③將srcdrvendunsupported下的rtl81x9.c和hdrvendunsupported下的rtl81x9.h拷貝到當(dāng)前BSP目錄下。
④修改sysRtl81x9End.c和rtl81x9.c對(duì)rtl81x9.h頭文件引用的路徑為#include“drv/end/unsupported/rtl81x9.h”。修改為#include“rtl81x9.h”。
⑤修改BSP文件夾中的Makefile文件,修改文件內(nèi)容為
TARGET_DIR=6186
MACH_EXTRA=rtl81x9.o
將rtl81x9.o作為外部輸入加入系統(tǒng)。
上述修改完成打開Torando,選擇“Build”菜單的“Build Boot ROM”選擇BSP為6186,Image選擇“bootrom.bin”,選擇“OK”生成映象文件。將該映象文件導(dǎo)入VxWorks目標(biāo)機(jī)中啟動(dòng)系統(tǒng)。輸入“devs”命令,可以看到系統(tǒng)連接的外設(shè)名稱及驅(qū)動(dòng),其中”/pcConsole/1”為鍵盤、”/ata0“為硬盤、”/pointer/0”為鼠標(biāo)。輸入“ifShow”可以看到3個(gè)網(wǎng)絡(luò)接口,分別為fei<unit number 0>、rtl<unit number 0>、fei<unit number 1>及各個(gè)接口的參數(shù),至此各設(shè)備驅(qū)動(dòng)正常,BSP移植成功。
在介紹BSP的概念和作用的基礎(chǔ)上,重點(diǎn)介紹了VxWorks的BSP設(shè)計(jì)中需要注意的問題及移植時(shí)的具體步驟。以研華6186系列Pentium4開發(fā)板為例,進(jìn)行了BSP的移植及外設(shè)驅(qū)動(dòng)的添加。盡管目標(biāo)板硬件不同,處理器類型、BSP的實(shí)現(xiàn)也不盡相同,但基本思想是一致的。
[1] 周伯平,張楊,吳瓊.VxWorks下設(shè)備驅(qū)動(dòng)程序及BSP開發(fā)指南[M].北京:中國(guó)電力出版社,2004.
[2] 喬從連.VxWorks系統(tǒng)的BSP概念及啟動(dòng)過程[J].艦船電子對(duì)抗,2005(1):120-125.
[3] 高超,郝燕玲,吳潤(rùn).VxWorks下網(wǎng)卡驅(qū)動(dòng)程序的開發(fā)[J].微計(jì)算機(jī)信息,2004(9):78-80.