0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)詳解

h1654155282.3538 ? 來源:網(wǎng)絡(luò)整理 ? 2018-05-16 17:24 ? 次閱讀

WINCE操作系統(tǒng)簡介

WinCE操作系統(tǒng)是通用型的嵌入式操作系統(tǒng),它是一個(gè)開放的、可升級的32位嵌入式操作系統(tǒng),是基于掌上型電腦類的電子設(shè)備操作系統(tǒng),它是精簡的Windows 95,WindowsCE的圖形用戶界面相當(dāng)出色。它1996年開始發(fā)布Windows CE 1.0版本,2004年7月發(fā)布了Windows CE .NET 5.0版本,目前用得最多的是WindowsCE .NET 4.2版本,其發(fā)展速度也是很快的,功能_上自不必描述,它的主要應(yīng)用領(lǐng)域有PDA市場、PPC、Smartphone、 工業(yè)控制、醫(yī)療等。

操作系統(tǒng)移植的原因

為了更快的適應(yīng)市場需求,在實(shí)際開發(fā)過程中,我們更傾向于移植操作系統(tǒng)而不是重新開發(fā)操作系統(tǒng)。這樣不但可以節(jié)省時(shí)間,還能大大提高開發(fā)效率。

由于嵌入式系統(tǒng)是一個(gè)軟硬件緊密結(jié)合的系統(tǒng),因此操作系統(tǒng)移植包含兩個(gè)層面上的工作:一個(gè)層面是CPU級的,另一個(gè)層面是板級的。由于WinCE操作系統(tǒng)幾乎完全是用C語言編寫的,所以可移植到眾多的32位微處理器。上。這其中包括ARM、x86、MIPS 和SH等, 而且CPU級的移植通常由微軟或芯片制造商來完成,這會(huì)極大地減輕OEM廠商開發(fā)過程中移植操作系統(tǒng)的工作量,但板級層面的移植則還是需要由OEM廠商來完成的。

一般來說,一個(gè)WinCE系統(tǒng)包括四層結(jié)構(gòu):應(yīng)用程序、WinCE內(nèi)核映像、板級支持包(BSP)、硬件平臺(tái)。而基本軟件平臺(tái)則主要由WinCE系統(tǒng)內(nèi)核映像(OS Image)和板卡支持包(BSP) 兩部分組成。因?yàn)閃inCE系統(tǒng)是一個(gè)軟硬件緊密結(jié)合的系統(tǒng),因此即使CPU處理器相同,但是如果開發(fā)板上的外圍硬件不相同, 這個(gè)時(shí)候還是需要修改BSP來完成一個(gè)新的BSP。 因此換句話說,就是WinCE 的移植過程主要是改寫B(tài)SP的過程。

嵌入式OS負(fù)責(zé)嵌入式系統(tǒng)全部軟、硬件資源的分配、調(diào)度,控制和協(xié)調(diào)各部件的工作,與普通OS相比,嵌入式OS在系統(tǒng)實(shí)時(shí)高效性、硬件依賴性、軟件固化及應(yīng)用的專用性方面具有較為突出的特點(diǎn)。

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)

1、啟勵(lì)程序Bootloader的移植步驟

BootLoader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序(有的嵌入式CPU也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序),因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader來完成。

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)詳解

修改Bootloader是移植WinCE系統(tǒng)第一步,也是關(guān)鍵的一步。只有得到一個(gè)穩(wěn)定工作的啟動(dòng)程序,才能夠進(jìn)-步完成WinCE BSP的移植。Bootloader主要用來管理目標(biāo)平臺(tái)的啟動(dòng)過程,它是一段單獨(dú)的程序代碼,通過這段小程序可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖和下載操作系統(tǒng)的映像文件等,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),它- -般存放于目標(biāo)平臺(tái)的非易失存儲(chǔ)介質(zhì)中, 如ROM或Flash。

