摘 要:在基于WinCE構建的嵌入式系統中,EBoot下載操作系統鏡像時主要為以太網、USB線、串口下載的方式。由于目前SD卡的廣泛應用,通過SD卡下載操作系統鏡像則成為EBoot操作系統鏡像下載方式的很好的補充。這里基于東南大學國家專用集成電路系統工程技術研究中心SEP5010處理器平臺實現了EBoot下SD卡下載的功能。鏡像數據在SD卡中以文件系統文件的方式存在,方便了從開發工作站下載鏡像。實驗結果表明,該方案可以達到948 kB/s的數據平均下載速度。
關鍵詞:SD卡;SEP5010;鏡像下載;EBoot;FAT文件系統
中圖分類號:TP391文獻標識碼:B
文章編號:1004373X(2008)2202904
Realization of Download Function in EBoot via SD Card
ZHANG Bin,ZUO Chengbing,HUANG Shaomin
(National ASIC System Engineering Research Center,Southeast University,Nanjing,210096,China)
Abstract:EBoot program downloads OS image mainly via Ethernet,USB or serial port in the WinCE-based embedded systems.Because of SD card being widely used,downloading OS image via SD card can reinforce the download function in EBoot.Realization of download function in EBoot via SD card based on the SEP5010 platform developed by National ASIC System Engineering Research Center.The image is stored in the SD card as the file in a file system,which makes downloading image from the work station more convenient.Result of the experiment shows that the speed of downloading image is 948 kB/s on the average.
Keywords:SD card;SEP5010;image download;EBoot;FAT file system
1 引 言
嵌入式系統開發一般采用宿主機-目標機的形式,開發人員在宿主機上搭建開發環境完成對目標機的開發和調試。目標機上電后通常會運行一段加載操作系統的程序,稱之為Boot Loader。Boot Loader的主要目標就是加載并執行操作系統鏡像。Boot Loader加載操作系統鏡像可以采用通過以太網、USB線、串口線等媒介下載的方式,也可以采用從FLASH等本地存儲設備讀取鏡像的方式。由于在開發過程中需要頻繁地更新目標機上的鏡像,所以鏡像下載顯得尤為重要。考慮到產品應用,目前應用于便攜式嵌入式產品的SoC芯片內部基本上都不集成網卡控制器,所以在嵌入式開發中主流的下載方式為串口和USB下載。串口下載連接方式簡單,但速度是其最大的缺陷。USB下載的連接方式也很簡單,速度上也很好地彌補了串口下載的不足,但由于USB下載方式不但要開發目標機上的驅動而且要開發主機端應用程序。這樣不僅開發上增加了難度,還在使用上增加了些許不便。
本文基于東南大學國家專用集成電路系統工程技術研究中心SEP5010處理器平臺[1]實現了EBoot下通過SD卡下載操作系統鏡像的功能。EBoot為Windows CE平臺的Boot Loader。SD卡( Secure Digital Memory Card )是一種基于半導體快閃記憶器的記憶設備。SD卡具有體積小、功耗低、成本低、高可靠、可擦寫、非易失性等特點,目前已廣泛應用于MP3、數碼相機、數碼攝像機、手機等消費類電子嵌入式產品。本文提出的SD卡下載方式是EBoot下操作系統鏡像下載方式的很好補充,其下載速度可以達到MB/s的量級,并且操作非常簡單,只要宿主機上的鏡像通過讀卡器拷貝到SD卡中,再將SD卡插入到目標機,然后即可運行EBoot進行鏡像下載。這種方式不僅給開發帶來好處,還給以后用戶更新操作系統帶來便利。
2 設計背景
2.1 硬件背景
圖1所示為基于SEP5010處理器平臺的SD卡接口電路。SEP5010的SD控制器與SD卡主要通過6根線相連,SDCMD線傳輸SD控制器發出的命令信號以及SD卡發出的響應信號;SDCLK線是SD控制器為SD卡提供的時鐘信號;SDDAT0,SDDAT1,SDDAT2,SDDAT3號這4根線為SD卡和SD控制器提供數據傳輸的通道。圖1中的VCC3為SD卡提供電源。另外PA3,PD0是SEP5010的2個通用GPIO口,系統可以通過分別讀PA3,PD0的電平來獲知SD卡有沒有插入SD卡槽和寫保護。卡插上時PA3的電平為低電平,寫保護時PD0的電平為高電平。

