《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于OMAP3530的Windows Embedded Compact 7 BSP的開(kāi)發(fā)與移植
基于OMAP3530的Windows Embedded Compact 7 BSP的開(kāi)發(fā)與移植
來(lái)源:電子技術(shù)應(yīng)用2012年第2期
韓德強(qiáng),劉立哲,劉 濤,聶 帥
北京工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,北京100124
摘要: 介紹了TI公司的OMAP3530雙核處理器和基于該處理器設(shè)計(jì)的開(kāi)發(fā)板,描述了BSP的一般概念及開(kāi)發(fā)方法。通過(guò)實(shí)例說(shuō)明了在嵌入式系統(tǒng)開(kāi)發(fā)中如何實(shí)現(xiàn)Windows Embedded Compact 7 BSP的開(kāi)發(fā)和移植。
中圖分類號(hào): TP316.7
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)02-0014-04
The development of BSP under Windows Embedded Compact 7 based on OMAP3530
Han Deqiang,Liu Lizhe,Liu Tao,Nie Shuai
College of Computer, Beijing University of Technology, Beijing 100124,China
Abstract: This paper produces the architecture of OMAP3530 microprocessor of TI Corporation and demo board based on this processor. It discusses the general concept of BSP and solutions in board development. It illustrates the method and steps to develop Windows Embedded Compact 7 BSP.
Key words : BSP replant;OMAP3530;Windows Embedded Compact 7

    Windows Embedded Compact 7(以下簡(jiǎn)稱Compact 7)操作系統(tǒng)在訪問(wèn)底層硬件時(shí),不直接訪問(wèn)硬件,而是通過(guò)抽象出來(lái)的函數(shù)訪問(wèn)。抽象出來(lái)的函數(shù)層,就是通常所說(shuō)的板支持包BSP(Board Support Package)[1]。BSP介于底層硬件和操作系統(tǒng)之間,完成硬件初始化并將控制權(quán)切換給操作系統(tǒng)。由于嵌入式系統(tǒng)的底層硬件具有無(wú)標(biāo)準(zhǔn)、非規(guī)范等特性,操作系統(tǒng)都存在著BSP移植的問(wèn)題,這就要求BSP開(kāi)發(fā)人員在BSP開(kāi)發(fā)過(guò)程中熟練掌握具體的硬件原理和軟件實(shí)現(xiàn)方法。

    Compact 7與之前的Windows CE版本一樣,提供了一整套平臺(tái)開(kāi)發(fā)工具Platform Builder,使開(kāi)發(fā)人員能夠快速靈活地創(chuàng)建解決方案[2]。而且Platform Builder本身也提供了多種目標(biāo)板的BSP樣例,可以在開(kāi)發(fā)移植BSP時(shí)作參考。
1 OMAP3530處理器
    TI公司推出的OMAP3530是一款技術(shù)先進(jìn)的高性能嵌入式異構(gòu)雙核處理器,主要由一個(gè)600 MHz的CortexTM-A8 ARM核和一個(gè)430 MHz的DSP 核組成。嵌入式操作系統(tǒng)在ARM核上運(yùn)行,與數(shù)字信號(hào)處理相關(guān)的任務(wù)則由DSP核負(fù)責(zé)。盡管OMAP3530是一個(gè)異構(gòu)多核架構(gòu)的微處理器,但DSP核對(duì)于基于ARM核開(kāi)發(fā)的工程師而言是透明的。在軟件工具鏈中,TI引入了DSP橋的概念。DSP橋是針對(duì)ARM應(yīng)用程序開(kāi)發(fā)提供的一組面向DSP算法的應(yīng)用程序接口(API),以便應(yīng)用程序獲取DSP核的計(jì)算資源和數(shù)據(jù)資源。