一般來說,對于Bootloader的功能,不同的場合區(qū)別很大。比如,在桌面Windows版的PC硬件平臺(tái),上,由于硬件啟動(dòng)根本就不通過Bootloader (而是通過BIOS),所以Bootloader就無需對CPU加電后的初始化做任何工作; 而在嵌入式WinCE平臺(tái)上,Bootloader 是最先被執(zhí)行的程序,所以就必須包括加電初始化程序,同時(shí)通常Bootloader必須包含下載WinCE映像文檔的功能。由于Bootloader會(huì)涉及到基本的硬件操作,如CPU的結(jié)構(gòu)、指令等,也會(huì)又涉及到以太網(wǎng)下載協(xié)議和映像文檔格式。因此,從零開發(fā)實(shí)現(xiàn)的話會(huì)需要相當(dāng)長的過程,通常的做法是利用微軟為每種類型的CPU提供的某種標(biāo)準(zhǔn)研發(fā)板的Bootloader例程。

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)詳解

根據(jù)我在這次項(xiàng)目移植得到的經(jīng)驗(yàn),Bootloader 的移植步驟主要是:①是修改相應(yīng)的dir、source 文件;②是修改makefile.inc;③是修改boot.bib,使其不與config.bib中的內(nèi)存分配造成沖突;④是改進(jìn)eboot, 因?yàn)閑boot燒寫NK.BIN的時(shí)候會(huì)查找BINFS分區(qū),然后把下載的image燒寫到BINFS分區(qū)。

2、OAL的移植步驟

OAL的全稱是OEMAdaption Layer,即原始設(shè)備制造商適配層。它是位于Windows CE內(nèi)核和目標(biāo)硬件平臺(tái)之間的一個(gè)代碼層,OAL主要負(fù)責(zé)WindowsCE與硬件通信,它與CPU、中斷、內(nèi)存、時(shí)鐘和調(diào)試口等核心設(shè)備相關(guān),也是OAL各個(gè)模塊代碼被編譯后(.lib) 和其它內(nèi)核庫鏈接到一一起形成Windows CE的內(nèi)核可執(zhí)行文檔NK.EXE的關(guān)鍵。簡單的說,OAL就是用來屏蔽CPU平臺(tái)的細(xì)節(jié)和抽象硬件功能,以實(shí)現(xiàn)操作系統(tǒng)內(nèi)核的可移植性。

從邏輯結(jié)構(gòu)上看,OAL位于WinCE操作系統(tǒng)的內(nèi)核與硬件之間,是連接WinCE系統(tǒng)與硬件的樞紐;從功能上看,OAL頗似桌面PC.上的BIOS,具有初始化設(shè)備、引導(dǎo)操作系統(tǒng)以及抽象硬件功能等作用。但與B10S不同的是,0AL隸屬于操作系統(tǒng),是操作系統(tǒng)的一部分。在WinCE6.0中,OAL首先起了穿針引線的作用,這一點(diǎn)可從其啟動(dòng)代碼看出來。第二個(gè)作用,暴露一些OEM函數(shù)供Kerel調(diào)用,具體哪些函數(shù)由OEMGLOBAL決定。為了方便BSP的升級,6.0基本保留了原來的函數(shù)結(jié)構(gòu)。所以,我們可以選擇5.0的BSP為參考,將其移植到6.0上來。PB6.0 的安裝目錄中也包涵一些BSP,其中DeviceEmulator就是模擬S3C2410平臺(tái)。所以,我們也可以此為參考??傊?,OAL代碼的來源不是問題。問題是如何快速編譯這些代碼,并驗(yàn)證其正確性。

下面將介紹快速調(diào)試OAL的方法。

首先Clone一個(gè)BSP,命名為2410Tiny。如果從5.0的BSP移植,需要修改相應(yīng)的目錄結(jié)構(gòu),在6.0中不存在CEC文件,需要做轉(zhuǎn)換。Clone完成后的BSP如下圖所示:

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)詳解

其中CATALOG目錄中存放的是2410Tiny.pbcxml,它是CE6.0中BSP的組織文件,類似5.0中的CEC文件。CESYSGEN存放了一個(gè)Makefile文件。

FILES目錄存放了平臺(tái)對應(yīng)的配置文件如BIB、REG等。這里我們將platform.bib和platform.reg中的內(nèi)容清空,注意是清空! Config.bib 的內(nèi)容確保準(zhǔn)確。

刪除SRC目錄下的Drivers目錄,并修改dirs文件,去掉Drivers行。如下圖所示:

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)詳解

