馮先成,司擎華,李小鵬,張鐵男
(武漢工程大學(xué)電氣信息學(xué)院,湖北 武漢 430074)
VxWorks操作系統(tǒng)主要有板級(jí)支持包(Board Support Package,以下簡(jiǎn)稱(chēng):BSP))、微內(nèi)核(wind)、網(wǎng)絡(luò)系統(tǒng)、文件系統(tǒng)、輸入輸出(input/output ,I/O)系統(tǒng)[1].BSP是指支持一個(gè)目標(biāo)板的硬件系統(tǒng)正常運(yùn)行的與硬件密切相關(guān)的函數(shù)集合,主要包括目標(biāo)系統(tǒng)啟動(dòng)時(shí)的硬件初始化例程和目標(biāo)板上控制各個(gè)硬件設(shè)備正常運(yùn)行的驅(qū)動(dòng)程序,還要提供VxWorks與硬件環(huán)境之間的主要接口.根據(jù)目標(biāo)板的硬件構(gòu)成,BSP設(shè)置各種與硬件參數(shù)有關(guān)的宏,設(shè)置內(nèi)存映射表,編寫(xiě)和修改相應(yīng)的設(shè)備驅(qū)動(dòng)程序,連接中斷服務(wù)程序,根據(jù)上層和系統(tǒng)的需要生成相應(yīng)的鏡像(image)文件,創(chuàng)建相應(yīng)的任務(wù),并啟動(dòng)應(yīng)用程序[2].
網(wǎng)絡(luò)交換系統(tǒng)的主控交換的BSP包括兩大部分:Motorola嵌入式處理器8240(MPC8240)最小系統(tǒng)和相關(guān)外圍設(shè)備的驅(qū)動(dòng).
MPC8240主控交換板最小系統(tǒng)包括:中央處理器(CPU)、同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(SDRAM)和閃存(Flash),閃存包括用于系統(tǒng)自啟動(dòng)的根配置閃存(BOOT FLASH)文件和用于程序、數(shù)據(jù)存儲(chǔ)的程序閃存文件兩部分、串口驅(qū)動(dòng)程序,82559網(wǎng)口驅(qū)動(dòng)程序,外設(shè)部件互連接口9030(PCI9030) 接口控制器、調(diào)試接口及部分控制邏輯等.最小系統(tǒng)BSP的目標(biāo)就是通過(guò)配置最小系統(tǒng)使之能夠完成配置過(guò)程,并可以使用網(wǎng)口和串口進(jìn)行上層軟件的調(diào)試.
主控板主要由下列a-g共7個(gè)部分組成,主控板結(jié)構(gòu)框圖如圖1.
a.Motorola的8240CPU.8240集成了一個(gè)PCI橋-MPC107,一個(gè)嵌入式可編程中斷控制器EPIC,一個(gè)存儲(chǔ)器直接訪問(wèn)DMA控制器及I2C控制器等.
b.Intel 82559 10M/100M自適應(yīng)以太網(wǎng)芯片.
c.Galileo 48304交換芯片.
d.16552串口芯片.
e.HDLC芯片.
f.一片SST 39VF040存放Bootrom.
g.四片ATMEL:AT49B1614AT-90TI用于存放版本和TMS的數(shù)據(jù).
圖1 主控板結(jié)構(gòu)框圖Fig.1 Structure of main control board
設(shè)計(jì)、調(diào)試BSP軟件,首先分析整個(gè)操作系統(tǒng)從上電初始化開(kāi)始的執(zhí)行流程,BSP執(zhí)行處理流程如圖2所示[3-4].
當(dāng)系統(tǒng)上電后,MPC8240的CPU會(huì)在0x02800100執(zhí)行,這段地址空間物理上是對(duì)應(yīng)于一塊配置只讀內(nèi)存,其中保存著操作系統(tǒng)的引導(dǎo)代碼,VxWorks按圖2所示的流程引導(dǎo)過(guò)程如下:
a.CPU 初始化:文件romInit位于CPU的復(fù)位向量中,一個(gè)向量一般最多為256字節(jié),因此不能放太多的程序在此位置.這里僅僅完成如下工作[5]:
①關(guān)閉中斷,初始化CPU的一些基本寄存器
②配置SDRAM,使其可以使用
③初始化堆棧指針,調(diào)用romStart文件
b.其它初始化:包括內(nèi)存初始化、CACHE初始化、BSS初始化、硬件初始化.CPU的一些初始化是在sysIint函數(shù)中完成的.系統(tǒng)真正的板級(jí)硬件初始化是在 sysHwInit函數(shù)中完成的;
圖2 BSP處理流程Fig.2 Processing flow of BSP
c.內(nèi)核初始化:所有的板級(jí)硬件初始化完成后,就開(kāi)始操作系統(tǒng)核心代碼的加載,由其建立多任務(wù)環(huán)境,創(chuàng)建根任務(wù)usrRoot文件;
d.輸入輸出系統(tǒng)初始化:在根任務(wù)中,繼續(xù)完成輸入輸出設(shè)備,網(wǎng)絡(luò)協(xié)議棧及設(shè)備驅(qū)動(dòng)的加載工作.
在VxWorks引導(dǎo)成功后,它會(huì)在根任務(wù)usrRoot中調(diào)用usrAppinit函數(shù),用戶可以在這個(gè)函數(shù)中創(chuàng)建自己的任務(wù)或者啟動(dòng)相應(yīng)的軟件模塊.
2.2.1 修改TGT_DIRsrcdrvpcipciConfigLib.c程序
a.保留原來(lái)所有的程序不動(dòng)
b.增加一個(gè)函數(shù)如下,該函數(shù)可以找出一臺(tái)PC上同種類(lèi)型的多個(gè)網(wǎng)卡,而原來(lái)的函數(shù)(pciFindDevice)只能找出一個(gè)網(wǎng)卡
STATUS pciFindDeviceArray
( int vendorId,/*vendor ID*/
int deviceId,/*device ID*/
int index,/*desired instance of device*/
int*pBusNo,/*bus number*/
int*pDeviceNo,/*device number*/
int*pFuncNo,/*function number*/
int*pDeviceNum /*The Card Device Num-ber Chen.AiMin*/
)[6]
2.2.2 修改TGT_DIRconfigpcPentiumsysEl3c90xEnd.c程序
a.修改sysEl3c90xPciInit函數(shù),增加對(duì)同種類(lèi)型的多塊網(wǎng)卡進(jìn)行初始化,原來(lái)的只能對(duì)一塊3C905網(wǎng)卡進(jìn)行初始化;
b.修改sysEl3c90xEndLoad函數(shù),原來(lái)該函數(shù)只是默認(rèn)第一個(gè)網(wǎng)卡,現(xiàn)支持多個(gè)3C905網(wǎng)卡;
c.該函數(shù)前面的LAN_CARD_NUM宏定義了該P(yáng)C有最多可以有幾塊3C905網(wǎng)卡,現(xiàn)在定義成3,最好不要修改.
2.2.3 修改Configer.h 定義BSP VERSION、default-boot-line的BOOT參數(shù)、Console-Baud-Rate、RAM-HIGH-ADRS、RAM-HIGH-ADRS、ROM-BASE-ADRS、ROM-TEXT-ADRS.
#define RAM_HIGH_ADRS 0x00450000 /* RAM address for ROM boot
#define RAM_LOW_ADRS 0x00100000 /* RAM address for kernel */
2.2.4 修改MAKEFILE 為了便于對(duì)BOOTROM中bootConfig.c進(jìn)行修改,可以把boot-Config.c從all目錄拷入相應(yīng)的BSP目錄(pcPentium目錄),修改該目錄下的MAKEFILE,增加如下一行:BOOTCONFIG = bootConfig.c
修改后的BSP運(yùn)行結(jié)果:
CPU: EST est8240-MPC8240(603e)
Version: 5.4
BSP version: 1.2/2
Creation date: Jan 14 2012, 19:56:33
Press any key to stop auto-boot…
6
[Boot]: p
boot device: dcf
unit number: 0
processor number: 0
host name: wx
file name: vxWorks
inet on ethernet (e): 10.21.14.56
host inet (h): 10.21.14.188
gateway inet (g): 10.21.1.254
user (u): wx
ftp password (pw): 3592
flags (f): 0x0
target name (tn): est8240
a.根據(jù)BSP生成BOOTROM,注意生成時(shí)選擇TORNADO→Build→Build Boot Rom 選擇BSP,注意選擇生成Bootrom_uncmp.hex.
b.打開(kāi)VisionClick,將主機(jī)、仿真器和CPU板連通,在Terminal窗口下輸入命令in,將仿真器中配置好的CPU相關(guān)寄存器的值下載到板子上去.
c.下載bootrom_burn_amd.bdx 到目標(biāo)板,這段代碼存放在SDRAM中的0x01800100開(kāi)始的一段地址中(如果燒寫(xiě)SST39VF040的FLASH芯片,則使用bootrom_burn_sst.bdx).
d.將生成好的Bootrom_uncmp.hex在Vision-Click中轉(zhuǎn)化為bootrom_uncmp.bdx,下載bootrom_uncmp.bdx到目標(biāo)板.
e.輸入命令以運(yùn)行燒寫(xiě)bootrom程序代碼到flash中去,方法為在Terminal窗口下輸入命令 go 01800100.
f.用仿真器察看內(nèi)存 0x01c200a0 地址域會(huì)看到進(jìn)度指示,包括操作時(shí)當(dāng)前寫(xiě)操作地址、失敗計(jì)數(shù).
g.最后直到在0x01c200b0顯示DONE表示成功,F(xiàn)AIL表示失敗,整個(gè)過(guò)程大約30 s左右.
h.點(diǎn)擊VisionClick→Run→Halt execution,或者直接點(diǎn)擊紅色按鈕Holt Target停止板子上程序的運(yùn)行.
i.重新加電或者按復(fù)位鍵,打開(kāi)超級(jí)終端則可看到引導(dǎo)信息的輸出.
實(shí)驗(yàn)步驟如下:
a. 首先按照2.2節(jié)修改BSP文件.
b. 編譯BSP文件,生成VxWorks鏡像文件[7],如圖3所示.
步驟1:備份并編輯.../_BSP_WDB/config.h (可選),在config.h中找到宏定義
#define DEFAULT_BOOT_LINE “l(fā)si(0,0)host:vxWorks h=192.168.0.113 e=192.168.0.127 u=my pw=you tn=l2sw24 f=0x00”
根據(jù)需要修改參數(shù):
h = 主機(jī)IP地址
e = 目標(biāo)機(jī)IP地址
u = ftp server 用戶
pw = ftp server 用戶口令
tn = 目標(biāo)板網(wǎng)絡(luò)機(jī)器名
說(shuō)明:一般不修改,可在目標(biāo)機(jī)開(kāi)機(jī)時(shí),通過(guò)引導(dǎo)提示行,用戶重新配置
步驟2:進(jìn)入DOS命令行方式, 進(jìn)入 .../_BSP_WDB
步驟3:執(zhí)行make bootrom.hex.生成VxWorks鏡像文件bootrom.hex
圖3 8240BSP的安裝、VxWorks鏡像文件的生成Fig.3 Installation of 8240BSP, VxWorks file
圖4 通過(guò)FTP下載鏡像文件到目標(biāo)板Fig.4 Download the image file to target board with FTP
d.通過(guò)主機(jī)的Telenet命令遠(yuǎn)程登陸目標(biāo),進(jìn)行調(diào)試.輸入help,可以查看命令行信息,如圖5.用‘P’命令查看BOOT參數(shù),超級(jí)終端打印出目標(biāo)板BOOT ROM的參數(shù)配置,在命令提示符下輸入“c”命令,把HOST 的IP和網(wǎng)關(guān)修改為所用HOST的,把FILE NAME欄改為VXWORKS,把USER和FTP PASSWORD改為FTP SERVER剛才設(shè)置的.輸入后,下載成功,WDB(WIND RIVER 調(diào)試)準(zhǔn)備好了.
圖5 目標(biāo)板調(diào)試Fig.5 Test of target board
MPC8240 是通信領(lǐng)域嵌入式產(chǎn)品使用較多的芯片,針對(duì)通信領(lǐng)域該類(lèi)芯片的最小化系統(tǒng),筆者基于MPC8240的最小化系統(tǒng)提出一種可靠的BSP設(shè)計(jì)流程方案,完成BSP源代碼的設(shè)計(jì)、移植燒制與測(cè)試.測(cè)試證明本方案有較好的可靠性和良好的可操作性,對(duì)于Vxworks上層應(yīng)用軟件和底層硬件驅(qū)動(dòng)的并行開(kāi)發(fā)有著很重要的意義.
參考文獻(xiàn):
[1] 李明,胡立德,尹安治.軍用嵌入式系統(tǒng)的可靠性設(shè)計(jì)[J].電子元器件應(yīng)用,2007,9(10):71-72,75.
[2] 馮先成,李寒,張鐵男.基于MPC850 VxWorks系統(tǒng)的BSP設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程,2012,40(6):39-43,75.
[3] 蔣鯤鵬, 蘆東昕, 繆敬. Linux與VxWorks的板級(jí)支持包開(kāi)發(fā)的比較與分析[J].計(jì)算機(jī)工程,2003,29(22):51-53.
[4] 隋霞, 許錄平. 基于VxWorks的BSP技術(shù)分析[J]. 微計(jì)算機(jī)信息,2006, 22(23):86-88.
[5] 王韜,印勇,劉國(guó)金.基于VxWorks的嵌入式系統(tǒng)實(shí)驗(yàn)教學(xué)設(shè)計(jì)[J].實(shí)驗(yàn)室研究與探索,2007,26(1):52-54,105.
[6] 孫海彬.支持PCI總線的CORBA可插拔協(xié)議研究與實(shí)現(xiàn)[D].長(zhǎng)沙:國(guó)防科技大學(xué),2010.
[7] 王韜,楊士中,譚曉衡.基于MPC860和VxWorks的嵌入式中斷處理設(shè)計(jì)[J] .電訊技術(shù),2005,45(1):45-50.
[8] 王柯.基于Pentium4處理器的VxWorks板級(jí)支持包設(shè)計(jì)[J].電子科技,2011,24(6):57-59.