2 Compact 7操作系統(tǒng)
    Windows Embedded Compact 7是Windows CE 6.0的后續(xù)產(chǎn)品,它不僅是一個(gè)功能強(qiáng)大的實(shí)時(shí)操作系統(tǒng),而且還為開(kāi)發(fā)者提供了全套開(kāi)發(fā)工具。作為Windows CE家族的換代產(chǎn)品,Compact 7繼承了之前Windows CE系統(tǒng)的優(yōu)良傳統(tǒng),又在其上增加了對(duì)ARMv7構(gòu)架的支持;對(duì)Windows CE先前版本的強(qiáng)大功能進(jìn)行了進(jìn)一步的擴(kuò)充和豐富,如支持多點(diǎn)觸控、優(yōu)化電源管理等。
    與Windows CE 6.0不同,Compact 7的平臺(tái)開(kāi)發(fā)工具Platform Builder依托于Visual Studio 2008,內(nèi)嵌的Silverlight for Windows Embedded有利于減輕開(kāi)發(fā)者開(kāi)發(fā)界面的負(fù)擔(dān)。在軟件開(kāi)發(fā)上,Compact 7徹底摒棄傳統(tǒng)的MFC程序框架,轉(zhuǎn)而全面支持.Net framework。高效的開(kāi)發(fā)框架,將最大限度地提高開(kāi)發(fā)者的工作效率,有助于提高產(chǎn)品的市場(chǎng)競(jìng)爭(zhēng)力。
3 OMAP3530開(kāi)發(fā)板硬件構(gòu)成
    開(kāi)發(fā)板硬件平臺(tái)主要以TI公司的OMAP3530雙核處理器為核心,配有256 MB SDRAM和512 MB Nand Flash用以啟動(dòng)系統(tǒng)和存儲(chǔ)運(yùn)行程序。同時(shí),還配有電源管理、USB、UART、以太網(wǎng)控制器、液晶屏等外圍電路。基于OMAP3530處理器開(kāi)發(fā)板的硬件結(jié)構(gòu)框圖如圖1所示。

4 Compact 7操作系統(tǒng)下BSP開(kāi)發(fā)與移植
    Compact 7中BSP是由Boot Loader、OEM適配層、設(shè)備驅(qū)動(dòng)程序、內(nèi)核獨(dú)立傳輸層(KITL)以及鏡像配置文件五部分組成[3]。關(guān)于各部分之間的相互聯(lián)系以及與硬件平臺(tái)之間的關(guān)系如圖2所示。

4.1 Clone BSP
    Compact 7提供了兩種方法開(kāi)發(fā)BSP,一種是從零開(kāi)始進(jìn)行BSP開(kāi)發(fā)的方法,另一種是克隆已有的BSP再進(jìn)行移植的方法。Clone BSP實(shí)質(zhì)就是對(duì)現(xiàn)有的BSP進(jìn)行復(fù)制并按照開(kāi)發(fā)者要求改變BSP的名稱等信息。Clone BSP保留了原有BSP的程序架構(gòu)和全部代碼,開(kāi)發(fā)者只需對(duì)BSP中部分代碼進(jìn)行修改添加即可實(shí)現(xiàn)新開(kāi)發(fā)板的功能,簡(jiǎn)化了開(kāi)發(fā)流程,提高了開(kāi)發(fā)效率。考慮到從零開(kāi)始開(kāi)發(fā)BSP相當(dāng)困難,OMAP3530開(kāi)發(fā)板的BSP開(kāi)發(fā)就采用Clone相似平臺(tái)的BSP的方法進(jìn)行移植。這樣的實(shí)現(xiàn)方法可以大幅度降低開(kāi)發(fā)BSP的難度并縮短開(kāi)發(fā)周期。
    具體方法是,在Platform Builder中使用其自帶的Clone BSP工具,克隆TI公司提供的OMAP3530樣例BSP,并自行定義名稱(如MyBSP),然后設(shè)置相關(guān)描述(如平臺(tái)目錄名稱、供應(yīng)商名稱以及版本號(hào)等信息)。如果設(shè)置信息合法,單擊Clone按鈕后會(huì)提示成功克隆BSP。克隆出的BSP位于%_WINCEROOT%\PLATFORM目錄下。
