Research on the Developing of Embedded
Abstract: The article introduces the characters of embedded processor MPC860 and embedded real-time operation system VxWorks and describes the process of embedded system development based on MPC860/ VxWorks which uses BDM to write bootrom file, uses FIP to download VxWorks image and uses Tornado integrated developing circumstance to download and debug applying program.
Key Words: MPC860, VxWorks, Tornado, embedded system
摘 要:本文介紹了嵌入式處理器MPC860與嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks的特點(diǎn),描述了基于MPC860/ VxWorks嵌入式系統(tǒng)開發(fā)的流程:使用BDM調(diào)試器燒寫bootrom文件,使用FTP下載vxworks內(nèi)核鏡像,使用Tornado集成開發(fā)環(huán)境下載與調(diào)試應(yīng)用程序。
關(guān)鍵字: MPC860;VxWorks;Tornado;嵌入式系統(tǒng)
1 引言
摩托羅拉公司生產(chǎn)的MPC系列CPU基于PowerPCTM結(jié)構(gòu),它由三個(gè)模塊組成:即PowerPCTM內(nèi)核、系統(tǒng)接口單元(SIU)及通信處理模塊(CPM)[1]。三個(gè)模塊均采用32 位內(nèi)部總線。主處理器是PowerPCTM內(nèi)核,能夠?qū)崿F(xiàn)內(nèi)存管理,具有指令和數(shù)據(jù)Cache。系統(tǒng)接口單元中,存儲(chǔ)器控制單元可支持多種高性能的存儲(chǔ)器,包括SDRAM和Flash。CPM是一個(gè)RSIC處理器,具有串行通信控制器、波特率發(fā)生器等,支持多種協(xié)議的命令集,可以配置成多種通信處理模式。
VxWorks是一種實(shí)時(shí)性非常強(qiáng)的嵌入式操作系統(tǒng),具有高性能的內(nèi)核、良好的持續(xù)發(fā)展能力、以及友好的功能強(qiáng)大的開發(fā)環(huán)境,使該系統(tǒng)越來越被用戶認(rèn)可。
目前,基于MPC860/VxWorks系統(tǒng)的應(yīng)用越來越廣泛,因此,本文對(duì)基于MPC860/VxWorks系統(tǒng)的開發(fā)的一般流程進(jìn)行了研究。
2 開發(fā)平臺(tái)
2.1 開發(fā)方式介紹
進(jìn)行嵌入式系統(tǒng)開發(fā)有多種方式,常用的方式有兩種:
(1)先進(jìn)行硬件設(shè)計(jì)開發(fā),然后通過仿真器在目標(biāo)板上調(diào)試程序,如單片機(jī)常用的開發(fā)方法;或者在主機(jī)上編寫完用戶程序,將其直接編譯入內(nèi)核,整體下載入目標(biāo)板,通過主機(jī)上的交叉調(diào)試器對(duì)目標(biāo)機(jī)上的程序進(jìn)行調(diào)試,如嵌入式實(shí)時(shí)多任務(wù)系統(tǒng)開發(fā)。
(2)軟硬件同時(shí)開發(fā),通常一些嵌入式操作系統(tǒng)都有一個(gè)集成開發(fā)環(huán)境,包括目標(biāo)機(jī)仿真器,可以在開發(fā)硬件的同時(shí),在仿真器上開發(fā)調(diào)試應(yīng)用程序,最后進(jìn)行聯(lián)合調(diào)試。
第二種方式開發(fā)時(shí)間短,但不夠直觀,容易出錯(cuò),即使仿真成功,但在下載到目標(biāo)板后,通常還需要調(diào)試排錯(cuò)。在有硬件環(huán)境的情況下,通常采用第一種方式,尤其是開發(fā)需要對(duì)硬件進(jìn)行直接操作的底層驅(qū)動(dòng)程序。
這里我們?cè)O(shè)計(jì)一款基于MPC860的嵌入式硬件環(huán)境,它同時(shí)具有幾種通信接口:BDM接口、串口和網(wǎng)口。系統(tǒng)開發(fā)采用第一種開發(fā)方式,軟件開發(fā)流程主要包括:引導(dǎo)程序的燒寫、下載vxworks鏡像和應(yīng)用程序下載調(diào)試等幾個(gè)主要方面。
2.2 Tornado集成開發(fā)環(huán)境
Tornado是嵌入式實(shí)時(shí)領(lǐng)域里最新一代的開發(fā)調(diào)試環(huán)境,提供了高效明晰的圖形化的實(shí)時(shí)應(yīng)用開發(fā)平臺(tái),它包括一套完整的面向嵌入式系統(tǒng)的開發(fā)和調(diào)測(cè)工具[2]。在Tornado II中,包括高性能的實(shí)時(shí)操作系統(tǒng)VxWorks、原代碼編輯器、C/C++編譯器、高性能的調(diào)試器、圖形化的瀏覽器,集成的模擬器等工具和組件。
最主要的特點(diǎn)是:Tornado支持動(dòng)態(tài)鏈接和加載,允許開發(fā)者增量式地加載目標(biāo)模塊到目標(biāo)系統(tǒng)。動(dòng)態(tài)鏈接和加載目標(biāo)模塊的能力作為Tornado結(jié)構(gòu)的核心,使開發(fā)者避免了在宿主機(jī)上鏈接應(yīng)用到內(nèi)核,然后再下載整個(gè)可執(zhí)行體到一個(gè)靜態(tài)環(huán)境的這樣通常采用的步驟。這樣,就大大地縮短了每個(gè)編輯—測(cè)試—調(diào)試的周期。
Tornado II工具提供一個(gè)高度可視化和自動(dòng)化的開發(fā)環(huán)境,加快了基于VxWorks的應(yīng)用開發(fā)。
3 開發(fā)方案
3.1 系統(tǒng)引導(dǎo)程序編程與bootrom燒寫
(1)系統(tǒng)引導(dǎo)程序編程
目標(biāo)系統(tǒng)啟動(dòng)工作首先要進(jìn)行系統(tǒng)初始化,對(duì)不同的CPU,系統(tǒng)初始化的基本步驟是類似的,主要步驟如下:
啟動(dòng);
禁止中斷;
放boot type(引導(dǎo)類型)到堆棧;
清空指令和數(shù)據(jù)緩存。
VxWorks 系統(tǒng)的 PowerPC BSP系統(tǒng)開機(jī)后,處理器是從romInit()函數(shù)開始執(zhí)行,這是romInit.s 中的第一段程序。在romInit()函數(shù)中必須完成以上功能,這些功能程序通常使用匯編語言來寫。在romInit()程序中開始執(zhí)行C程序之前必須盡可能少的加載設(shè)備。引導(dǎo)程序結(jié)束時(shí),得到C程序romStart()在ROM中的地址,保證romInit執(zhí)行結(jié)束后,系統(tǒng)跳轉(zhuǎn)執(zhí)行romStart(),將文本和數(shù)據(jù)段從ROM復(fù)制到RAM中。
在系統(tǒng)初始化程序段中,可加入串口初始化程序和驅(qū)動(dòng)程序,使系統(tǒng)引導(dǎo)結(jié)束后可支持使用串口傳輸命令和信息。加入下載命令程序段,以便于下載VxWorks內(nèi)核鏡像文件。
(2)bootrom燒寫
bootrom燒寫方式有多種,可以使用編程器編程,但對(duì)于在線系統(tǒng)調(diào)試,為方便修改,現(xiàn)在使用較多的是JTAG 調(diào)試器和BDM調(diào)試器。我們的系統(tǒng)采用的是MPC系列的CPU MPC860,它提供有BDM接口。因此可以很方便的使用BDM 調(diào)試工具編程。
MPC BDM調(diào)試工具通過宿主機(jī)的打印口與MPC BDM接口電纜相連,然后加到目標(biāo)板的BDM接口上。連接BDM和目標(biāo)板的電源,(此時(shí)也可以將串口線和網(wǎng)線連接到主機(jī)上)。在燒寫程序之前,將以上編寫的程序編譯成二進(jìn)制目標(biāo)代碼拷貝到c:\sds74\cmd\init下。
打開SDS74調(diào)試軟件,首先要下載燒寫boot的文件,然后執(zhí)行run/go命令,大約需要幾分鐘,boot燒寫完成。
將boot燒好后,拔掉bdm和目標(biāo)板的電源以及bdm電纜,然后再插上目標(biāo)板的電源,boot將運(yùn)行,正常時(shí)會(huì)在主機(jī)的串口超級(jí)終端顯示如下信息:BOOT>,此時(shí)可以說boot燒寫成功。
3.2下載和運(yùn)行VxWorks內(nèi)核鏡像
在可引導(dǎo)的MPC860嵌入式平臺(tái)上,使用串口和網(wǎng)絡(luò)傳輸數(shù)據(jù),進(jìn)行BSP和應(yīng)用程序調(diào)試。相對(duì)于使用串口傳輸數(shù)據(jù),使用網(wǎng)絡(luò)傳輸具有速度快,因此使用串口進(jìn)行發(fā)送命令和返回信息,使用網(wǎng)口傳輸數(shù)據(jù)[6](如圖1)。
主機(jī) 目標(biāo)機(jī)

