《電子技術(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亚洲国产精品_日韩亚洲一区二区
一区在线视频观看| 国产精品xvideos88| 亚洲区一区二区三区| 国语自产精品视频在线看8查询8| 国产精品黄色| 欧美午夜性色大片在线观看| 欧美日韩国产不卡| 欧美另类videos死尸| 欧美另类亚洲| 欧美精品一区二区三区蜜臀| 欧美精品久久一区二区| 欧美老女人xx| 欧美日韩一区二区三区四区五区 | 先锋影院在线亚洲| 亚洲欧美福利一区二区| 午夜精品久久久久久久白皮肤| 亚洲一区二区三区四区在线观看 | 亚洲免费在线观看视频| 亚洲天堂av在线免费观看| 亚洲特级片在线| 午夜视频在线观看一区二区| 久久精品国产亚洲a| 亚洲国产精品一区二区久| 亚洲欧洲一区二区三区在线观看| 亚洲人永久免费| 一本综合精品| 亚洲一区国产精品| 欧美一级午夜免费电影| 久久综合久色欧美综合狠狠| 欧美成人中文字幕| 欧美日韩在线三级| 国产精品永久免费| 狠狠综合久久| 亚洲国内精品| 中文亚洲视频在线| 久久av一区二区三区亚洲| 亚洲高清久久| 一区二区三区精密机械公司| 欧美一区二区在线观看| 毛片基地黄久久久久久天堂| 欧美日韩国产系列| 国产精品视频网站| 黄色精品网站| 日韩午夜av| 欧美一区二视频| 日韩天堂在线视频| 亚洲欧美一区二区三区极速播放| 久久久777| 免费国产自线拍一欧美视频| 欧美日韩一二三四五区| 国产日韩综合| 亚洲欧洲日本专区| 亚洲欧美日韩第一区| 亚洲人妖在线| 欧美一级大片在线观看| 老司机精品久久| 欧美视频在线观看| 黄色成人av网站| 亚洲最黄网站| 久久精品视频在线播放| 宅男66日本亚洲欧美视频| 久久精品30| 欧美日韩午夜激情| 国外成人性视频| 一区二区精品| 亚洲人屁股眼子交8| 性一交一乱一区二区洋洋av| 巨乳诱惑日韩免费av| 欧美性猛交一区二区三区精品| 国产综合婷婷| 这里只有精品在线播放| 亚洲国产欧美在线| 亚洲性图久久| 久久理论片午夜琪琪电影网| 欧美日韩在线播放一区| 尤妮丝一区二区裸体视频| 亚洲欧美国产不卡| 一区二区三区视频在线观看| 久久伊人精品天天| 国产九九精品视频| 亚洲免费精彩视频| 亚洲精品国产精品国产自| 欧美一区激情视频在线观看| 欧美日韩在线播放三区四区| 亚洲电影免费观看高清| 久久99伊人| 欧美永久精品| 国产精品xnxxcom| 亚洲理论在线观看| 91久久精品国产| 久久久久久一区| 国产精品系列在线| 99精品欧美一区| 亚洲久久视频| 免费人成网站在线观看欧美高清| 国产亚洲制服色| 亚洲欧美久久| 亚洲免费视频在线观看| 欧美日韩一区二区三区在线观看免| 亚洲第一精品福利| 久久精品色图| 久久精品人人爽| 国产女主播视频一区二区| 中文一区二区| 亚洲一区二区三区免费在线观看| 欧美日韩高清在线观看| 亚洲激情国产| 亚洲日韩视频| 欧美精品一级| 亚洲伦理在线免费看| 日韩视频在线你懂得| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产精品久久久久av免费| 亚洲黄色成人| 亚洲精品国产精品乱码不99按摩| 久久香蕉国产线看观看网| 国产一区二区三区免费在线观看| 午夜精品久久久久久久白皮肤 | 99精品欧美一区二区三区| 99精品免费| 欧美色视频在线| 一本大道久久a久久精二百| 中日韩男男gay无套 | 欧美四级电影网站| 亚洲美女在线一区| 国产精品99久久久久久久久久久久| 欧美日韩精品一本二本三本| 亚洲美女福利视频网站| 亚洲视频欧美视频| 国产精品扒开腿爽爽爽视频| 一区二区欧美精品| 亚洲欧美一区二区激情| 国产精品婷婷| 性感少妇一区| 久久久久久穴| 一区免费观看| 亚洲免费观看在线视频| 欧美日韩免费精品| 亚洲一区二区四区| 久久久在线视频| 亚洲国产精品第一区二区| 亚洲精品一区二区三区蜜桃久 | 在线看欧美视频| 日韩视频不卡| 国产精品电影观看| 亚洲欧美中文日韩在线| 久久婷婷影院| 亚洲欧洲一级| 先锋影音国产一区| 国内成人精品2018免费看 | 国产精品视频99| 久久精品日产第一区二区| 欧美成人自拍| 亚洲视频一起| 久久男人资源视频| 亚洲免费观看高清在线观看 | 久久蜜臀精品av| 亚洲韩国日本中文字幕| 亚洲一二三级电影| 国产综合亚洲精品一区二| 99精品国产在热久久下载| 国产精品一区二区三区四区五区| 亚洲国产精品黑人久久久| 欧美日韩激情小视频| 亚洲欧美日韩精品久久久| 裸体素人女欧美日韩| 亚洲免费福利视频| 久久久久久综合| 亚洲看片网站| 久久久www成人免费精品| 日韩西西人体444www| 久久精品国产69国产精品亚洲 | 免费一区视频| 亚洲香蕉网站| 欧美成人一区二免费视频软件| 亚洲私人影院| 欧美国产精品劲爆| 午夜欧美电影在线观看| 欧美日产在线观看| 久久er精品视频| 欧美午夜不卡在线观看免费| 亚洲电影av在线| 国产精品毛片大码女人| 最新亚洲视频| 国产日产欧美精品| 在线亚洲欧美视频| 一区在线观看| 欧美一区二区久久久| 亚洲三级电影在线观看| 久久精品亚洲热| 一区二区三区不卡视频在线观看| 巨胸喷奶水www久久久免费动漫| 亚洲午夜在线| 欧美日韩精品三区| 亚洲激情第一区| 国产深夜精品| 亚洲欧美日韩国产| 亚洲伦理网站| 欧美国产日韩亚洲一区| 久久精品91|