《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > VxWorks移植到AT91RM9200的BSP定制過程
VxWorks移植到AT91RM9200的BSP定制過程
摘要: VxWorks移植到AT91RM9200的BSP定制過程,VxWorks是嵌入式實(shí)時(shí)操作系統(tǒng),,具有高性能、可裁減性好等特點(diǎn),,能支持多種微處理器(如PowerPC,、X85、ARM,、SPARC),;自問世以來,以其良好的町靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用于通信,、航空,、航天等高精尖技術(shù)及實(shí)時(shí)性要
Abstract:
Key words :

VxWorks是嵌入式實(shí)時(shí)操作系統(tǒng),具有高性能,、可裁減性好等特點(diǎn),,能支持多種微處理器(如PowerPC、X85,、ARM,、SPARC);自問世以來,,以其良好的町靠性和卓越的實(shí)時(shí)性被廣泛地應(yīng)用于通信,、航空、航天等高精尖技術(shù)及實(shí)時(shí)性要求極高的領(lǐng)域中,。BSP(Board Support Package,,板級(jí)支持包)的作用是針對(duì)特殊的硬件平臺(tái),為操作系統(tǒng)內(nèi)核提供操作接口,,使操作系統(tǒng)能夠獨(dú)立于底層硬件。對(duì)上層應(yīng)用屏蔽具體硬件,,VxWorks的高可移植性就是通過BSP實(shí)現(xiàn)的,。AT91RM9200是Atmel公司生產(chǎn)的一款A(yù)RM9核芯片,,本文重點(diǎn)介紹將VxWorks移植到該芯片過程中BSP的定制過程。  

1 BSP概念

BSP通常是指針對(duì)具體的硬件平臺(tái),,用戶所編寫的啟動(dòng)代碼和部分設(shè)備驅(qū)動(dòng)程序的集合,。它所實(shí)現(xiàn)的功能包括初始化和驅(qū)動(dòng)部分設(shè)備。最基本的BSP僅需要支持處理器復(fù)位,、初始化,、驅(qū)動(dòng)串口和必要的時(shí)鐘處理。BSP是相對(duì)于操作系統(tǒng)而言的,,不同的操作系統(tǒng)對(duì)應(yīng)不同形式的BSP,,因此,在寫B(tài)SP時(shí)一定要按照要求的操作系統(tǒng)對(duì)BSP的定義形式來寫,。在VxWorks" title="VxWorks">VxWorks系統(tǒng)中,,BSP是介于底層硬件環(huán)境和VxWorks之間的一個(gè)軟件接口,它的主要功能是系統(tǒng)加電后初始化目標(biāo)機(jī)硬件和VxWorks,,并提供部分硬件驅(qū)動(dòng)程序,。BSP在VxWorks系統(tǒng)中的層次關(guān)系如圖1所示。  
  
BSP為各種板卡的硬件功能提供了統(tǒng)一的軟件接口,,包括硬件初始化,、中斷的捕捉和處理、硬件時(shí)鐘和定時(shí)器管理,、內(nèi)存地址映射,,以及內(nèi)存分配等。每個(gè)BSP還包括一個(gè)ROM啟動(dòng)或其他啟動(dòng)機(jī)制,。
  
2 VxWorks的引導(dǎo)過程  

在編寫B(tài)SP之前,,首先要了解整個(gè)系統(tǒng)的啟動(dòng)過程。VxWorks的映像由代碼段,、數(shù)據(jù)段和BSS段3部分組成,。VxWotks內(nèi)核可以分為3種:可加載類型映像、基于ROM的VxWorks映像和RoM駐留型映像,。這3種類型的映像組織是不一樣的,,因此啟動(dòng)過程有所區(qū)別。

可加載映像包括VxWorks和Boot ROM兩部分內(nèi)容,,兩部分是獨(dú)立創(chuàng)建的,。首先,由系統(tǒng)引導(dǎo)代碼把ROM引導(dǎo)程序搬到RAM_HIGH_ADRS,。然后,,ROM引導(dǎo)程序開始運(yùn)行,將VxWorks映像加載到RAM_LOW_ADRS,,之后跳轉(zhuǎn)到VxWorks映像裝入點(diǎn),。

基于ROM的VxWorks映像在BSP初始化時(shí),,會(huì)把lmage完全搬到RAM中執(zhí)行,包括代碼段和數(shù)據(jù)段,。在拷貝執(zhí)行完畢后,,系統(tǒng)控制權(quán)轉(zhuǎn)移給RAM中VxWorks映像的初始化代碼。