WindRiver公司提供了很多基于不同硬件平臺(tái)的典型的板級(jí)支持包BSP。因此,開發(fā)基于VxWorks的實(shí)用板級(jí)支持包是盡量獲得一個(gè)與目標(biāo)板硬件環(huán)境相近的參考板級(jí)支持包和相關(guān)代碼模板,再根據(jù)目標(biāo)板硬件環(huán)境,完成板級(jí)支持包包含的驅(qū)動(dòng)程序及設(shè)備初始化,從而完成板級(jí)支持包的開發(fā)[4]。
啟動(dòng)Tornado II集成開發(fā)環(huán)境,使用工程向?qū)?chuàng)建一個(gè)可啟動(dòng)工程(bootable VxWorks image)項(xiàng)目,選擇基于ads860的BSP。在這個(gè)工程項(xiàng)目里可以進(jìn)行BSP的基本配置、VxWorks的基本配置、網(wǎng)卡配置等,結(jié)合實(shí)際電路和應(yīng)用進(jìn)行修改,創(chuàng)建用戶自己的BSP以支持特定硬件。前述bootrom程序也可由此生成。在此階段可以借助WDB調(diào)試代理和Tornado工具輔助開發(fā),也可以選擇在線仿真器ICE輔助開發(fā)。
BSP 調(diào)試完成,編譯此工程項(xiàng)目為一個(gè)VxWorks內(nèi)核鏡像文件*.img,在以后的應(yīng)用程序調(diào)試過程中可通過Tornado的一個(gè)部件 ftp server下載。下載方法如下:
首先連接主機(jī)與目標(biāo)板的網(wǎng)線和串口線,目標(biāo)板上電后,在超級(jí)終端窗口3秒以內(nèi)按回車鍵進(jìn)入boot shell;否則,目標(biāo)機(jī)系統(tǒng)會(huì)進(jìn)入自動(dòng)尋找并運(yùn)行程序狀態(tài)。
此時(shí)啟動(dòng)和配置ftp server,選擇Security菜單中的user/rights命令,添加一個(gè)用戶名如target,密碼target,設(shè)置主目錄為C:\;然后點(diǎn)擊Done。ftp server配置完成。
現(xiàn)在需要設(shè)置主機(jī)ip地址。將主機(jī)ip設(shè)為192.168.1.1,子網(wǎng)掩碼255.255.255.0。將調(diào)試好的VxWorks鏡像文件*.img拷貝到C:\。
最后,在主機(jī)的串口超級(jí)終端中輸入設(shè)置好的下載命令@,目標(biāo)板開始從主機(jī)的ftp server下載*.img(vxworks的ram鏡像)。
下載完成,*.img文件自動(dòng)運(yùn)行,在超級(jí)終端窗口顯示vxworks鏡像在目標(biāo)板啟動(dòng)成功的信息,此時(shí)vxworks內(nèi)核已經(jīng)成功裝載到目標(biāo)板,可以同主機(jī)的tornado(vxworks的集成開發(fā)環(huán)境)進(jìn)行連接了。
3.3 在tornado中編寫和運(yùn)行應(yīng)用程序
當(dāng)上述環(huán)境配置成功后就可以進(jìn)行應(yīng)用程序開發(fā)了。在tornado集成開發(fā)環(huán)境中可以開發(fā)并調(diào)試各種應(yīng)用程序,添加程序并編譯成功后就可以下載到目標(biāo)板上進(jìn)行調(diào)試了。下面通過一個(gè)應(yīng)用程序調(diào)試示例加以說明。
4 開發(fā)應(yīng)用程序示例
4.1 開發(fā)并編譯程序
啟動(dòng)Tornado II集成開發(fā)環(huán)境,使用工程向?qū)?chuàng)建一個(gè)可下載工程(downloadable application modules)項(xiàng)目project1,在創(chuàng)建過程中選擇工具鏈(toolchain)為PPC860gnu。在工程項(xiàng)目中編寫或添加應(yīng)用程序源文件,如一個(gè)Hello.c文件。
#include "vxworks.h"
#include "drv/multi/ppc860Siu.h"
void root()
{
printf("hello!How are you?\n"); /*在終端輸出此信息*/
}
#define PD10 (0x0020)
#define PD09 (0x0040)
#define RUNLIGHT PD10
#define LINKLIGHT PD09
void RunLight(void)
{
int immrVal = vxImmrGet();
*PDDIR(immrVal)|=RUNLIGHT;
while(1)
{
*PDDAT(immrVal) ^=RUNLIGHT;
taskDelay(sysClkRateGet()/2);/*delay 0.5 second*/
}
}
void run()
{
taskSpawn ("RunLight", 100,0 /*switchTaskOptions*/,0x1000,
(FUNCPTR)RunLight, 0,0,0,0,0,0,0,0,0,0);
} /*通過以上函數(shù)創(chuàng)建并激活一個(gè)新任務(wù),點(diǎn)亮系統(tǒng)指示燈*/
4.2 配置和運(yùn)行target server
使用Tornado編譯器編譯成功后下載。下載之前首先要配置和運(yùn)行target server,在菜單tool/target server/configure中,先點(diǎn)擊new新建一個(gè)配置如configuration1, 然后開始配置。
在target server proportion 項(xiàng)的“Back End”的選項(xiàng)中選擇wdbrpc;
在target server proportion 項(xiàng)的“Core File and Symbols”的選項(xiàng)中設(shè)置vxworks鏡像文件位置為C:\;
在target name/ip address輸入目標(biāo)板的ip 地址192.168.1.254;
配置完成,點(diǎn)擊Launch運(yùn)行;
下面可以下載和運(yùn)行應(yīng)用程序了。
4.3下載和運(yùn)行程序
在工程上點(diǎn)擊右鍵,選擇download project1.out下載應(yīng)用程序到目標(biāo)板,然后可以在Tornado中的shell里運(yùn)行應(yīng)用程序了,如在shell中運(yùn)行hello.c中的root函數(shù)(在shell中打印hello!How are you?)和run(目標(biāo)板的run燈會(huì)閃亮)。
在每次下載調(diào)試應(yīng)用程序或添加新的應(yīng)用程序時(shí)都不需要把它們和vxworks內(nèi)核編譯到一起,這樣節(jié)省了開發(fā)和調(diào)試時(shí)間。
5 總結(jié)
本文描述了基于嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks的開發(fā)方法,憑借性能優(yōu)良的VxWorks和高度集成的開發(fā)環(huán)境,VxWorks的應(yīng)用已成為新的研究熱點(diǎn)。在開發(fā)過程中使用相近的BSP開發(fā)用戶自己的板級(jí)支持包,難度降低了并縮短了開發(fā)時(shí)間,使用ftp server下載VxWorks內(nèi)核鏡像,使用Torndo 工具編譯、調(diào)試和下載應(yīng)用程序。通過這樣的流程對(duì)應(yīng)用程序的開發(fā)帶來了極大的方便,該方法已得到廣泛應(yīng)用。
本文作者創(chuàng)新點(diǎn):對(duì)基于VxWorks嵌入式操作系統(tǒng)在MPC8XX系列cpu上的開發(fā)過程進(jìn)行了具體而實(shí)用的描述。有一定的應(yīng)用價(jià)值。