4.2 移植Boot Loader
    BSP移植首先要實(shí)現(xiàn)Boot Loader的功能。Boot Loader是一段啟動(dòng)引導(dǎo)程序,主要在Compact 7系統(tǒng)加載前初始化相關(guān)硬件,并把系統(tǒng)鏡像加載到內(nèi)存中運(yùn)行。根據(jù)鏡像boot的方式,Boot Loader分為nboot、eboot和uboot等。
    OMAP3530處理器內(nèi)嵌的RAM只有64 KB,對(duì)Boot Loader生成的可執(zhí)行文件而言過(guò)于小,無(wú)法將其加載到內(nèi)部RAM中,所以只能使用外部RAM進(jìn)行加載。但OMAP3530上電時(shí)不能自動(dòng)初始化memory controller,無(wú)法讀寫(xiě)外部RAM。因此,需要一個(gè)程序負(fù)責(zé)初始化外部的RAM控制器,把可執(zhí)行文件從 Nand Flash或者SD卡中讀取到外部RAM中,然后跳轉(zhuǎn)到入口處執(zhí)行。實(shí)現(xiàn)這一功能的程序稱為x-Loader,x-Loader是Compact 7啟動(dòng)之后運(yùn)行的第一段程序,實(shí)質(zhì)上是一個(gè)精簡(jiǎn)版的Boot Loader。x-Loader運(yùn)行的第一個(gè)函數(shù)是startup()函數(shù),startup()采用匯編語(yǔ)言編寫(xiě),首要功能是對(duì)目標(biāo)系統(tǒng)的CPU進(jìn)行最基本的初始化。例如,清空TLB和cache、關(guān)閉中斷、配置PLL、設(shè)置內(nèi)存控制器、設(shè)置跳轉(zhuǎn)到main的函數(shù)地址等。OMAP3530開(kāi)發(fā)板上電后,CPU會(huì)自動(dòng)從Nand Flash或者SD卡中加載x-Loader到內(nèi)部RAM,然后執(zhí)行初始化任務(wù),最后將控制權(quán)交給Boot Loader。Startup()函數(shù)實(shí)現(xiàn)main函數(shù)跳轉(zhuǎn)地址代碼如下:
    ldr sp, =( XLDR_STACK_PA+XLDR_STACK_SIZE)
    b        XLDRMain
    其中,XLDR_STACK_PA和XLDR_STACK_ SIZE是任務(wù)堆棧起始地址和大小,系統(tǒng)通過(guò)使sp指針指向x-Loader中的任務(wù)堆棧起始地址的方法實(shí)現(xiàn)程序的跳轉(zhuǎn)。
    x-Loader位于BSP目錄下的boot文件夾中,需要修改其中的platform.c和main.c兩個(gè)文件。platform.c的作用是對(duì)OMAP3530功能進(jìn)行設(shè)置,文件中包括PinMuxSetup()、GpioSetup()、ClockSetup()、MemorySetup()等幾個(gè)重要的函數(shù)。
    PinMuxSetup()函數(shù)專門(mén)用于設(shè)置引腳功能,這樣做的好處是可以有統(tǒng)一的啟動(dòng)代碼并且不必?fù)?dān)心在啟動(dòng)過(guò)程中對(duì)復(fù)用引腳功能的再度修改。其實(shí)現(xiàn)樣例代碼如下:
    OUTREG16(&pConfig->CONTROL_PADCONF_SDRC_D0,
    (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0));
    OUTREG16函數(shù)用于設(shè)置OMAP3530 中的16 bit寄存器,該函數(shù)通過(guò)CONTROL_PADCONF_SDRC_D0獲得處理器相應(yīng)管腳的寄存器地址;通過(guò)設(shè)置INPUT_ENABLE、PULL_INACTIVE等參數(shù)來(lái)實(shí)現(xiàn)對(duì)管腳屬性的定義;通過(guò)設(shè)置MUX_MODE_X的方法實(shí)現(xiàn)管腳功能的定義。具體MUX_MODE_X代表的功能定義,可參閱OMAP3530技術(shù)手冊(cè)。
    MemorySetup()函數(shù)用于初始化通用存儲(chǔ)控制器(GPMC)和外部RAM(SDRC)。由于GPMC信號(hào)在Flash和以太網(wǎng)控制器上都用到。因此,在MemorySetup()函數(shù)中需要對(duì)GPMC片選信號(hào)進(jìn)行設(shè)置。實(shí)現(xiàn)樣例代碼如下:
    OUTREG32(&pGpmc->GPMC_CONFIG1_3,
    BSP_GPMC_LAN_CONFIG1);
    OUTREG32函數(shù)用于設(shè)置OMAP3530 中的32 bit寄存器,通過(guò)GPMC_CONFIG獲得設(shè)置寄存器的地址;通過(guò)宏定義BSP_GPMC_LAN+CONFIG1設(shè)置具體數(shù)值。
    main.c文件是x-Loader的主程序,在RELEASE模式下能夠生成MLO執(zhí)行文件,在DEBUG模式下編譯配置文件 sources 跳過(guò)了對(duì)其的編譯。因?yàn)閤-Loader對(duì)大小有要求, 若DEBUG 編譯文件過(guò)大,即使生成可執(zhí)行文件也無(wú)法加載到OMAP3530內(nèi)部RAM中。
    x-Loader移植完成后,需要進(jìn)行Boot Loader的移植。為了與x-Loader一致,Boot Loader下執(zhí)行的第一個(gè)函數(shù)也是Startup()函數(shù)。Boot Loader下的Startup()函數(shù)同樣是采用匯編語(yǔ)言編寫(xiě)的,主要完成靜態(tài)邏輯地址到物理地址的映射以及跳轉(zhuǎn)到BootloaderMain函數(shù)執(zhí)行的功能。
    Boot Loader開(kāi)發(fā)重點(diǎn)是實(shí)現(xiàn)OEMPlatformInit()函數(shù)用以硬件初始化,這個(gè)函數(shù)與硬件具有高度的相關(guān)性[4]。總的來(lái)說(shuō),OEMPlatforminit()函數(shù)需要完成五項(xiàng)初始化任務(wù):首先是通過(guò)OEMEthGetSecs()函數(shù)初始化定時(shí)器,其次初始化Nand Flash存儲(chǔ)器,再次是復(fù)位外圍設(shè)備,然后初始化用于下載鏡像的以太網(wǎng)控制器,最后初始化操作系統(tǒng)的內(nèi)存空間。
    為了使Boot Loader支持以太網(wǎng)下載方式,需要實(shí)現(xiàn)與以太網(wǎng)控制器相關(guān)的函數(shù)。開(kāi)發(fā)板以太網(wǎng)控制器選用SMSC公司的Lan9220芯片。其具體的實(shí)現(xiàn)過(guò)程如下:
    (1)在%_WINCEROOT\PLATFORM\MyBSP\SRC\BOOT\
