賀翔,胡俊祥,戴鈺
(1.廣州海格通信集團股份有限公司,廣東廣州,510000;2.廣東廣播電視臺,廣東廣州,510000)
VxWorks操作系統(tǒng)作為常用的高性能實時操作系統(tǒng)之一,在衛(wèi)星通信系統(tǒng)中有著其獨特的優(yōu)勢。其開放式結(jié)構(gòu)和對工業(yè)標準的支持,使得開發(fā)人員更易于設(shè)計高效的嵌入式系統(tǒng),并可以以很小的工作量移植到其它不同的處理器上;該操作系統(tǒng)軟件為程序員提供了高效的任務(wù)調(diào)度、中斷管理、實時的系統(tǒng)資源以及實時的任務(wù)間通信,使得程序員可以將盡可能多的精力放在應(yīng)用程序本身,而不再關(guān)心系統(tǒng)資源的管理[1]。
Nor Flash及Nand Flash是嵌入式系統(tǒng)中主流的兩種Flash類型。Nor Flash的優(yōu)點在于支持芯片內(nèi)執(zhí)行(XIP,eXecute In Place),這樣應(yīng)用程序就可以直接在 fl ash閃存內(nèi)運行,而不必把代碼讀到系統(tǒng)RAM中。Nor Flash的傳輸效率很高,但是很低的寫入和擦除速度大大影響了它的性能。另外,由于其容量小,同等容量下價格貴,一般情況下往往配合Nand Flash一同使用。Nand Flash的單元尺寸幾乎是Nor器件的一半,由于生產(chǎn)過程更為簡單,Nand 結(jié)構(gòu)可以在給定的模具尺寸內(nèi)提供更高的容量,也就相應(yīng)地降低了價格。但是Nand 器件使用復(fù)雜的I/O口來串行地存取數(shù)據(jù),只有8個引腳用來傳送控制、地址和數(shù)據(jù)信息,不支持芯片內(nèi)執(zhí)行。故Nor Flash一半用于存儲程序,而Nand Flash一般用于存儲數(shù)據(jù)。
s3c2440是samsung公司的一款常用的ARM9系列處理器,由于該處理器里有一個內(nèi)置的SRAM,叫做stepping stone,系統(tǒng)啟動加電后,能夠把Nand Flash上的起始4KB的內(nèi)容拷貝到SRAM里執(zhí)行,這樣就可以實現(xiàn)從Nand Flash啟動。本文采用該款處理器,以及K9F2G08U0B型號的Nand Flash、K4S561632N型號的SDRAM、DM9000網(wǎng)卡芯片等作為硬件平臺,并在該平臺下完成VxWorks操作系統(tǒng)的移植,改造了VxWorks啟動過程,實現(xiàn)了采用Nand Flash啟動該操作系統(tǒng)。本嵌入式系統(tǒng)方案對于提升綜合性能、減少硬件復(fù)雜度、節(jié)約硬件成本有著重要意義。
VxWorks的啟動流程如圖1所示。系統(tǒng)上電之后,從romInit.S開始運行。首先調(diào)用的函數(shù)就是romInit( ),該函數(shù)主要完成以下功能:
(1)禁止中斷;
(2)初始化堆棧;
(3)保存啟動類型(冷/熱啟動);
(4)初始化CPU相關(guān)寄存器;
(5)跳轉(zhuǎn)到bootInit.c中的romStart()函數(shù);
圖1 Vxworks啟動流程
函數(shù)romStart()主要完成以下功能:
把代碼段和數(shù)據(jù)段復(fù)制到RAM當中;
如果映像是壓縮版本的,則需要完成程序映像的解壓縮。
跳轉(zhuǎn)到bootCon fi g.c的usrInit( )函數(shù)。
函數(shù)usrInit( )設(shè)置cache的工作模式,完成板級硬件初始化后,調(diào)用sysHwInit( )、usrKernelInit( )、KernelInit( ),初始化內(nèi)核,產(chǎn)生根任務(wù)usrRoot( )。在usrRoot根任務(wù)中解析Bootline,產(chǎn)生bootCmdLoop任務(wù),用于啟動、加載VxWorks映像。
在加載VxWorks映像完成后,程序跳轉(zhuǎn)到sysAlib.S文件中的VxWorks image的入口點_sysInit。此時系統(tǒng)再次進行了一次初始化,進入了第二階段啟動過程[2-4]。本文主要對第一階段啟動過程進行改造,以實現(xiàn)在啟動時能夠調(diào)用NandFlash上的程序完成VxWorks操作系統(tǒng)的正常啟動過程。
由于s3c2440處理器內(nèi)置的SRAM僅能拷貝Nand Flash上的前4k代碼運行,根據(jù)上述VxWorks啟動過程分析可知,程序必須在romInit( )函數(shù)完成硬件初始化之后,在romStart( )函數(shù)完成映像解壓縮之前完成把Nand Flash上程序拷貝到內(nèi)存中的過程,即修改替換原romStart( )函數(shù)中完成把程序拷貝到RAM中的過程。系統(tǒng)在Make fi le和con fi g.h中通過三個宏定義來確定系統(tǒng)在什么內(nèi)存地址運行BOOTROM,分別是:ROM _TEXT _ADRS(ROM起始地址)、ROM_LOW_ADRS(VxWorks啟動地址)和RAM_HIGH_ADRS(Bootrom程序入口地址)。這里需要添加從Nand Flash把程序拷貝入內(nèi)存的函數(shù)[5],定義在nand.c文件中。定義該函數(shù):
該函數(shù)的部分主要代碼如下:
在完成該部分函數(shù)的添加修改之后,為了在編譯中把RdNF2SDRAM函數(shù)一同編譯進去,需要在make fi le文件中加入:
由于SRAM空間只有4k,為了保證在前4k代碼內(nèi)完成程序的復(fù)制,需要保證該段拷貝程序在前4k代碼內(nèi),這就需要通過修改rules.bsp文件修改編譯順序,如:
修改使$(BOOT_EXTRA)較先編譯,鏈接到程序靠前的位置,或者也可以直接使nand.o較先編譯、鏈接,可保證在前4k代碼內(nèi)完成程序的復(fù)制。
完成上述過程后,進行通過移植相應(yīng)的外設(shè)驅(qū)動程序完成BSP開發(fā)。VxWorks下支持兩個形式的網(wǎng)卡驅(qū)動,一種是兼容BSD4.4的網(wǎng)卡驅(qū)動,另一種是END(Enhanced Network Drivers)網(wǎng)卡驅(qū)動,由于后者使用比較簡單而且VxWorks對該種驅(qū)動支持性好[6],本文采用END網(wǎng)卡驅(qū)動。本系統(tǒng)可通過網(wǎng)卡下載VxWorks映像。
如圖2所示,使用Tornado生成好boorom,然后通過H-JTAG燒寫到NandFlash上,跳線設(shè)置S3C2440從NandFlash啟動。
打開服務(wù)器端WFTPD,設(shè)置好VxWorks鏡像的路徑、用戶名及密碼后,重新上電啟動S3C2440,打開超級終端,修改啟動引導(dǎo)行,主要包括板子IP地址、主機IP地址、FTP用戶名及密碼、VxWorks鏡像文件路徑等。然后輸入@啟動,在WFTPD窗口上看到VxWorks鏡像下載的信息,如圖3所示。
VxWorks鏡像下載完成后,超級終端上變顯示了熟悉的VxWorks啟動畫面,如圖4所示。至此,完成了整個啟動過程。
圖3 VxWorks鏡像下載
圖4 VxWorks啟動畫面
本文分析了VxWorks啟動過程,提出了使用Nand Flash啟動Vxworks的設(shè)計思路,按照上述步驟進行代碼編寫與調(diào)試,從網(wǎng)絡(luò)下載VxWorks映像,實現(xiàn)了VxWorks的正常啟動。相比傳統(tǒng)的Nor Flash用于存儲程序、Nand Flash用于存儲數(shù)據(jù)的系統(tǒng),降低了硬件設(shè)計復(fù)雜度、提高了穩(wěn)定性、節(jié)約了開發(fā)成本。
* [1]Wind River System Inc.VxWorks 6.0 Device Driver Develop—er’s Guide [Z].2004
* [2]孔祥營,柏桂枝.嵌入式實時操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado[M].北京:中國電力出版社.2002
* [3]徐少毅,李君龍. 基于VxWorks的BSP概念與開發(fā)[J].電子產(chǎn)品世界,2002,03(B)
* [4]馮榮尉.基于ARM9的嵌入式硬件設(shè)計和VxWorks操作系統(tǒng)移植[D].北京理工大學(xué),2008
* [5] Samsung Electronics Co.LTD. K9XXG08 U0B User’s Manu—al[Z].2005
* [6] 周啟平,張揚.VxWorks下設(shè)備驅(qū)動程序及BSP開發(fā)指南[M].北京:中國電力出版社,2004