摘 要:在基于WinCE構(gòu)建的嵌入式系統(tǒng)中,EBoot下載操作系統(tǒng)鏡像時主要為以太網(wǎng)、USB線、串口下載的方式。由于目前SD卡的廣泛應(yīng)用,通過SD卡下載操作系統(tǒng)鏡像則成為EBoot操作系統(tǒng)鏡像下載方式的很好的補(bǔ)充。這里基于東南大學(xué)國家專用集成電路系統(tǒng)工程技術(shù)研究中心SEP5010處理器平臺實(shí)現(xiàn)了EBoot下SD卡下載的功能。鏡像數(shù)據(jù)在SD卡中以文件系統(tǒng)文件的方式存在,方便了從開發(fā)工作站下載鏡像。實(shí)驗(yàn)結(jié)果表明,該方案可以達(dá)到948 kB/s的數(shù)據(jù)平均下載速度。
關(guān)鍵詞:SD卡;SEP5010;鏡像下載;EBoot;FAT文件系統(tǒng)
中圖分類號:TP391文獻(xiàn)標(biāo)識碼: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 引 言
嵌入式系統(tǒng)開發(fā)一般采用宿主機(jī)-目標(biāo)機(jī)的形式,開發(fā)人員在宿主機(jī)上搭建開發(fā)環(huán)境完成對目標(biāo)機(jī)的開發(fā)和調(diào)試。目標(biāo)機(jī)上電后通常會運(yùn)行一段加載操作系統(tǒng)的程序,稱之為Boot Loader。Boot Loader的主要目標(biāo)就是加載并執(zhí)行操作系統(tǒng)鏡像。Boot Loader加載操作系統(tǒng)鏡像可以采用通過以太網(wǎng)、USB線、串口線等媒介下載的方式,也可以采用從FLASH等本地存儲設(shè)備讀取鏡像的方式。由于在開發(fā)過程中需要頻繁地更新目標(biāo)機(jī)上的鏡像,所以鏡像下載顯得尤為重要??紤]到產(chǎn)品應(yīng)用,目前應(yīng)用于便攜式嵌入式產(chǎn)品的SoC芯片內(nèi)部基本上都不集成網(wǎng)卡控制器,所以在嵌入式開發(fā)中主流的下載方式為串口和USB下載。串口下載連接方式簡單,但速度是其最大的缺陷。USB下載的連接方式也很簡單,速度上也很好地彌補(bǔ)了串口下載的不足,但由于USB下載方式不但要開發(fā)目標(biāo)機(jī)上的驅(qū)動而且要開發(fā)主機(jī)端應(yīng)用程序。這樣不僅開發(fā)上增加了難度,還在使用上增加了些許不便。
本文基于東南大學(xué)國家專用集成電路系統(tǒng)工程技術(shù)研究中心SEP5010處理器平臺[1]實(shí)現(xiàn)了EBoot下通過SD卡下載操作系統(tǒng)鏡像的功能。EBoot為Windows CE平臺的Boot Loader。SD卡( Secure Digital Memory Card )是一種基于半導(dǎo)體快閃記憶器的記憶設(shè)備。SD卡具有體積小、功耗低、成本低、高可靠、可擦寫、非易失性等特點(diǎn),目前已廣泛應(yīng)用于MP3、數(shù)碼相機(jī)、數(shù)碼攝像機(jī)、手機(jī)等消費(fèi)類電子嵌入式產(chǎn)品。本文提出的SD卡下載方式是EBoot下操作系統(tǒng)鏡像下載方式的很好補(bǔ)充,其下載速度可以達(dá)到MB/s的量級,并且操作非常簡單,只要宿主機(jī)上的鏡像通過讀卡器拷貝到SD卡中,再將SD卡插入到目標(biāo)機(jī),然后即可運(yùn)行EBoot進(jìn)行鏡像下載。這種方式不僅給開發(fā)帶來好處,還給以后用戶更新操作系統(tǒng)帶來便利。
2 設(shè)計背景
2.1 硬件背景
圖1所示為基于SEP5010處理器平臺的SD卡接口電路。SEP5010的SD控制器與SD卡主要通過6根線相連,SDCMD線傳輸SD控制器發(fā)出的命令信號以及SD卡發(fā)出的響應(yīng)信號;SDCLK線是SD控制器為SD卡提供的時鐘信號;SDDAT0,SDDAT1,SDDAT2,SDDAT3號這4根線為SD卡和SD控制器提供數(shù)據(jù)傳輸?shù)耐ǖ?。圖1中的VCC3為SD卡提供電源。另外PA3,PD0是SEP5010的2個通用GPIO口,系統(tǒng)可以通過分別讀PA3,PD0的電平來獲知SD卡有沒有插入SD卡槽和寫保護(hù)。卡插上時PA3的電平為低電平,寫保護(hù)時PD0的電平為高電平。
2.2 軟件背景
2.2.1 EBoot
圖2為EBoot的一般執(zhí)行順序[2]。在系統(tǒng)上電后EBoot便開始運(yùn)行:
(1) 進(jìn)行代碼重定位,把EBoot自身代碼從不能進(jìn)行線形訪問的存儲介質(zhì)拷貝到可以進(jìn)行線形訪問的存儲介質(zhì),比如從FLASH ROM拷貝到ROM或RAM中。
(2) 對內(nèi)存進(jìn)行配置以滿足EBoot的運(yùn)行需要以及初始化執(zhí)行高級語言所需要的環(huán)境,一般高級語言為C語言。
(3) 將編譯器定義的可寫的數(shù)據(jù)段拷貝到RAM中,拷貝的原因?yàn)镋Boot有時是在只讀媒體上執(zhí)行而不能進(jìn)行寫操作。
(4) 初始化外設(shè)的調(diào)試端口和一些設(shè)備端口并執(zhí)行自檢,在自檢過程中會初始化一些硬件設(shè)備,以檢查它們是否可用。
(5) 自檢成功后則下載操作系統(tǒng)鏡像到RAM中,最后當(dāng)操作系統(tǒng)鏡像下載成功后,就可跳轉(zhuǎn)到操作系統(tǒng)鏡像執(zhí)行。
2.2.2 FAT文件系統(tǒng)
File Allocation Table(FAT)即文件分配表[3]。目前應(yīng)用廣泛的FAT文件系統(tǒng)為FAT16和FAT32文件系統(tǒng)。FAT文件系統(tǒng)的分區(qū)由4個區(qū)域組成,具體分布如圖3所示。第一塊區(qū)域?yàn)楸A魠^(qū)(Reserved Region),這塊區(qū)域的有效部分主要為BPB(BIOS Parameter Block),這個數(shù)據(jù)結(jié)構(gòu)主要包含的是該FAT文件系統(tǒng)的基本信息。第二塊區(qū)域?yàn)镕AT表區(qū)(FATRegion),其作用為將某一文件所占用的所有簇串接起來并通過簇號來映射該FAT分區(qū)的數(shù)據(jù)區(qū)。FAT表為規(guī)定大小的單元組合,該單元即“簇入口”,該單元在FAT表中的位置跟簇號對應(yīng)。第三塊區(qū)域?yàn)楦夸泤^(qū)域(Root Directory Region),該區(qū)域只出現(xiàn)在FAT16分區(qū)中,F(xiàn)AT32分區(qū)的根目錄在數(shù)據(jù)區(qū)中,該區(qū)域由32 B大小的文件夾入口構(gòu)成。文件夾入口的信息包括該文件夾入口的屬性。第四塊區(qū)域?yàn)槲募臀募A數(shù)據(jù)區(qū)域(File and Directory Region),該區(qū)域是以簇為單元組織。
3 軟件設(shè)計
SD卡下載方式在原有EBoot的基礎(chǔ)上主要完成的工作分為3個部分,第一個部分為SD卡的初始化,這一部分在Eboot中的硬件平臺初始化的步驟中完成;第二部分為打開操作系統(tǒng)鏡像文件(NK.bin),即獲得操作系統(tǒng)鏡像文件在SD卡中的具體位置以及大小,這一部分在EBoot中的預(yù)下載步驟中完成;第三部分為將操作系統(tǒng)鏡像從SD卡中下載到SDRAM指定位置。這一部分在Eboot中的下載步驟中完成。
3.1 SD卡的初始化
SD卡的初始化包括使得SD卡進(jìn)入數(shù)據(jù)傳輸狀態(tài)以及獲得SD卡中的文件系統(tǒng)的基本信息。
使得SD卡進(jìn)入數(shù)據(jù)傳輸狀態(tài)的主要進(jìn)行的步驟如圖4所示。初始化GPIO(通用輸入/輸出口)是為了檢測SD卡有無插上和有無寫保護(hù)。發(fā)送一系列命令的過程如下[4]。
(1) 發(fā)送0號命令,0號命令的作用為重啟SD卡,使它進(jìn)入空閑狀態(tài)。
(2) 發(fā)送41號應(yīng)用命令,41號應(yīng)用命令是一個以工作電壓范圍為參數(shù)的命令,如果SD卡的工作電壓與該范圍不匹配則進(jìn)入非激活狀態(tài),否則繼續(xù)運(yùn)行,并將其運(yùn)行條件寄存器作為響應(yīng)的一部分發(fā)給SD控制器。
(3) 發(fā)送2號命令,其作用為命令SD卡發(fā)送包含SD卡基本信息的響應(yīng)。
(4) 發(fā)送3號命令,其作用是命令SD卡將其相對地址作為響應(yīng)的一部份發(fā)給SD控制器,然后SD卡進(jìn)入等待狀態(tài)。
(5) 發(fā)送7號命令,其作用是將SD卡選中,并使其進(jìn)入數(shù)據(jù)傳輸態(tài)。
(6) 發(fā)送6號應(yīng)用命令,使得SD卡進(jìn)入4位傳輸態(tài),數(shù)據(jù)通過4根數(shù)據(jù)線傳輸。復(fù)位SD控制器的收發(fā)FIFO是為了清空其中的殘留數(shù)據(jù),為之后的數(shù)據(jù)傳輸做準(zhǔn)備。
獲得SD卡文件系統(tǒng)的基本信息主要通過讀取SD卡的第0扇區(qū)(扇區(qū)是文件系統(tǒng)中的概念,它就相當(dāng)于SD卡規(guī)格書中的塊)來獲得,并將其存入到一個全局指針指向的數(shù)據(jù)結(jié)構(gòu)中。
3.2 打開操作系統(tǒng)鏡像文件
打開操作系統(tǒng)鏡像即為找到操作系統(tǒng)鏡像的具體位置和大小,其具體過程如圖5所示。首先根據(jù)已獲取的SD卡文件系統(tǒng)的基本信息得到文件系統(tǒng)的根目錄的在SD卡中的位置;然后在這個根目錄中找到與操作系統(tǒng)鏡像的第一級路徑名匹配的文件夾入口,然后根據(jù)該入口信息找到下一目錄的位置,從該位置開始再找與第二級路徑名匹配的文件夾入口。這樣的過程一直重復(fù)直到找到與最后一級路徑名,也就是操作系統(tǒng)鏡像名稱匹配的文件夾入口。這樣就得到了操作系統(tǒng)鏡像的具體位置以及大小并將其存入到一個全局指針指向的數(shù)據(jù)結(jié)構(gòu)中。
3.3 下載操作系統(tǒng)鏡像
目前設(shè)計中下載的鏡像為BIN格式文件。BIN格式文件組織,如圖6所示。它的開頭是7個字節(jié)的文件類型標(biāo)識碼。標(biāo)識碼之后的4個字為數(shù)據(jù)被下載到內(nèi)存后在內(nèi)存中的起始地址,而后的4個字節(jié)為下載到內(nèi)存中的二進(jìn)制鏡像大小。之后的所有數(shù)據(jù)由若干塊組成,每一塊分為4個部分,第一部分為4個字節(jié),表示這一塊數(shù)據(jù)區(qū)被下載到內(nèi)存后在內(nèi)存中的起始位置;第二部分也為4個字節(jié),表示這一塊數(shù)據(jù)區(qū)的大??;第三部分也為4個字節(jié),表示數(shù)據(jù)區(qū)的校驗(yàn)和;第四部分為數(shù)據(jù)區(qū)。將操作系統(tǒng)鏡像從SD卡下載到內(nèi)存中時,程序會根據(jù)已獲得的操作系統(tǒng)鏡像的位置信息和大小來讀取操作系統(tǒng)鏡像。讀取按照下載鏡像文件的結(jié)構(gòu)以塊為單位讀取,然后將塊中的數(shù)據(jù)區(qū)寫入到內(nèi)存中相應(yīng)的位置。
下載SD卡中的文件系統(tǒng)中的操作系統(tǒng)鏡像文件到內(nèi)存中的過程跟讀取一般介質(zhì)上的FAT文件系統(tǒng)中的某一文件的過程本質(zhì)沒有差別。首先根據(jù)已獲得的操作系統(tǒng)鏡像的位置來下載其起始的簇的數(shù)據(jù)到內(nèi)存中,下載完該簇后從FAT表中與該簇號對應(yīng)的位置獲得下一簇的簇號來繼續(xù)下載,這樣一直持續(xù)到把操作系統(tǒng)鏡像的所有數(shù)據(jù)都下載完。當(dāng)下載操作系統(tǒng)鏡像的最后一簇到內(nèi)存中時,根據(jù)已獲得的操作系統(tǒng)鏡像的大小,下載完該簇的對應(yīng)的文件結(jié)尾處的數(shù)據(jù)后就完成了操作系統(tǒng)鏡像文件的下載。
3.4 SD卡的讀取操作
由于SD卡讀取時最小的讀取單位是一個塊(Block),而文件系統(tǒng)提供給上一級讀取的函數(shù)的最小讀取單位為字節(jié),這將遇到字節(jié)數(shù)與塊數(shù)的轉(zhuǎn)換的問題。在本設(shè)計,當(dāng)上一級函數(shù)讀取數(shù)據(jù)時,將SD卡中所涉及的Block全部讀取到內(nèi)存中的一個緩存區(qū)中,然后再從緩沖區(qū)中以字節(jié)為單位讀取數(shù)據(jù)。
4 性能比較
本文對串口、USB和SD這3種下載方式在下載速度方面的比較共進(jìn)行了3次試驗(yàn),表1為實(shí)驗(yàn)數(shù)據(jù)。在本實(shí)驗(yàn)中下載的操作系統(tǒng)鏡像的大小為9 431 kB,SD卡的容量為1 Gb,文件系統(tǒng)為FAT16時簇大小為4 kB,文件系統(tǒng)為FAT32時簇大小為16 kB。
從表中可以看出,串口的平均下載速度為8.62 kB/s,USB下載(SEP5010的USB控制器為USB 1.1控制器)的下載速度為695.5 kB/s,SD卡下載時,如果卡中為FAT16文件系統(tǒng)的下載速度為947.8 kB/s,如果是FAT32文件系統(tǒng),其下載速度為865.2 kB/s。測試結(jié)果表明,SD卡下載的速度不僅遠(yuǎn)遠(yuǎn)超過本平臺上串口的下載速度,而且也超過了本平臺上USB 1.1的下載速度。
從表1中還可以看出,相對于FAT32,SD卡中的文件系統(tǒng)為FAT16時的下載速度要更快。這是由于在代碼中文件是按簇來讀取的,當(dāng)一個簇讀完時,在讀下一個簇之前會存在一個尋找下一簇的時間。對于一個遠(yuǎn)大于簇大小的文件,在本設(shè)計中其在FAT32文件系統(tǒng)占用簇的數(shù)量大約是其在FAT16文件系統(tǒng)占用簇的數(shù)量4倍。則程序在FAT32文件系統(tǒng)中讀取該文件時,其占用的尋找下一簇的總時間也大約是其在FAT16文件系統(tǒng)中讀取該文件時占用的響應(yīng)時間的4倍。所以在本設(shè)計中,相同的文件從FAT16文件系統(tǒng)中讀取所消耗時間少于從FAT32文件系統(tǒng)中讀取的時間。
5 結(jié) 語
本文在SEP5010處理器平臺上實(shí)現(xiàn)了在EBoot下通過SD卡下載鏡像文件方式。在該平臺上相對于其他下載方式,SD卡下載方式不僅在速度上有優(yōu)勢,而且操作也相對簡單。操作的相對簡單不但給開發(fā)調(diào)試帶來便利,而且降低了在后續(xù)產(chǎn)品的軟件升級的門檻,方便了客服人員及用戶。
參考文獻(xiàn)
[1]國家專用集成電路系統(tǒng)工程技術(shù)研究中心.SEP5010用戶手冊[Z].2007.
[2]何宗健.Windows CE 嵌入式系統(tǒng)[M].北京:北京航空航天大學(xué)出版社,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實(shí)用開發(fā)技術(shù)\\.北京:電子工業(yè)出版社,2006.
[6]杜春雷.ARM體系結(jié)構(gòu)與編程\\.北京:清華大學(xué)出版社,2003.
[7][英]Steve Furber.ARM SoC體系結(jié)構(gòu)\\.田澤,譯.北京:北京航空航天大學(xué)出版社,2002.
[8]微軟公司.Microsoft Windows CE設(shè)備驅(qū)動程序開發(fā)指南\\.北京:北京希望電子出版社,1999.
[9]尤晉元,史美林.Windows 操作系統(tǒng)原理\\.北京:機(jī)械工業(yè)出版社,2001.
[10]傅曦.Windows CE嵌入式開發(fā)入門\\.北京:人民郵電出版社,2006.
作者簡介
張 彬 男,1982年出生,碩士研究生。研究方向?yàn)榍度胧较到y(tǒng)設(shè)計。
左成兵 男,1982年出生,碩士研究生。研究方向?yàn)殡娐放c系統(tǒng)、嵌入式系統(tǒng)設(shè)計。
黃少珉 男,1980年出生,博士研究生。研究方向?yàn)榍度胧较到y(tǒng)低功耗技術(shù)。