WinCE系統下BootLoader的開(kāi)發(fā)

發(fā)布時(shí)間:2010-4-15 14:52    發(fā)布者:qgq
關(guān)鍵詞: bootloader , WINCE
引言

WindowsCE.NET是微軟公司向嵌入式領(lǐng)域推出的一款操作系統。它最大程度繼承了桌面版Windows操作系統的豐富功能,同時(shí)又副入了許多新特性,以適應嵌入式領(lǐng)域的實(shí)際情況和要求。無(wú)論是商業(yè)應用需求,還是人們的多媒體消費需求,都能被采用CE操作系統的設備很輕松的滿(mǎn)足。最新的.NET版本較之3.0版本,在實(shí)時(shí)性和穩定性上有大幅度提高,開(kāi)始廣泛地被平板電腦、數碼相機、彩屏手機、PDA等多種高性能產(chǎn)品所采用。

但是,CE并不是一個(gè)通用的安裝版操作系統,在形形色色的嵌入式硬件設備世界里, 一款CE系統通常只會(huì )針對某一種硬件平臺生成。所以,作為原始設備生產(chǎn)商,必須根據自己的硬件平臺和應用場(chǎng)合定制CE,最主要的工作就是編寫(xiě)適合于自己的板級支持包(BSP)。在BSP中,包含了一個(gè)重要的組成部分——BootLoader。創(chuàng )建一未功能完善的 BootLoader,是開(kāi)發(fā)WinCE系統的第一步,也是極為關(guān)鍵的一步。本文將結合開(kāi)發(fā)實(shí)例,介紹如何開(kāi)發(fā)適合于自己硬件的BootLoader。

1 定制CE操作系統的基本知識

定制CE操作系統是采用微軟的工具軟件:Platform Builder(PB)。該工具能夠根據用戶(hù)的需求,選擇構建具有不同內核功能的CE系統。同時(shí),它也是一個(gè)集成的編譯環(huán)境,可以為所有CE支持的CPU目標代碼編譯C/C++程序。前面所說(shuō)的BSP和BootLoader程序就是在該環(huán)境下編譯,并整合到CE系統中去的。一旦成功地編譯了一個(gè)CE系統,就會(huì )得到一個(gè)名為nk.bin的映像文件。只要將該文件下載到目標平臺(device端),就能夠運行CE了。

2 BootLoader

BootLoader 是一段單獨的程序代碼,它存放于目標平臺的非易失存儲介質(zhì)中,如ROM或Flash。在開(kāi)發(fā)CE的過(guò)程中,它主要用于啟動(dòng)硬件和下載nk.bin到目標板上,并有一定的監控作用。

圖1描述了WinCE的BSP基本結構以及BootLoader所處的位置。



一般來(lái)說(shuō),對于BootLoader的功能要求并不是嚴格定義的,不同的場(chǎng)合區別很大。比如,在PC的硬件平臺上,由于硬件啟動(dòng)根本就不是通過(guò) BootLoader(而是通過(guò)BIOS),所以BootLoader就不需要對CPU加電后的初始化做任何工作;而在筆者的開(kāi)發(fā)平臺(MIPS32)上,BootLoader是最先被執行的程序,所以就必須包括加電初始化程序。通常,BootLoader必須包含下載CE映像文件的功能。另外,管理監控硬件設備通常也是必須的,因為這可以極大地方便工程開(kāi)發(fā)。由于BootLoader涉及到基本的硬件操作,如CPU的結構、指令等,同時(shí)又涉及到以太網(wǎng)下載協(xié)議(TFTP,當然也可能通過(guò)串口)和策軟設定的映像文件格式。因此從零實(shí)現的話(huà),會(huì )需要相當長(cháng)的過(guò)程。好在微軟為每種類(lèi)型的CPU都提供了某種標準開(kāi)發(fā)板的BootLoader例程,因此通常的做法是:從這些例程中尋找與硬件平臺最接近的作為標本程序,然后再從自己的硬件平臺上入手做相應的改動(dòng)。一些新的評估板可能會(huì )由第三方的廠(chǎng)商來(lái)提供Bootloader。如果硬件平臺是從這樣的基板設計而來(lái)的話(huà),那么最好去尋求這些廠(chǎng)商獲取 Bootloader來(lái)移植,以減少工作量。