ROM駐留型映像只是將ROM中VxWorks映像的數(shù)據(jù)段和BSS段拷貝到RAM中,,完成后系統(tǒng)控制權(quán)轉(zhuǎn)移給ROM/Flash里VxWorks映像的初始化代碼,,代碼段留在ROM中并在ROM中運(yùn)行。在ROM中運(yùn)行的VxWorks映像主要足為了節(jié)省RAM空間,,帶來的不利則是運(yùn)行速度慢,。

圖2和圖3分別是下載型和ROM型VxWorks映像的初始化流程。  


  
下面以ROM型VxWorks內(nèi)核啟動(dòng)流程為例,,說明各文件的作用:

romlnit()保存啟動(dòng)類型,,屏蔽中斷;初始化內(nèi)存和寄存器,,屏蔽Cache,;初始化CPU,將堆棧指針定位于被拷貝Boot ROM映像在RAM的地址,;跳到romStart(),。

roraStart()根據(jù)不同的映像類型將VxWorks映像的不同部分解壓縮

3 VxWorks在AT91RM9200" title="AT91RM9200">AT91RM9200上的BSP設(shè)計(jì)

3.1 AT91RM9200簡(jiǎn)介

AT91RM9200的片上資源包括:ARM920T處理器棱、16KB的內(nèi)部SRAM和128KB的內(nèi)部ROM存儲(chǔ)器,;支持SDRAM,、SRAM、Burst Flash和CompactFlash,、SmartMedia以及NANDFlash的無(wú)縫連接,;16KB的數(shù)據(jù)Cache,16KB的指令Cache,,完全可編程的外部總線接口EBI,,4個(gè)32位的PIO控制器可以達(dá)到122個(gè)可編程I/O引腳(每個(gè)都有輸入控制、可中斷及開路的輸出能力),;帶有8個(gè)優(yōu)先級(jí),、可單獨(dú)屏蔽中斷源的先進(jìn)中斷控制器、6組硬件定時(shí)器,、4個(gè)通用同步/異步收發(fā)器USART,。

3.2 BSP中幾個(gè)重要文件的修改

由于AT91RM9200的內(nèi)核是ARM920T,所以BSP文件主要在VxWorks編澤環(huán)境Tornado的目錄target/config/all和target/config/integrator920t文件夾里,。其中,,a11文件夾里的文件對(duì)于絕大多數(shù)BSP都是共用的,一般來說不需要修改,特別是“configAll.h”,;integrator920t文件夾里的文件就是所要編寫的BSP文件,,這些文件往往與系統(tǒng)硬件密切相關(guān)。

3.2.1 修改Makeflie

Makefile文件定義編譯和鏈接整個(gè)BSP的規(guī)則,,如編譯工具的選擇、編譯選項(xiàng)和包含文件路徑等,;控制生成VxWorks映像文件的類型,,同時(shí)含有存儲(chǔ)區(qū)大小的信息,對(duì)于存儲(chǔ)區(qū)大小信息的改動(dòng)必須與Config.h的對(duì)應(yīng)改動(dòng)同步,。有些參數(shù)需在該文件中定義,,如處理器類型、編譯工具,、目標(biāo)地址等,。下面介紹一些須修改的參數(shù)和地址:  



3.2.2 修改Config.h

Config.h文件包含了所有頭文件和與CPU相關(guān)的特殊定義。VxWorks內(nèi)核組件的配置由Config.h文件定義,。Config.h中的主要修改內(nèi)容有定義引導(dǎo)行和修改地址,。

(1)定義引導(dǎo)行  



其中,mac(O,,0)為AT91RM9200芯片中的EMAC設(shè)備,;host為主機(jī)名;VxWorks為要下載的文件名,;h為主機(jī)IP地址,;e為目標(biāo)板IP地址;u為用戶名,;pw為密碼,;tn為目標(biāo)板名稱。

(2)修改地址

該文件中的地址定義,,如ROM_TEXT_ADRS,、ROM_SIZE、RAM_LOW_ADR,、SRAM_HIGH_SIZE等要與Makefik文件中的相關(guān)定義一致,。本設(shè)計(jì)中代碼段存儲(chǔ)在連接ARM芯片外部片選CSO上的Flash里面,基地址為Oxl0000000,,因此.定義如下:  