至此,2410Tiny的BSP準(zhǔn)備完成,用此BSP定制一個(gè)OSDesign。在選擇模板時(shí)選CustomDevice (第二項(xiàng)),然后直接點(diǎn)擊完成,結(jié)束向?qū)?。進(jìn)入平臺(tái)屬性頁進(jìn)行設(shè)置,如下圖所示:

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)詳解

完成后,在Catalog Items中選中CEDB Database Engine項(xiàng)(我開始沒選擇該項(xiàng),結(jié)果編譯出了一堆錯(cuò)誤,將該項(xiàng)選中后,重新編譯,就順利通過了。)點(diǎn)擊編譯按鈕開始編譯系統(tǒng)。

等它編譯著吧,我們繼續(xù)往下看。之所以能把SRC目錄下的Drivers刪除,是因?yàn)槲覀儸F(xiàn)在還處于調(diào)試OAL的階段,可以暫時(shí)不考慮Drivers。只要有OAL和KERNEL,WinCE 就能跑起來。從這個(gè)角度來說,我覺得OAL用來抹平MCU的差異,而Drivers則是抹平外圍設(shè)備的差異。

大概10分鐘后,編譯完成了,最終生成的NK.bin文件有3M多,如下圖所示:

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)詳解

這時(shí),我們可以啟動(dòng)BOOTLOADER,完成相關(guān)配置后下載該NK.bin文件,如下圖所示:

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)詳解

3M多的NK,下載需要14秒左右。由于啟用了KITL,所以最終在DebugOutput中看到WinCE啟動(dòng)的相關(guān)信息,如下圖所示:

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)詳解

現(xiàn)在我們可以用PB6.0的Debug工具進(jìn)行簡單調(diào)試。先用Target Control查看系統(tǒng)運(yùn)行的進(jìn)程:

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)詳解

可以看到,目前WinCE6.0只運(yùn)行了兩個(gè)進(jìn)程,NK.exe對應(yīng)的就是我們的OAL.exe!再看看線程和模塊的情況:

WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)詳解

至此,可以認(rèn)為WinCE6.0 的OAL已經(jīng)可以正常工作。

從我在這次項(xiàng)目中得到的經(jīng)驗(yàn)來看, Windows CE安裝目錄的子目錄中都包含有OAL的部分源碼。OAL的移植實(shí)現(xiàn)應(yīng)是在fwxsc1.s. main.c、 Flash.c、Edeviceinit.c等文件中, 可根據(jù)實(shí)際需要修改相應(yīng)的代碼。在OAL移植過程中,主要是修改這幾個(gè)函數(shù):修改Startup.s函數(shù)、修改串口調(diào)試函數(shù)、修改OEMInit函數(shù)、修改系統(tǒng)時(shí)鐘函數(shù)和修改中斷處理函數(shù)等。實(shí)際上,大多數(shù)情況下開發(fā)工程師對OAL只要修改即可,甚至無需修改。

3、驅(qū)動(dòng)程序的移植和開發(fā)

驅(qū)動(dòng)程序(Device Drivers)是指能夠管理虛擬或者物理設(shè)備、協(xié)議、服務(wù)等的一段軟件模塊,操作系統(tǒng)是通過驅(qū)動(dòng)程序直接和硬件打交道的。設(shè)備驅(qū)動(dòng)程序能為WinCE提供設(shè)備控制功能, 包括: LCD/LED/VGA/SVGA顯示設(shè)備、鼠標(biāo)、鍵盤和觸摸屏等。根據(jù)我在這次項(xiàng)目移植得到的經(jīng)驗(yàn),建議設(shè)備驅(qū)動(dòng)程序的移植可通過Platform Builder創(chuàng)建一一個(gè)新的平臺(tái),然后再根據(jù)硬件平臺(tái)的需要插入和移除驅(qū)動(dòng)。一般來說,需要修改的文件有Plaform. Bib、Platform. reg及驅(qū)動(dòng)程序源代碼等。

4、平臺(tái)文件配置的修改

平臺(tái)配置文件包括源代碼配置文件和操作系統(tǒng)鏡像配置文件。源代碼配置文件主要是告訴Build工具需要用到的路徑,包括Dirs文件、Sources 文件和Makefile文件等。操作系統(tǒng)鏡像配置文件則主要用于給Makeimag工具生成操作系統(tǒng)鏡像,包括.bib、.reg、 .dat、 .db等文件。因此,在進(jìn)行BSP移植的時(shí)候,也需要對這些平臺(tái)配置文件進(jìn)行適當(dāng)?shù)男薷暮妥兏?/p>