EBOOT下添加Lan9220dbg.c。
    (2)在Lan9220dbg.c文件中實(shí)現(xiàn)LAN9220_Init、LAN-
9220_SendFrame和LAN9220_GetFrame 3個(gè)函數(shù)。
    (3)在%_WINCEROOT\PLATFORM\MyBSP\SRC\INC下的kitl_cfg.h文件中聲明上述3個(gè)函數(shù),并定義BSP_ETHDRV_LAN9220結(jié)構(gòu)體。結(jié)構(gòu)體定義如下:
    #define BSP_ETHDRV_LAN9220 {
    (OAL_KITLETH_INIT) LAN9220_Init, NULL, NULL,
    (OAL_KITLETH_SEND_FRAME) LAN9220_SendFrame,
    (OAL_KITLETH_GET_FRAME) LAN9220_GetFrame,
    NULL, NULL, NULL, NULL,  NULL, NULL }
    (4)在%_WINCEROOT\PLATFORM\MyBSP\SRC\BOOT\
EBOOT下的boot_cfg.h文件中添加BSP_ETHDRV_LAN-
9220到g_bootDevices內(nèi)容中即可。
    初始化傳輸端口通過(guò)修改OEMPreDownload()函數(shù)實(shí)現(xiàn),在OEMPreDownload函數(shù)中首先需要為硬件平臺(tái)指點(diǎn)一個(gè)靜態(tài)IP地址,其次通過(guò)設(shè)置g_bootCfg.kitlFlags變量來(lái)設(shè)置IP協(xié)議,然后將boot方式設(shè)置成以太網(wǎng)下載模式,最后調(diào)用OEMLaunch函數(shù)來(lái)下載鏡像。OEMLaunch函數(shù)的功能是下載鏡像,并將程序計(jì)數(shù)器的指針直接設(shè)置到操作系統(tǒng)鏡像的開(kāi)始地址。它是啟動(dòng)操作系統(tǒng)前Boot Loader的最后一個(gè)函數(shù),沒(méi)有返回值。可以參考微軟提供的標(biāo)準(zhǔn)BSP中的代碼實(shí)現(xiàn)該函數(shù)。實(shí)現(xiàn)此函數(shù)后,Boot Loader的功能基本完成。