筆者使用的硬件平臺基于MIPS32架構,下載端口采用的是以太網(wǎng)口,同時(shí)還具備一個(gè)串口,主機相連,通過(guò)超級終端對該平臺加以控制。該平臺是參考AMD的一款標準估計板設計的,BootLoader以該板的BootLoader為參考進(jìn)行了移植。

3 編寫(xiě)BootLoader源程序

前面已經(jīng)提到,由于硬件的不同,BootLoader的功能可能有多有少,此處筆者以自己開(kāi)發(fā)BootLoader的過(guò)程進(jìn)行敘述。

圖2是筆者BootLoader的工程流程。



3.1 啟動(dòng)部分

首先要實(shí)現初臺化硬件的功能。在參考板的BootLoader目錄下,會(huì )發(fā)現一些.s文件,可能會(huì )是init.s或者是reset.s等,這樣的文件是CPU加電后最先執行的代碼。由于此處是用匯編語(yǔ)言編寫(xiě)的,所以與CPU關(guān)系緊密。一般參考板的 CPU與開(kāi)發(fā)平臺的CPU會(huì )是相同或者是同一個(gè)架構的。筆者使用的是屬于同一種CPU的情況,所以對寄存器的定義和初始化流程都可以不加改動(dòng)。接著(zhù)就是對于平臺配置的分析,包括平臺存儲空間的分配、外圍設備的工作設定等。一般這里的區別是非常大的。所以必須要對CPU寄存器的值作相應設定。這部分工作可能需要CPU提供商方面的幫助。

應該說(shuō),這部分工作是BootLoader的一大重點(diǎn),但由于和實(shí)際的硬件非常大,所以不可能做進(jìn)一步的詳細敘述。

3.2 主控部分

從這一部分開(kāi)始,均用C語(yǔ)言編寫(xiě)。

為了增加BootLoader 對平臺的控制,一般BootLoader都會(huì )設計成支持命令輸入的方式,通過(guò)串口來(lái)接收用戶(hù)的命令。這種機制中,如果參考板有Loader支持的話(huà),那么可以自己添加有實(shí)用價(jià)值的命令,完成一些需要的功能。

從圖2中可以看出,一般在平臺調試完畢后,可以在不用人工干預的情況下自動(dòng)加載CE(這也是 BootLoader必需的功能之一);而在調試階段,基本上是通過(guò)Loader所支持的命令來(lái)進(jìn)行操作的。提供足夠豐富的命令,能極大簡(jiǎn)化和全面測試開(kāi)發(fā)平臺。如表1所列,是筆者Loader所提供的命令。

表1
命令 說(shuō)明
Help_______ 列出所有支持的命令并加以說(shuō)明
Eboot _____從開(kāi)發(fā)臺下載CE映像并加載
Write______向某一內存地址寫(xiě)入數據
Read______ 顯示某一內存地址的數據
Jump______跳轉到某一地址執行程序
Xmodem___從計算機的超級終端接收以Xmodem協(xié)議傳送的文件
Toy_______測試平臺CPU的計數器是否運轉
Flash______擦除或者更新Flash中的數據
Tlbread____顯示CPU的所有TLB表
Tlbwrit____ 設置CPU的TLB
Macaddr___設置CPU的MAC地址
Seti_______設置平臺的IP地址

這些命令涉及到平臺調試的各個(gè)方面,像內存檢測、Flash操作、文件下載等。借助于這些命令,不僅可以完成硬件平臺的部分測試,還完成了作為CE的 BootLoader程序最為重要的一個(gè)功能——下載CE映像。