5、移植時(shí)需特別注意的地方

很多嵌入式開發(fā)實(shí)踐都證明BSP移植是一個(gè)挺復(fù)雜、煩瑣的過程。因?yàn)閃inCE不同版本的BSP包的組織結(jié)構(gòu)是不同的,所以會(huì)導(dǎo)致很多鏈接庫無法找到或者是這些庫已經(jīng)被替換、刪除,唯一的方法是只有耐心的根據(jù)錯(cuò)誤提示來一一定位修改。

例如,在移植Bootloader時(shí)因?yàn)锽ootloader的下載、燒寫、啟動(dòng)鏡像過程會(huì)涉及到內(nèi)存地址,所以在處理各種入口地址時(shí)應(yīng)該要避免出現(xiàn)差錯(cuò)或內(nèi)存超出范圍,尤其是處理地址沖突時(shí)需要特別小心。還有在移植OAL時(shí), startup.s以及OEMInitDebugSerial兩個(gè)函數(shù)需要特別注意,因?yàn)樗鼈冎饕浅跏蓟布按?,系統(tǒng)運(yùn)行及驅(qū)動(dòng)調(diào)試的基礎(chǔ),如果硬件配置以及調(diào)試串口有改變,則需要適當(dāng)?shù)男薷?/p>

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    8966

    瀏覽量

    365007
  • WinCE
    +關(guān)注

    關(guān)注

    2

    文章

    121

    瀏覽量

    48962