VxWorks的缺省配置由configAll.h來確定,。一般來說,缺省配置的設(shè)置與自行開發(fā)的硬件系統(tǒng)的配置不同,,用戶可通過Cotlfig.h來改變?nèi)笔∨渲?。用戶須查看configAll.h,并在Config.h中將不需要的軟硬件配置和初始化去掉,。例如,,缺省配置中一般包含浮點(diǎn)處理器,,而AT9lRM9200中沒有浮點(diǎn)寄存器,因此就要?jiǎng)h掉相關(guān)配置,。

3.2.3 修改integrator920t.c

該文件中設(shè)置所有非可選的,、與AT91RM9200芯片相關(guān)的信息,如各硬件相關(guān)寄存器的地址定義,,設(shè)備寄存器中對(duì)應(yīng)位的定義,,各硬件中斷矢量和中斷優(yōu)先級(jí)的定義,DBUG和USART的控制,,網(wǎng)口的定義,,系統(tǒng)時(shí)鐘和輔助時(shí)鐘參數(shù)設(shè)置等。VxWorks所要使用的目標(biāo)板包含設(shè)備的驅(qū)動(dòng)程序頭文什應(yīng)當(dāng)包含在該文件的開始,。該文件中的各項(xiàng)宏定義均是基于AT91RM9200芯片的,,并根據(jù)具體要求定義。例如,,電源管理控制器中用到兩個(gè)鎖相環(huán)PLLA和PLLB,,對(duì)它們的部分參數(shù)設(shè)定代碼如下:  

3 2.4 修改rornlnit.s

該文件包含引導(dǎo)ROM和基于ROM的VxWorks映像的入口初始化匯編代碼。入口點(diǎn)為romInit()函數(shù),,是系統(tǒng)加電啟動(dòng)后首先執(zhí)行的代碼,。主要功能是:保存啟動(dòng)類型,使處理器復(fù)位,;初始化Flash和SDRAM,;設(shè)置MMU到已知狀態(tài);指令Cache使能,;初始化MMU控制寄存器(指令32位,、數(shù)據(jù)32位、寫緩沖使能),;開漏寫緩沖,,并且使指令和數(shù)據(jù)Cache都兀效;通過設(shè)置CPSR的IRQ禁止位,、FIR禁止位和先進(jìn)中斷控制器AIC中的中斷禁止寄存器來屏蔽中斷,,跳轉(zhuǎn)到bootInit.c中的rom-Start(),同時(shí)傳遞啟動(dòng)類型,。其中,,中斷屏蔽代碼如下:  


在調(diào)試這段代碼時(shí),由于串口和網(wǎng)口都沒有啟動(dòng),,因此只能通過點(diǎn)燈程序來跟蹤程序的執(zhí)行情況,,設(shè)置不同的LED亮來顯示程序執(zhí)行到哪一步。例如,如果要并行輸入/輸出口C的32位中的第15位亮,,則可以編程為,;  


在編寫本文件時(shí),需要注意的地方是:不要在該文件里進(jìn)行過多的初始化操作,,大部分硬件初始化操作在sysLib.c文件中的sysHwInit()函數(shù)中進(jìn)行,。

3.2.5 修改sysLib c

sysLib.c是BSP初始化的核心代碼。在這個(gè)文件中,,必須復(fù)位所有的硬件,,使其處于初始化狀態(tài),保證后面開中斷后不會(huì)產(chǎn)生假中斷,。這個(gè)文件包含了由目標(biāo)機(jī)體系結(jié)構(gòu)決定的、與系統(tǒng)有關(guān)的C程序,。這些C程序提供板級(jí)接口,。基于這些接口,,VxWorks和應(yīng)用程序的構(gòu)造與系統(tǒng)無(wú)關(guān),。該文件的功能包括:定義了RRAM、SRAM,、ROM,、外部片選芯片的物理地址和虛擬地址;定義中斷優(yōu)先級(jí)寄存器中各個(gè)位對(duì)應(yīng)的優(yōu)先級(jí),;調(diào)用sysHwInit()初始化串口和網(wǎng)口,,安裝IRQ/SVC中斷堆棧分配程序;總線中斷功能等,。本文件中有兩個(gè)重要的函數(shù):sysHwInit()和sysHwInit2(),。sysHwInit()的代碼如下:  


sysHwInit2()用來連接系統(tǒng)中斷,安裝ISR,,進(jìn)行其他配置,。它在初始化系統(tǒng)時(shí)鐘時(shí),由sysClkConnect()調(diào)用,,主要用來初始化中斷庫(kù)和中斷驅(qū)動(dòng),,安裝系統(tǒng)時(shí)鐘和輔助時(shí)鐘的中斷以及串口等設(shè)備的中斷。
  