4.3 移植OEM適配層
    OEM適配層OAL(OEM Adaptation Layer)邏輯上位于Compact 7內(nèi)核和硬件平臺(tái)之間。物理上可以生成可執(zhí)行文件(NK.EXE)。OAL的出現(xiàn)大大方便了操作系統(tǒng)和硬件平臺(tái)之間的通信。OAL還用來(lái)處理中斷、控制時(shí)鐘、管理電源、控制I/O接口等。
    通常情況下,OAL創(chuàng)建的方法就是復(fù)制與自己開(kāi)發(fā)平臺(tái)相近且已經(jīng)成功應(yīng)用的OAL文件,然后進(jìn)行適當(dāng)?shù)男薷模琌AL文件位于%_WINCEROOT\PLATFORM\MyBSP\SRC\OAL目錄下。移植過(guò)程中需要修改OEMInit函數(shù),該函數(shù)是在OEM適配層中初始化中斷、時(shí)鐘、KITL、計(jì)數(shù)器以及看門(mén)狗功能的。需要注意的是,如果要打開(kāi)串口的debug功能,也要在OEMInit函數(shù)中進(jìn)行設(shè)置,將OEMDeinitDebugSerial()函數(shù)注釋掉。
4.4 開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序
    BSP驅(qū)動(dòng)程序?qū)儆趦?nèi)置驅(qū)動(dòng),與流驅(qū)動(dòng)不一樣的是,它不用設(shè)備管理器來(lái)管理,也不用導(dǎo)出與流驅(qū)動(dòng)程序類似的API接口。此類驅(qū)動(dòng)通常放在硬件平臺(tái)的目錄之下,如LCD顯示、USB接口驅(qū)動(dòng)就放在SRC\DRIVERS目錄下。
    以Touch的開(kāi)發(fā)為例,簡(jiǎn)要介紹Compact 7下內(nèi)置驅(qū)動(dòng)的開(kāi)發(fā)過(guò)程。Compact 7中Touch驅(qū)動(dòng)采用分層方式實(shí)現(xiàn),分為MDD(Model Device Driver)層和PDD(Platform Dependent Driver)層,分層結(jié)構(gòu)方便了驅(qū)動(dòng)程序的維護(hù)和移植。Touch驅(qū)動(dòng)分層示意圖如圖3所示。

 

 

    Touch驅(qū)動(dòng)程序接收用戶的觸摸信息,并將其轉(zhuǎn)換為觸摸屏上的位置坐標(biāo)信息,再傳給圖形、窗口和事件的子系統(tǒng)GWES(Graphics,Windowing, and Events Subsystem)模塊。主要的工作是處理用戶交互和圖形輸出等任務(wù)。觸摸屏驅(qū)動(dòng)就是被它加載的,同時(shí)被GWES加載的還有鼠標(biāo)驅(qū)動(dòng)、鍵盤(pán)驅(qū)動(dòng)以及顯示設(shè)備驅(qū)動(dòng)。
    對(duì)于初學(xué)者只需實(shí)現(xiàn)PDD層函數(shù)以及與MDD層通信的DDSI函數(shù)即可。MDD層與GWES模塊通信的DDI函數(shù)已由微軟實(shí)現(xiàn)。這樣驅(qū)動(dòng)開(kāi)發(fā)的工作量會(huì)少很多,而代碼的可靠性則有了更好的保證。
    Compact 7觸摸屏驅(qū)動(dòng)程序采用中斷方式對(duì)按下?tīng)顟B(tài)進(jìn)行檢測(cè),如果檢測(cè)到觸摸動(dòng)作時(shí)將產(chǎn)生中斷并觸發(fā)一個(gè)事件通知一個(gè)工作線程開(kāi)始采集數(shù)據(jù)。同時(shí),驅(qū)動(dòng)將打開(kāi)一個(gè)定時(shí)器,若觸摸動(dòng)作仍然存在,則定時(shí)觸發(fā)同一個(gè)事件通知工作線程采集數(shù)據(jù)。驅(qū)動(dòng)中采用了觸摸屏中斷以及定時(shí)器中斷2個(gè)中斷源,不僅可以監(jiān)控觸摸筆按下和抬起的動(dòng)作,還可以檢測(cè)到觸摸屏按下時(shí)的拖動(dòng)軌跡[5]。
    由于OMAP3530開(kāi)發(fā)板與觸摸屏之間采用I2C總線通信,而Compact 7提供的樣例是以SPI接口進(jìn)行數(shù)據(jù)通信,因此,需要修改PDDInitializeHardware函數(shù)和PDDGetControllerData函數(shù)。對(duì)SPI接口的讀寫(xiě)改為對(duì)I2C總線的讀寫(xiě);之后在PDDTouchPanelGetPoint函數(shù)中修改代碼,按照具體觸摸屏控制芯片的數(shù)據(jù)定義格式進(jìn)行坐標(biāo)轉(zhuǎn)換;最后更改.reg文件中的注冊(cè)信息,定義管腳號(hào)、驅(qū)動(dòng)加載位置等。Compact 7系統(tǒng)啟動(dòng)過(guò)程中加載GWES模塊后,GWES模塊將根據(jù)注冊(cè)表的信息加載觸摸屏驅(qū)動(dòng)。
