一種新的BootLoader啟動引導方式研究
| [日期:2008-11-24] |
來源:單片機與嵌入式系統應用 作者:西安電子科技大學 李波 |
[字型:大 中 小] |
引 言
BootLoader通常稱為“系統的引導載入程式”,是系統加電或複位後執行的第一段程式碼。這段程式的主要任務是,實現硬體裝置初始化並建立記憶體空間的映射圖,從而將系統的軟硬體環境帶到一個合適的狀態,以便為最終叫用作業系統核心或使用者應用程式準備好正確的環境。通常,BootLoader包含兩種不同的載入和啟動引導方式,即啟動載入方式和下載方式。
①啟動載入(boot loading)方式。這種引導方式也稱為“自主(autonomous)引導方式”,也即BootLoader從目標機的某個固態存放裝置上將作業系統載入到RAM中並引導運行,整個過程並沒有使用者的介入。這種引導方式是BootLoader的正常工作模式下普遍採用的一種引導方式。因此在嵌入式產品發布的時候,BootLoader一般以這種引導方式對核心代碼進行啟動引導。
②下載(down loading)方式。在這種引導方式下目標機上的BootLoader將通過串口串連或網路連接等通訊手段從主機下載檔案,如下載應用程式、資料檔案、核心映像等。從主機下載的檔案通常首先被BootLoader儲存到目標機的RAM中,然後再被BootLoader寫到目標機上的固態存放裝置中,其後完成核心的引導運行。BootLoader的這種引導方式通常在系統研發和更新時使用。在嵌入式系統研發階段,現有的BootLoader下載引導方式又可根據載入途徑的不同細分為以下幾種:
①通過Ethernet網口從宿主機下載核心到目標板,從而實現軟體系統啟動;
②通過串口從宿主機下載核心到目標板從而實現軟體系統啟動;
③直接從Flash中提取已儲存的核心,從而實現軟體系統的啟動。
總結以上幾種引導方式會發現,它們有些共同的弊端;在系統調試時需要進行宿主機與目標板間的硬體線路的實際串連,使用起來不夠方便,且燒片的速度比較緩慢,調試的效率不高;硬體方面需要大容量的Flash的支援,增加了研發成本;進行核心更新時顯得不夠靈活。為此,採用可移動的儲存介質對系統核心進行儲存(如SD卡、CF卡等),從而實現對系統核心的靈活調試和引導。這種引導方式的好處是,在調試時無需把宿主機和目標板進行硬體串連,提高了調試的效率,使用起來更便捷、更靈活;進行核心更新時顯得更為靈活,只需把更新核心轉存到指定目錄,此外它的實現也比較簡單。進行這方面的改進時只需做以下工作:在硬體方面,增加針對特定移動儲存介質的硬體電路,而在中大型系統中,有關移動儲存介質的硬體電路(如SD卡、CF卡等相關的電路)是現成的,所以硬體部分也可忽略;在BootLoader程式內部,只需添加對移動儲存介質(如CF卡、SD卡等)基於檔案系統進行儲存訪問的指令。按此思路,在已有硬體平台的基礎上針對行動裝置SD卡對原有BootLoader進行了改進。下面介紹實現過程。
1 硬體平台
本次改進測試的硬體平台是由英蓓特公司開發的基於LPC2294 ARM控制器的LPC22EB06一I實驗平台。其上的主要功能模組有:
①2 MB的Flash、1 MB的SRAM(可擴充到4 MB)、256B具有I2C介面的E2PROM等儲存空間;
②2個RS232(其中一路可接Modem)、RS485、CAN等通訊匯流排介面;
③2個調試介面:LPT和JTAG調試介面;
④支援CF卡、SD/MMC等移動儲存介質;
⑤支援128×128真彩顯示。
圖1是其硬體功能框圖。
2 BOOtLoader的改進設計
2.1 原有BootLoader功能
原來的:BootLoader具有如下功能:
①串口下載功能,通過串口下載核心到指定RAM區;
②Flash燒寫功能,從RAM區燒寫資料到Flash中;
③資料區內塊搬移功能;
④其他功能。其指令封裝結構如下:
2.2 BootLoader改進實驗
此次改進就是在原有BootLoader的基礎上,增加對移動儲存介質SD卡以FAT格式進行讀取資料的指令來實現的。命令封裝如下:
其功能是,在SD卡中把指定目錄下的核心檔案提取到SDRAM地區中,從而完成核心的載入。
另增加3條輔助指令,一條完成SD卡的格式化,另一條完成對系統核心的儲存,最後一條完成對系統核心的啟動載入。命令封裝如下:
其中,CMD_TBL_SD_FORMAT的功能是完成對SD卡的格式化,CMD_TBL_SD_STORE的功能是把SDRAM地區中的核心代碼備份到SD卡的固定儲存區,CMD_TBL_SD_LDAD的功能是把SD卡的固定儲存區中的核心代碼載入到指定的SDRAM地區中。
下面分析一下其基於FAT檔案系統的具體讀取和備份方法。首先看一下FAT檔案系統的基本結構。FAT檔案系統的整體結構大體由4大部分組成:MBR區(主引導記錄區)、DBR區(DOS引導記錄區)、FAT區(檔案配置表區,FATl為主檔案分配表區,FAT2為備份檔案分配表區)和DATA區(資料區,包含FDT區——檔案目錄表區)。FAT檔案系統結構如下:
其各個地區基扇區地址(把MBR區的基扇區地址作為O)計算如下:
DBR區的基扇區地址=MBR基扇區地址+63
FAT表的基扇區地址=DBR的基扇區地址+保留扇區數
FDT區基扇區地址=每FAT表扇區數×FAT表個數+(FDT區的開始簇號一2)×每簇扇區數+FAT表基扇區地址。(簇是系統進行檔案管理的單位,FAT表中的每一項對應一個簇,檔案的存取按簇進行,一簇包含若干個扇區。)
從FAT檔案系統的組織圖可以看出,從SD卡中讀取系統核心代碼資料到指定的RAM區比較容易,就是根據系統核心檔案名稱在檔案系統中進行尋找定位,隨後完成讀取。對於核心代碼的備份和載入,需要在深入分析FAT檔案系統的組織圖的基礎上對SD卡格式化作一些處理。在格式化時,通過設定MBR區和DBR區的資料實現不對SD卡儲存區的最末8MB地區(根據實際需要可增減)作格式化處理的目的,即把它置為RAW區。所以系統核心備份的實現,就是把系統核心代碼通過SD卡的寫入指令填充到RAW區。系統核心的載入是從RAW區直接讀取備份的核心代碼。
3 總 結
本文所述的核心載入啟動引導方式已經過實踐驗證。它實現了目標板與宿主機間硬體線路串連的完全脫離.為系統調試者提供了便利,有效地提高了系統調試的效率;與此同時,它還能方便地實現系統的線上更新。可以說要進行系統啟動引導設計,此方法是一個不錯的選擇。最後說明一點,本文介紹的BootLoader改進方法是在LCP2294晶片開發的LPC22EB06一I實驗平台上完成的。由於BootLoader與處理器的體繫結構和具體嵌入式板級裝置的配置密切相關,若要在其他的處理器晶片或平台上採用上述方法,還需對BootLoader中與處理器體繫結構相關的代碼作適當的修改。這部分不是本文探討的主要內容,所以在此不再詳述,若有讀者還想詳細瞭解相關內容,請查閱相關論文或書籍。