3.3 下載部分

在用Platform Builder編譯生成CE的映像文件后,接下來(lái)就需要將該文件下載到目標板上。如果說(shuō)硬件調試功能可以由其它的程序代替而不放入BootLoader 中,但是下載映像文件卻是BootLoader必需的功能。

CE映像文件通常叫做nk.bin,它是Windows CE二進(jìn)制數據格式文件,不僅包含了有效的程序代碼,還有按照一定規則加入的控制信息。當然,也可以選擇生成.sre格式的代碼文件,但是相于對前一種格式,它的代碼要長(cháng)很多,所需要的下載時(shí)間也更長(cháng)。在這里,我們以下載.bin格式的文件來(lái)說(shuō)明下載的實(shí)現。

首先看一下圖3所示的BootLoader下載部分的流程圖。



通常,在Platform Builder自帶的代碼中,會(huì )包含完成TFTP連接的了基本的函數。
*初始化TFTP連接:用函數EbootInitTFtp()和EbootInitTFtpd()完成。
*登記解析.bin格式數據的回調函數:用EbootTFtpdServerRegister()完成。
*發(fā)出連接請求:用EbootSendBootme()完成。
*接收主機端發(fā)出的數據包:用EbootTFtpReceiver()完成。

在這里,需要重點(diǎn)說(shuō)明的有兩點(diǎn)。
①對于接收數據包的函數EbootTFtpReceiver(),它只能處理已經(jīng)存入內存的以太網(wǎng)包,也就是說(shuō),從以太網(wǎng)控制器接收數據的功能必須要用戶(hù)去完成。由于這一功能與硬件密切相關(guān),所以不能使用PB自帶的函數來(lái)完成。
②函數EbootTFtpdServerRegister()會(huì )登記一個(gè)回調函數,一般用戶(hù)可以自己定義這個(gè)函數,該函數用于完成,bin格式數據的解析和保存,有效數據至目的地RAM。PB有自帶的例程函數可作參考。一般來(lái)說(shuō),如果目的地就是RAM的話(huà),直接參考例程函數即可。但是如果目的地就是Flash,不要直接存入Flash(字為單位),應先存入內存中待下載完畢以后再導入Flash。當然,這種方法必須要有足夠的內存。如果沒(méi)有足夠的內存,也可以緩存部分數據后,分段寫(xiě)入Flash。

3.4 支持DOC

對于 WinCE操作系統而言,豐富的多媒體功能是其一大特點(diǎn),使其成為當前消費類(lèi)電子產(chǎn)品操作系統中的一個(gè)不錯選擇。但是隨之而來(lái)的問(wèn)題是,系統的容易已經(jīng)大大超過(guò)出了傳統嵌入式系統上百KB的數量級。一般來(lái)說(shuō),如果選擇了圖形界面和漢語(yǔ)支持,容量一般會(huì )超過(guò)16MB。DOC(Disk On Chip)則提供了一種相對廉價(jià)的大存儲容量的解決方案。

DOC本質(zhì)上是一種加以軟件控制的NAND格式的Flash,通過(guò)TFFS這一軟件層提供對WinCE的支持。

由于DOC不能像內存一樣被直接訪(fǎng)問(wèn),所以其加載WinCE的過(guò)程有些特殊,必須要在BootLoader中加入專(zhuān)門(mén)的代碼,才能使用DOC來(lái)存放WinCE映像文件。

為了說(shuō)明怎樣在Loader文件中提供對DOC的支持,先看一下如何采用DOC系統啟動(dòng)CE,如圖4所示。