4.5 移植內(nèi)核獨(dú)立傳輸層
    在Windows CE系統(tǒng)中使用了內(nèi)核獨(dú)立傳輸層KITL(Kernel Independent Transport Layer)技術(shù),其設(shè)計(jì)目標(biāo)是向開(kāi)發(fā)者提供一種簡(jiǎn)單的開(kāi)發(fā)方式以支持調(diào)試服務(wù)。從Windows CE 6.0開(kāi)始,KITL模塊已經(jīng)獨(dú)立出OAL,在操作系統(tǒng)運(yùn)行時(shí)已經(jīng)有了一個(gè)獨(dú)立的KITL.dll動(dòng)態(tài)鏈接庫(kù)。Compact 7操作系統(tǒng)繼承了這一特性,同時(shí)也提供了大量的程序樣例用于開(kāi)發(fā)參考。
    KITL的開(kāi)發(fā)過(guò)程只需要完善OEM部分代碼即可,這部分代碼位于\SRC\KITL目錄下。用戶需要實(shí)現(xiàn)OEMKitlStartup函數(shù)、OEMKitlInit函數(shù),同時(shí)需要構(gòu)造相關(guān)結(jié)構(gòu)體數(shù)據(jù)。OEMKitlStartup的功能是構(gòu)造實(shí)際參數(shù)的數(shù)據(jù),如代表KITL連接設(shè)備的標(biāo)識(shí)符字符串、記錄用戶對(duì)系統(tǒng)KITL功能配置的數(shù)據(jù)以及所有可選KITL連接設(shè)備的硬件位置。OEMKitlInit的功能是構(gòu)造一個(gè)設(shè)置KITL傳輸層端口的結(jié)構(gòu)體數(shù)據(jù)。
    OMAP3530開(kāi)發(fā)板的KITL采用中斷方式進(jìn)行驅(qū)動(dòng)。中斷方式在OEMKitlStartup函數(shù)中設(shè)置。具體代碼如下:
    // Prepare interrupt
    pGPIORegs = OALPAtoUA(BSP_ETHER_GPIO_PA);
    SETREG32(&pGPIORegs->OE,
            1 << (BSP_IRQ_ETHER_KITL % 32));
    // Interrupt on falling edge
    SETREG32(&pGPIORegs->FALLINGDETECT,
            1 << (BSP_IRQ_ETHER_KITL % 32));
    OEMKitlEnableClocks(FALSE);
    之后在OEMKitlEnableClocks函數(shù)中修改IRQ管腳對(duì)時(shí)鐘的響應(yīng)。具體代碼如下:
    // IRQ pin
    clockRoutines.pfnEnableDeviceFClock(OMAP_DEVICE_GPIO,
bEnable);
    其中宏定義BSP_IRQ_ETHER_KITL和OMAP_DEVICE_GPIO的值由開(kāi)發(fā)板上實(shí)際連接到LAN9220的中斷信號(hào)的管腳決定。移植過(guò)程中對(duì)這兩個(gè)宏定義進(jìn)行修改即可實(shí)現(xiàn)KITL的功能。