4 編譯生成映像

系統(tǒng)定制完成后,,有兩種編譯方式:一種是在Tornado下進(jìn)行編譯,,生成映像文件;另一種是直接用Make工具編譯,,但要寫好腳本文件,。裝載到目標(biāo)板中的VxWorks映像取決于使用的下載方式,其中主要包括以下幾種:

①VxWorks。這是基于RAM的映像,,VxWorks需要通過目標(biāo)板上的引導(dǎo)程序從串口或網(wǎng)口把它下載到目標(biāo)板的RAM中運(yùn)行,。在Tornado開發(fā)環(huán)境下,這是一個(gè)默認(rèn)選項(xiàng),,主要用在調(diào)試階段,。使用宿主機(jī)上的WindSh工具和符號(hào)表。
②VxWorks.st,。這也是基于RAM的映像,,需要通過引導(dǎo)ROM把VxWorks映像下載到目標(biāo)機(jī)內(nèi)存中才能執(zhí)行。該對(duì)象文件內(nèi)置符號(hào)表,。  
③VxWorkS_rom,。這是一個(gè)非壓縮、基于ROM的映像,。在這個(gè)對(duì)象文件執(zhí)行前,,先把自己拷貝到目標(biāo)機(jī)RAM中。這種類型的映像通常在啟動(dòng)階段速度比較慢,,因?yàn)榇a在ROM中執(zhí)行,,但執(zhí)行階段比ROM駐留型的映像要快。
④VxWorks.st_rom,。這是基于ROM壓縮的VxWorks映像,。它在執(zhí)行前先把自己解壓并拷貝到目標(biāo)機(jī)RAM中執(zhí)行。
⑤VxWorks.res_rom,。這是ROM駐留型的非壓縮VxWorks的映像,。它在執(zhí)行前把數(shù)據(jù)段拷貝到目標(biāo)機(jī)RAM中。這種類型的映像在啟動(dòng)階段比較快,,但在目標(biāo)機(jī)上執(zhí)行的速度比基于ROM類型的映像慢(因?yàn)镃PU訪問ROM比訪問RAM要慢),。通常在RAM空間比較小的目標(biāo)機(jī)上使用這種類型的映像。  

5 需要注意的問題

首先,,應(yīng)該避免在romInit.s中進(jìn)行過多的初始化操作,。該史件中只是進(jìn)行必要的最小硬件初始化,大部分硬件的初始化都是在sysHwInit()中完成的,。另外,,romTnit.s中的代碼不應(yīng)當(dāng)被其他模塊或函數(shù)調(diào)用。

其次,,應(yīng)該避免sysAlib.s中工作太少,。BSP開發(fā)人員通常錯(cuò)誤地認(rèn)為在romInit.s里初始化過的設(shè)備不需要在sysAlib.s中重新初始化。實(shí)際上,,VxWorks映像并不認(rèn)為它是由引導(dǎo)映像程序引導(dǎo)的,,因此,,它必須重新設(shè)置和初始化所有它自己需要使用的設(shè)備。sysInit()是該文件中最主要的一個(gè)函數(shù),,也是第一個(gè)函數(shù),。該例程中很多工作與romInit()是相同的,目的是保證內(nèi)核映像在運(yùn)行與冷啟動(dòng)時(shí),,軟硬件環(huán)境高度一致,。

最后,對(duì)特定的BSF,。驅(qū)動(dòng)程序的修改,,只能在特定的BSP目錄下。此設(shè)計(jì)中目錄為target/config/integra-tor920t,,不要直接在target/src/drv以及target/h/drv中修改,。只有風(fēng)河公司的源程序才能存放在這些目錄下。  

6 結(jié)論

本文在介紹BSP的概念,、作用和vxWorks映像分類以及系統(tǒng)啟動(dòng)流程的基礎(chǔ)上,,以Atmel公司生產(chǎn)的ARM9處理器AT91RM9200為例,重點(diǎn)介紹了VxWorks的BSP設(shè)計(jì)中需要修改的幾個(gè)重要文件,,最后提出了需要注意的問題。盡管目標(biāo)板硬件不同,,BSP的實(shí)現(xiàn)也不盡相同,,但基本思想是一樣的。本設(shè)計(jì)對(duì)各類開發(fā)板的系統(tǒng)移植和后續(xù)的應(yīng)用程序開發(fā)有一定的參考價(jià)值,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。