WinCE系統下BootLoader的開發

2021-04-12 17:22:05 字數 3194 閱讀 1838

wince系統下bootloader的開發

未知]

[]

引言windows ce.net是微軟公司向嵌入式領域推出的一款作業系統。它最大程度繼承了桌面版windows作業系統的豐富功能,同時又副入了許多新特性,以適應嵌入式領域的實際情況和要求。無論是商業應用需求,還是人們的多**消費需求,都能被採用ce作業系統的裝置很輕鬆的滿足。最新的.net版本較之3.0版本,在實時性和穩定性上有大幅度提高,開始廣泛地被平板電腦、數位相機、彩屏手機、pda等多種高效能產品所採用。

但是,ce並不是乙個通用的安裝版作業系統,在形形色色的嵌入式硬體裝置世界裡, 一款ce系統通常只會針對某一種硬體平台生成。

所以,作為原始裝置生產商,必須根據自己的硬體平台和應用場合定製ce,最主要的工作就是編寫適合於自己的板級支援包(bsp)。在bsp中,包含了乙個重要的組成部分——bootloader。建立一未功能完善的bootloader,是開發wince系統的第一步,也是極為關鍵的一步。本文將結合開發例項,介紹如何開發適合於自己硬體的bootloader。

1 定製ce作業系統的基本知識

2 bootloader

圖1描述了wince的bsp基本結構以及bootloader所處的位置。

3 編寫bootloader源程式

前面已經提到,由於硬體的不同,bootloader的功能可能有多有少,此處筆者以自己開發bootloader的過程進行敘述。圖2是筆者bootloader的工程流程。

3.1 啟動部分

首先要實現初台化硬體的功能。在參考板的bootloader目錄下,會發現一些.s檔案,可能會是init.s或者是reset.s等,這樣的檔案是cpu加電後最先執行的**。由於此處是用組合語言編寫的,所以與cpu關係緊密。一般參考板的cpu與開發平台的cpu會是相同或者是同乙個架構的。筆者使用的是屬於同一種cpu的情況,所以對暫存器的定義和初始化流程都可以不加改動。接著就是對於平台配置的分析,包括平台儲存空間的分配、外圍裝置的工作設定等。一般這裡的區別是非常大的。所以必須要對cpu暫存器的值作相應設定。這部分工作可能需要cpu提供商方面的幫助。

應該說,這部分工作是bootloader的一大重點,但由於和實際的硬體非常大,所以不可能做進一步的詳細敘述。

3.2 主控部分

從這一部分開始,均用c語言編寫。

為了增加bootloader對平台的控制,一般bootloader都會設計成支援命令輸入的方式,通過串列埠來接收使用者的命令。這種機制中,如果參考板有loader支援的話,那麼可以自己新增有實用價值的命令,完成一些需要的功能。

從圖2中可以看出,一般在平台除錯完畢後,可以在不用人工干預的情況下自動載入ce(這也是bootloader必需的功能之一);而在除錯階段,基本上是通過loader所支援的命令來進行操作的。提供足夠豐富的命令,能極大簡化和全面測試開發平台。如表1所列,是筆者loader所提供的命令。

表1 命   令 

通常,在platform builder自帶的**中,會包含完成tftp連線的了基本的函式。

*初始化tftp連線:用函式ebootinittftp()和ebootinittftpd()完成。

*登記解析.bin格式資料的**函式:用eboottftpdserverregister()完成。

*發出連線請求:用ebootsendbootme()完成。

*接收主機端發出的資料報:用eboottftpreceiver()完成。

在這裡,需要重點說明的有兩點。

①對於接收資料報的函式eboottftpreceiver(),它只能處理已經存入記憶體的乙太網包,也就是說,從乙太網控制器接收資料的功能必須要使用者去完成。由於這一功能與硬體密切相關,所以不能使用pb自帶的函式來完成。

3.4 支援doc

對於wince作業系統而言,豐富的多**功能是其一大特點,使其成為當前消費類電子產品作業系統中的乙個不錯選擇。但是隨之而來的問題是,系統的容易已經大大超過出了傳統嵌入式系統上百kb的數量級。一般來說,如果選擇了圖形介面和漢語支援,容量一般會超過16mb。doc(disk on chip)則提供了一種相對廉價的大儲存容量的解決方案。

doc本質上是一種加以軟體控制的nand格式的flash,通過tffs這一軟體層提供對wince的支援。

由於doc不能像記憶體一樣被直接訪問,所以其載入wince的過程有些特殊,必須要在bootloader中加入專門的**,才能使用doc來存放wince映像檔案。

為了說明怎樣在loader檔案中提供對doc的支援,先看一下如何採用doc系統啟動ce,如圖4所示。從圖4可以看出,當採用doc作為儲存體的時候,實際上是在啟動的時候把映像檔案拷貝到記憶體中執行。為了實現這一啟動過程,就必須涉及到doc的讀寫操作。首先要從m-system的**上獲取doc的boot軟體開發包。在這個開發包裡,提供了一系列doc的操作函式。將此開發包嵌入到ce的bootloader中去,然後按照圖4的步驟,呼叫相應的讀寫函式完成這一過程。對於開發包中相關函式的說明,筆者就不具體介紹了,可以參考開發包的說明文件。

bootloader程式可以通過pb的整合編譯環境編譯鏈結,控制檔案為.bib檔案,下面是乙個簡單的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是否對目標**進行壓縮;sre是否生成格式為sre的目標**;romstart與romsize、romwidth、romoffset共同定義了開發平台上存放bootloader物理介質的起始位址、大小、寬度和偏移量。

modules部分定義了bootloader所包含的檔案,一般就只有乙個檔案:cli.exe。

編譯過程中,首先用命令build-c編譯生成檔案cli.exe,然後用romimage cli.bib命令產生最後的映像檔案cli.sre。

結語編寫bootloader是開發wince系統第一步,也是關鍵的一步。只有得到乙個穩定工作的loader程式,才能夠更進一步開發wince的bsp,直至最後整個系統的成功。

WinCE系統下BootLoader的開發

引言 windows ce.net是微軟公司向嵌入式領域推出的一款作業系統。它最大程度繼承了桌面版windows作業系統的豐富功能,同時又副入了許多新特性,以適應嵌入式領域的實際情況和要求。無論是商業應用需求,還是人們的多 消費需求,都能被採用ce作業系統的裝置很輕鬆的滿足。最新的.net版本較之3...

WinCE系統下BootLoader的開發

引言 windows ce.net是微軟公司向嵌入式領域推出的一款作業系統。它最大程度繼承了桌面版windows作業系統的豐富功能,同時又副入了許多新特性,以適應嵌入式領域的實際情況和要求。無論是商業應用需求,還是人們的多 消費需求,都能被採用ce作業系統的裝置很輕鬆的滿足。最新的.net版本較之3...

WinCE系統USB Mass Storage實現

在談wince的usb mass storage實現之前,首先要具備以下條件 1.開發板支援usbclient裝置。2.開發板上至少有一種儲存裝置可以被用來對映為u盤。現在的處理器一般都帶有usb client或者是usb otg控制器,並且bsp中都有相應的驅動。對於儲存裝置來說,nandflas...