4.6 設(shè)置配置文件
    當(dāng)創(chuàng)建一個(gè)Compact 7的工程時(shí),可以通過(guò)添加環(huán)境變量、修改.bib和.reg等文件來(lái)重新配置BSP。Compact 7將配置文件分為兩類,一類是源代碼配置文件,如Dirs文件、Makefile文件以及Sources文件;另一類是鏡像配置文件,如.bib文件、.reg文件、.dat文件等。開(kāi)發(fā)人員必須理解相關(guān)配置文件的作用和使用方法才能合理地配置系統(tǒng)資源。
    至此,BSP的開(kāi)發(fā)流程已基本完成。開(kāi)發(fā)移植好的BSP要在Platform Builder中編譯生成可以在硬件開(kāi)發(fā)平臺(tái)上運(yùn)行的二進(jìn)制代碼,通過(guò)SD卡將MLO和eboot.nb0下載到Nand Flash上,然后再通過(guò)以太網(wǎng)下載NK.bin到開(kāi)發(fā)板上。
    開(kāi)發(fā)BSP 是一個(gè)基于具體硬件和軟件的復(fù)雜過(guò)程,需要開(kāi)發(fā)者對(duì)硬件和軟件知識(shí)都有較為深入的了解[6]。BSP開(kāi)發(fā)的正確性將直接影響到系統(tǒng)運(yùn)行的穩(wěn)定性。