從圖4可以看出,當采用DOC作為存儲體的時(shí)候,實(shí)際上是在啟動(dòng)的時(shí)候把映像文件拷貝到內存中執行。為了實(shí)現這一啟動(dòng)過(guò)程,就必須涉及到DOC的讀寫(xiě)操作。首先要從M-SYSTEM的網(wǎng)站上獲取DOC的BOOT軟件開(kāi)發(fā)包。在這個(gè)開(kāi)發(fā)包里,提供了一系列DOC的操作函數。將此開(kāi)發(fā)包嵌入到CE的BootLoader中去,然后按照圖4的步驟,調用相應的讀寫(xiě)函數完成這一過(guò)程。對于開(kāi)發(fā)包中相關(guān)函數的說(shuō)明,筆者就不具體介紹了,可以參考開(kāi)發(fā)包的說(shuō)明文檔。

4 BootLoader的編譯、鏈接和下載

BootLoader 程序可以通過(guò)PB的集成編譯環(huán)境編譯鏈接,控制文件為.bib文件,下面是一個(gè)簡(jiǎn)單的BootLoader的.bib文件。
MEMORY
CLI 9fc00000 00050000 RAMIMAGE
RAM 80080000 00070000 RAM
CONFIG
COMPRESSION=ON
SRE=ON
ROMSTART=9fc00000
ROMSIZE=00020000
ROMWIDTH=32
ROMOFFET=000000
MODULES
Nk.exe $(_FLATRELEASEDIR).exe CLI

MEMORY部分定義了生成的映像文件的目標地址,以及程序運行可以使用的內存空間。

CONFIG部分COMPRESSION是否對目標代碼進(jìn)行壓縮;SRE是否生成格式為sre的目標代碼;ROMSTART與ROMSIZE、ROMWIDTH、ROMOFFSET共同定義了開(kāi)發(fā)平臺上存放BootLoader物理介質(zhì)的起始地址、大小、寬度和偏移量。

MODULES部分定義了BootLoader所包含的文件,一般就只有一個(gè)文件:cli.exe。

編譯過(guò)程中,首先用命令build-c編譯生成文件cli.exe,然后用 romimage cli.bib命令產(chǎn)生最后的映像文件cli.sre。

對于BootLoader文件的下載;有很多種方法:可以通過(guò)仿真器下載;也可以通過(guò)其它調試程序下載;還可以直接燒寫(xiě)到Flash中。需要說(shuō)明的一點(diǎn)是,這些方法可能會(huì )要求不同的映像格式。在PB環(huán)境下,可以生成的有.sre格式、純二進(jìn)制格式(用于直接燒寫(xiě)Flash)以及和CE映像一樣的.bin格式。

結語(yǔ)

從CE的 BootLoader開(kāi)發(fā)流程可以看出,BootLoader在完成下載CE映像和加載映像的主要功能外,還具有一些調試硬件的功能。當然,這些功能不是必需的,隨不同的用戶(hù)可能有自己的定義。但是不管Loader的功能設計得多么簡(jiǎn)單或者是多么復雜,都是在開(kāi)發(fā)CE系統中不可跳過(guò)的一環(huán)。實(shí)際上,由于 Loader有和CE系統交互數據的區域,所以還有對CE啟動(dòng)過(guò)程的控制作用,也是PB控制目標板CE啟動(dòng)的一個(gè)窗口?梢哉f(shuō),一個(gè)功能齊全的 Loader,不論是對調試硬件,還是控制和檢測CE系統,甚至是成為產(chǎn)品之后的維護工作,都是大有幫助的。
 
編寫(xiě) BootLoader是開(kāi)發(fā)WinCE系統第一步,也是關(guān)鍵的一步。只有得到一個(gè)穩定工作的Loader程序,才能夠更進(jìn)一步開(kāi)發(fā)WinCE的BSP,直至最后整個(gè)系統的成功

參考文獻

   1. Microsoft Corporation Microsoft Windows CE
   2. The Windows CE Technology Tutorial 2001
   3. DiskOnChip Boot Software Development Kit 2003

作 者:北方交通大學(xué) 白浪 張思東  
來(lái) 源:單片機與嵌入式系統應用 2004(2)
本文地址:http://selenalain.com/thread-10494-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页