2.2 軟件背景
2.2.1 EBoot
圖2為EBoot的一般執行順序[2]。在系統上電后EBoot便開始運行:
(1) 進行代碼重定位,把EBoot自身代碼從不能進行線形訪問的存儲介質拷貝到可以進行線形訪問的存儲介質,比如從FLASH ROM拷貝到ROM或RAM中。
(2) 對內存進行配置以滿足EBoot的運行需要以及初始化執行高級語言所需要的環境,一般高級語言為C語言。
(3) 將編譯器定義的可寫的數據段拷貝到RAM中,拷貝的原因為EBoot有時是在只讀媒體上執行而不能進行寫操作。
(4) 初始化外設的調試端口和一些設備端口并執行自檢,在自檢過程中會初始化一些硬件設備,以檢查它們是否可用。
(5) 自檢成功后則下載操作系統鏡像到RAM中,最后當操作系統鏡像下載成功后,就可跳轉到操作系統鏡像執行。
2.2.2 FAT文件系統
File Allocation Table(FAT)即文件分配表[3]。目前應用廣泛的FAT文件系統為FAT16和FAT32文件系統。FAT文件系統的分區由4個區域組成,具體分布如圖3所示。第一塊區域為保留區(Reserved Region),這塊區域的有效部分主要為BPB(BIOS Parameter Block),這個數據結構主要包含的是該FAT文件系統的基本信息。第二塊區域為FAT表區(FATRegion),其作用為將某一文件所占用的所有簇串接起來并通過簇號來映射該FAT分區的數據區。FAT表為規定大小的單元組合,該單元即“簇入口”,該單元在FAT表中的位置跟簇號對應。第三塊區域為根目錄區域(Root Directory Region),該區域只出現在FAT16分區中,FAT32分區的根目錄在數據區中,該區域由32 B大小的文件夾入口構成。文件夾入口的信息包括該文件夾入口的屬性。第四塊區域為文件和文件夾數據區域(File and Directory Region),該區域是以簇為單元組織。

3 軟件設計
SD卡下載方式在原有EBoot的基礎上主要完成的工作分為3個部分,第一個部分為SD卡的初始化,這一部分在Eboot中的硬件平臺初始化的步驟中完成;第二部分為打開操作系統鏡像文件(NK.bin),即獲得操作系統鏡像文件在SD卡中的具體位置以及大小,這一部分在EBoot中的預下載步驟中完成;第三部分為將操作系統鏡像從SD卡中下載到SDRAM指定位置。這一部分在Eboot中的下載步驟中完成。
3.1 SD卡的初始化
SD卡的初始化包括使得SD卡進入數據傳輸狀態以及獲得SD卡中的文件系統的基本信息。
使得SD卡進入數據傳輸狀態的主要進行的步驟如圖4所示。初始化GPIO(通用輸入/輸出口)是為了檢測SD卡有無插上和有無寫保護。發送一系列命令的過程如下[4]。
(1) 發送0號命令,0號命令的作用為重啟SD卡,使它進入空閑狀態。
(2) 發送41號應用命令,41號應用命令是一個以工作電壓范圍為參數的命令,如果SD卡的工作電壓與該范圍不匹配則進入非激活狀態,否則繼續運行,并將其運行條件寄存器作為響應的一部分發給SD控制器。
(3) 發送2號命令,其作用為命令SD卡發送包含SD卡基本信息的響應。
(4) 發送3號命令,其作用是命令SD卡將其相對地址作為響應的一部份發給SD控制器,然后SD卡進入等待狀態。
(5) 發送7號命令,其作用是將SD卡選中,并使其進入數據傳輸態。
(6) 發送6號應用命令,使得SD卡進入4位傳輸態,數據通過4根數據線傳輸。復位SD控制器的收發FIFO是為了清空其中的殘留數據,為之后的數據傳輸做準備。
獲得SD卡文件系統的基本信息主要通過讀取SD卡的第0扇區(扇區是文件系統中的概念,它就相當于SD卡規格書中的塊)來獲得,并將其存入到一個全局指針指向的數據結構中。

3.2 打開操作系統鏡像文件
打開操作系統鏡像即為找到操作系統鏡像的具體位置和大小,其具體過程如圖5所示。首先根據已獲取的SD卡文件系統的基本信息得到文件系統的根目錄的在SD卡中的位置;然后在這個根目錄中找到與操作系統鏡像的第一級路徑名匹配的文件夾入口,然后根據該入口信息找到下一目錄的位置,從該位置開始再找與第二級路徑名匹配的文件夾入口。這樣的過程一直重復直到找到與最后一級路徑名,也就是操作系統鏡像名稱匹配的文件夾入口。這樣就得到了操作系統鏡像的具體位置以及大小并將其存入到一個全局指針指向的數據結構中。
3.3 下載操作系統鏡像
目前設計中下載的鏡像為BIN格式文件。BIN格式文件組織,如圖6所示。它的開頭是7個字節的文件類型標識碼。標識碼之后的4個字為數據被下載到內存后在內存中的起始地址,而后的4個字節為下載到內存中的二進制鏡像大小。之后的所有數據由若干塊組成,每一塊分為4個部分,第一部分為4個字節,表示這一塊數據區被下載到內存后在內存中的起始位置;第二部分也為4個字節,表示這一塊數據區的大小;第三部分也為4個字節,表示數據區的校驗和;第四部分為數據區。將操作系統鏡像從SD卡下載到內存中時,程序會根據已獲得的操作系統鏡像的位置信息和大小來讀取操作系統鏡像。讀取按照下載鏡像文件的結構以塊為單位讀取,然后將塊中的數據區寫入到內存中相應的位置。