參考文獻(xiàn)
[1] 周建設(shè).Windows CE設(shè)備驅(qū)動(dòng)及BSP開(kāi)發(fā)指南[M].北京:中國(guó)電力出版社,2009.
[2] 陳瑞,張永瑞,歐陽(yáng)雄.基于XSCALE架構(gòu)處理器WinCE系統(tǒng)BSP開(kāi)發(fā)[J].電子科技,2006(2).
[3] Microsoft.BSP porting guide for Windows Embedded Compact 7[Z].2010.
[4] 李大為.Windows CE工程實(shí)踐完全解析[M].北京:中國(guó)電力出版社,2008.
[5] 張毅,王海濤.基于S3C2410A的WinCE 5.0下觸摸屏驅(qū)動(dòng)的實(shí)現(xiàn)[J].重慶郵電大學(xué)學(xué)報(bào)(自然科學(xué)版),2008(6).
[6] 李海林,趙惠林,熊文峰.基于XScale PXA255處理器WinCE 420系統(tǒng)BSP開(kāi)發(fā)[J].艦船電子工程,2006(3).

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产精品欧美日韩一区| 亚洲国产婷婷香蕉久久久久久99| 久久久免费av| 欧美一区二区大片| 亚洲性视频网站| 99精品久久免费看蜜臀剧情介绍| 亚洲高清成人| 久久国产欧美日韩精品| 亚洲综合第一| 亚洲无线视频| 亚洲香蕉视频| 亚洲视屏在线播放| 在线一区二区三区做爰视频网站 | 欧美一区二区三区日韩视频| 亚洲一级一区| 亚洲女同精品视频| 亚洲欧美日韩国产一区二区三区| 亚洲深夜福利视频| 亚洲午夜电影在线观看| 亚洲视频免费在线| 亚洲免费视频在线观看| 亚洲欧美日本日韩| 欧美一区二区成人| 久久久久国产免费免费| 久久先锋资源| 欧美xxx成人| 欧美精品一区二区在线播放| 欧美日本国产精品| 国产精品成人一区二区| 国产欧美一区二区色老头| 国产一区二区三区日韩| 极品尤物一区二区三区| 亚洲欧洲在线播放| 中日韩高清电影网| 欧美一区二区私人影院日本 | 久久久五月天| 欧美成人久久| 国产精品都在这里| 国产综合第一页| 在线免费观看日本一区| 亚洲精品欧洲精品| 亚洲尤物在线视频观看| 久久福利电影| 一本久久综合亚洲鲁鲁| 香蕉国产精品偷在线观看不卡| 久久精品国产69国产精品亚洲| 麻豆av福利av久久av| 欧美日韩国产一区精品一区| 国产精品福利在线| 国产又爽又黄的激情精品视频| 亚洲国产婷婷香蕉久久久久久99| 宅男精品视频| 亚洲国产精品一区二区第一页| 一区二区免费在线视频| 欧美一区高清| 欧美精品一区二区三| 国产日本欧美一区二区| 在线免费一区三区| 亚洲图片在区色| 亚洲激情自拍| 性色av一区二区三区在线观看| 久久综合激情| 国产精品久久久久毛片大屁完整版| 韩国三级电影久久久久久| 亚洲美女黄网| 亚洲二区视频| 先锋影院在线亚洲| 欧美极品aⅴ影院| 国产在线欧美日韩| a4yy欧美一区二区三区| 亚洲国产高潮在线观看| 亚洲影院色无极综合| 麻豆精品在线观看| 国产精品嫩草99a| 亚洲黑丝一区二区| 欧美一级片久久久久久久| 夜夜夜精品看看| 久久综合九色| 国产伦精品一区二区三区| 亚洲精品你懂的| 亚洲国产成人高清精品| 亚洲欧美日韩一区二区三区在线| 欧美国产1区2区| 国产中文一区二区| 亚洲午夜免费福利视频| 亚洲美女中出| 久久综合色综合88| 国产日韩欧美精品一区| 日韩一级视频免费观看在线| 亚洲二区在线视频| 欧美在线综合| 国产精品美女主播| 日韩亚洲欧美在线观看| 亚洲激情综合| 久久深夜福利| 国产日韩欧美一区在线 | 亚洲裸体在线观看| 亚洲日韩欧美一区二区在线| 久久精品欧美| 国产日韩av高清| 亚洲在线视频| 亚洲一级黄色av| 欧美日韩在线高清| 亚洲人体1000| 日韩亚洲国产欧美| 欧美大片免费观看在线观看网站推荐| 国产一区二区三区久久久| 亚洲欧美日韩直播| 香蕉久久精品日日躁夜夜躁| 欧美视频你懂的| 日韩视频一区| 夜夜嗨av一区二区三区| 欧美第十八页| 91久久黄色| 日韩午夜电影av| 欧美韩日一区二区| 最新亚洲电影| 99在线热播精品免费99热| 欧美黄色日本| 亚洲精品欧美专区| 亚洲深夜福利视频| 欧美午夜精品一区| 中日韩美女免费视频网站在线观看| 一区二区成人精品 | 久久精品国产91精品亚洲| 久久久久久9| 国产一区亚洲| 久久激情久久| 免费人成精品欧美精品| 亚洲夫妻自拍| 亚洲免费av片| 欧美人与性禽动交情品 | 亚洲欧美日韩精品久久奇米色影视| 欧美午夜视频在线| 亚洲一区二区精品在线| 欧美亚洲一区二区三区| 国产欧美一区二区三区久久人妖 | 久久全国免费视频| 在线观看欧美| 亚洲乱码国产乱码精品精天堂| 欧美高清在线观看| 99视频有精品| 亚洲专区欧美专区| 国产欧美精品xxxx另类| 欧美专区福利在线| 免费精品视频| 亚洲最新在线| 久久激情网站| 亚洲第一中文字幕| 亚洲视频图片小说| 国产欧美日韩免费| 亚洲高清三级视频| 欧美破处大片在线视频| 亚洲视频在线观看一区| 久久激情综合网| 亚洲国产一区二区三区青草影视| 夜夜嗨av一区二区三区四季av| 欧美性猛片xxxx免费看久爱 | 国产视频一区二区三区在线观看| 久久疯狂做爰流白浆xx| 欧美激情成人在线| 亚洲图片你懂的| 久久只精品国产| 99精品国产高清一区二区| 欧美一区二区三区喷汁尤物| 精品不卡在线| 亚洲一区欧美二区| 国产专区欧美专区| 在线亚洲一区| 国内激情久久| 一区二区冒白浆视频| 国产视频精品xxxx| av不卡在线| 国产区在线观看成人精品| 亚洲精品一区二区三区av| 国产精品入口夜色视频大尺度 | 国产精品v一区二区三区| 亚洲成色777777女色窝| 欧美日韩免费看| 亚洲第一区中文99精品| 国产精品二区影院| 亚洲高清av| 国产精品自拍小视频| 99精品国产99久久久久久福利| 国产日韩在线视频| 一本综合精品| 含羞草久久爱69一区| 亚洲自拍都市欧美小说| 亚洲大胆人体在线| 欧美亚洲免费在线| 亚洲精品乱码| 另类人畜视频在线| 亚洲欧美日韩网| 欧美日韩一区精品| 亚洲黄色av一区| 国产一区二区三区四区hd| 亚洲欧美成人综合| 亚洲三级影片| 欧美**人妖| 久久精品男女|