收藏 人收藏

    評論

    相關(guān)推薦

    [推薦]深圳WINCE專業(yè)平臺(tái)開發(fā)團(tuán)隊(duì),提供WINCE平臺(tái)的硬件定制,內(nèi)核驅(qū)動(dòng)定制

    深圳WINCE專業(yè)平臺(tái)開發(fā)團(tuán)隊(duì),我們致力提供WINCE平臺(tái)的硬件定制,內(nèi)核驅(qū)動(dòng)定制一條龍服務(wù):********三星
    發(fā)表于 04-12 09:46

    ARM7&ARM9雙核平臺(tái)技術(shù)分析

    的應(yīng)用。 宣稱支持ARM7和ARM9的雙內(nèi)核,主要原因是因?yàn)樗麄兊?b class='flag-5'>技術(shù)能力較弱,無法完成µCOS-II ARM9上的
    發(fā)表于 04-13 09:47

    MicrowindowsARM平臺(tái)移植

    盡管Linux 的arch目錄下有對ARM處理器支持的代碼,但由于Linux是X86平臺(tái)上實(shí)現(xiàn)的,很多方面都沒有考慮到ARM平臺(tái)的特殊性。
    發(fā)表于 06-01 09:38

    基于嵌入式ARM & WinCE 的小型監(jiān)控系統(tǒng)的設(shè)計(jì)

    本文介紹了嵌入式操作系統(tǒng)WinCE技術(shù)特性、構(gòu)建基于WinCE 的嵌入式平臺(tái)以及構(gòu)建的平臺(tái)
    發(fā)表于 06-10 14:02 ?22次下載

    uCOSIILPC2210上的移植詳解

    uCOSIILPC2210上的移植詳解:嵌入式實(shí)時(shí)操作系統(tǒng)目標(biāo)處理器平臺(tái)上的移植是嵌入式軟件
    發(fā)表于 12-31 15:11 ?144次下載

    WinCE系統(tǒng)應(yīng)用程序的可移植性問題

    由于桌面Windows絕大多數(shù)情況下運(yùn)行于X86平臺(tái)上,也就不存在不同平臺(tái)的可移植性問題,以下通過WinCE系統(tǒng)下訪問物理地址,來看看如何
    發(fā)表于 03-17 11:10 ?1793次閱讀
    <b class='flag-5'>WinCE</b>系統(tǒng)應(yīng)用程序的可<b class='flag-5'>移植</b>性問題

    基于ARM-WinCE平臺(tái)的時(shí)鐘同步設(shè)計(jì)

    時(shí)鐘同步 是分布式系統(tǒng)的核心技術(shù)之一,為實(shí)現(xiàn)基于ARM-WinCE嵌入式系統(tǒng)平臺(tái)的測試儀器組建分布式測試系統(tǒng),介紹IEEE1588精確時(shí)鐘協(xié)議基本原理的基礎(chǔ)上,提出了使用具有IEEE
    發(fā)表于 06-08 16:48 ?51次下載
    基于<b class='flag-5'>ARM-WinCE</b><b class='flag-5'>平臺(tái)</b>的時(shí)鐘同步設(shè)計(jì)

    基于嵌入式ARM&WinCE的小型監(jiān)控系統(tǒng)的設(shè)計(jì)

    本文介紹了嵌入式操作系統(tǒng)WinCE技術(shù)特性、構(gòu)建基于WinCE的嵌入式平臺(tái)以及構(gòu)建的平臺(tái)上開
    發(fā)表于 04-18 14:12 ?1次下載

    ARM平臺(tái)設(shè)備WinCE下UART配置

      UART串口作為最為常用的工業(yè)設(shè)備接口之一被廣泛且大量的應(yīng)用,本文就基于Toradex ARM平臺(tái)設(shè)備為例介紹WinCE下UART配置。
    發(fā)表于 09-16 11:51 ?0次下載

    基于ARMWinCE的掌紋鑒別系統(tǒng)

    基于ARMWinCE的掌紋鑒別系統(tǒng)
    發(fā)表于 09-25 08:40 ?9次下載
    基于<b class='flag-5'>ARM</b>與<b class='flag-5'>WinCE</b>的掌紋鑒別系統(tǒng)

    《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第23章、Linux設(shè)備驅(qū)動(dòng)移植

    《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第23章、Linux設(shè)備驅(qū)動(dòng)移植
    發(fā)表于 10-27 10:58 ?9次下載
    《Linux設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>開發(fā)<b class='flag-5'>詳解</b>》第23章、Linux設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>的<b class='flag-5'>移植</b>

    uCOS_ARM移植要點(diǎn)詳解

    uCOS_ARM移植要點(diǎn)詳解
    發(fā)表于 10-31 11:25 ?11次下載
    uCOS_<b class='flag-5'>ARM</b><b class='flag-5'>移植</b>要點(diǎn)<b class='flag-5'>詳解</b>

    詳解μC/OS-IIARM平臺(tái)移植

    C/OS-IIARM平臺(tái)移植是一個(gè)重要的學(xué)習(xí)過程,有助于提高對RTOS的認(rèn)識與理解,從而提高嵌入式工作者的理論與技術(shù)水平。C/OS-II
    發(fā)表于 11-01 10:02 ?13次下載

    基于ARM-WinCE平臺(tái)時(shí)鐘同步的設(shè)計(jì)(全解析)

    時(shí)鐘同步是分布式系統(tǒng)的核心技術(shù)之一,為實(shí)現(xiàn)基于ARM-WinCE嵌入式系統(tǒng)平臺(tái)的測試儀器組建分布式測試系統(tǒng),介紹IEEE1588精確時(shí)鐘協(xié)議基本原理的基礎(chǔ)上,提出了使用具有IEEE1
    發(fā)表于 11-28 10:56 ?9次下載
    基于<b class='flag-5'>ARM-WinCE</b><b class='flag-5'>平臺(tái)</b>時(shí)鐘同步的設(shè)計(jì)(全解析)

    嵌入式設(shè)計(jì)經(jīng)驗(yàn):ARM-WinCE平臺(tái)時(shí)鐘同步設(shè)計(jì)

    時(shí)鐘同步是分布式系統(tǒng)的核心技術(shù)之一,為實(shí)現(xiàn)基于ARM-WinCE嵌入式系統(tǒng)平臺(tái)的測試儀器組建分布式測試系統(tǒng),介紹IEEE1588精確時(shí)鐘協(xié)議基本原理的基礎(chǔ)上,提出了使用具有IEEE1
    發(fā)表于 05-18 15:10 ?1625次閱讀
    嵌入式設(shè)計(jì)經(jīng)驗(yàn):<b class='flag-5'>ARM-WinCE</b><b class='flag-5'>平臺(tái)</b>時(shí)鐘同步設(shè)計(jì)