下載SD卡中的文件系統中的操作系統鏡像文件到內存中的過程跟讀取一般介質上的FAT文件系統中的某一文件的過程本質沒有差別。首先根據已獲得的操作系統鏡像的位置來下載其起始的簇的數據到內存中,下載完該簇后從FAT表中與該簇號對應的位置獲得下一簇的簇號來繼續下載,這樣一直持續到把操作系統鏡像的所有數據都下載完。當下載操作系統鏡像的最后一簇到內存中時,根據已獲得的操作系統鏡像的大小,下載完該簇的對應的文件結尾處的數據后就完成了操作系統鏡像文件的下載。
3.4 SD卡的讀取操作
由于SD卡讀取時最小的讀取單位是一個塊(Block),而文件系統提供給上一級讀取的函數的最小讀取單位為字節,這將遇到字節數與塊數的轉換的問題。在本設計,當上一級函數讀取數據時,將SD卡中所涉及的Block全部讀取到內存中的一個緩存區中,然后再從緩沖區中以字節為單位讀取數據。
4 性能比較
本文對串口、USB和SD這3種下載方式在下載速度方面的比較共進行了3次試驗,表1為實驗數據。在本實驗中下載的操作系統鏡像的大小為9 431 kB,SD卡的容量為1 Gb,文件系統為FAT16時簇大小為4 kB,文件系統為FAT32時簇大小為16 kB。
從表中可以看出,串口的平均下載速度為8.62 kB/s,USB下載(SEP5010的USB控制器為USB 1.1控制器)的下載速度為695.5 kB/s,SD卡下載時,如果卡中為FAT16文件系統的下載速度為947.8 kB/s,如果是FAT32文件系統,其下載速度為865.2 kB/s。測試結果表明,SD卡下載的速度不僅遠遠超過本平臺上串口的下載速度,而且也超過了本平臺上USB 1.1的下載速度。

從表1中還可以看出,相對于FAT32,SD卡中的文件系統為FAT16時的下載速度要更快。這是由于在代碼中文件是按簇來讀取的,當一個簇讀完時,在讀下一個簇之前會存在一個尋找下一簇的時間。對于一個遠大于簇大小的文件,在本設計中其在FAT32文件系統占用簇的數量大約是其在FAT16文件系統占用簇的數量4倍。則程序在FAT32文件系統中讀取該文件時,其占用的尋找下一簇的總時間也大約是其在FAT16文件系統中讀取該文件時占用的響應時間的4倍。所以在本設計中,相同的文件從FAT16文件系統中讀取所消耗時間少于從FAT32文件系統中讀取的時間。
5 結 語
本文在SEP5010處理器平臺上實現了在EBoot下通過SD卡下載鏡像文件方式。在該平臺上相對于其他下載方式,SD卡下載方式不僅在速度上有優勢,而且操作也相對簡單。操作的相對簡單不但給開發調試帶來便利,而且降低了在后續產品的軟件升級的門檻,方便了客服人員及用戶。
參考文獻
[1]國家專用集成電路系統工程技術研究中心.SEP5010用戶手冊[Z].2007.
[2]何宗健.Windows CE 嵌入式系統[M].北京:北京航空航天大學出版社,2006.
[3]SD Group.SD Memory Card Specifications[S].Version 1.0,2000.
[4]Microsoft Corporation.Microsoft Extensible Firmware Initiative FAT32 File System Specification[S].Version 1.03,2000.
[5]張冬泉.Windows CE實用開發技術\\.北京:電子工業出版社,2006.
[6]杜春雷.ARM體系結構與編程\\.北京:清華大學出版社,2003.
[7][英]Steve Furber.ARM SoC體系結構\\.田澤,譯.北京:北京航空航天大學出版社,2002.
[8]微軟公司.Microsoft Windows CE設備驅動程序開發指南\\.北京:北京希望電子出版社,1999.
[9]尤晉元,史美林.Windows 操作系統原理\\.北京:機械工業出版社,2001.
[10]傅曦.Windows CE嵌入式開發入門\\.北京:人民郵電出版社,2006.
作者簡介
張 彬 男,1982年出生,碩士研究生。研究方向為嵌入式系統設計。
左成兵 男,1982年出生,碩士研究生。研究方向為電路與系統、嵌入式系統設計。
黃少珉 男,1980年出生,博士研究生。研究方向為嵌入式系統低功耗技術。