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