原堯燊, 原峰山 , 姜 充
(1.東南大學(xué) 自動化學(xué)院,南京 210096;2.廣州航海學(xué)院 信息與通信工程系,廣州 510725;3.東南大學(xué) 機(jī)械工程學(xué)院,南京 211189)
嵌入式系統(tǒng)開發(fā)中U-boot移植中兩個關(guān)鍵參數(shù)的配置*
原堯燊1, 原峰山2, 姜 充3
(1.東南大學(xué) 自動化學(xué)院,南京 210096;2.廣州航海學(xué)院 信息與通信工程系,廣州 510725;
3.東南大學(xué) 機(jī)械工程學(xué)院,南京 211189)
嵌入式系統(tǒng)開發(fā)是針對各種特定場合實際應(yīng)用的,引導(dǎo)程序和操作系統(tǒng)都要針對不同的具體應(yīng)用予以定制;在系統(tǒng)移植過程中,引導(dǎo)程序U-boot關(guān)鍵參數(shù)的配置是至關(guān)重要的;論及的參數(shù)配置對合適的開發(fā)平臺選擇和基于NAND Flash的程序存儲、數(shù)據(jù)存儲有積極意義 。
嵌入式系統(tǒng);U-boot;參數(shù)配置
近幾年,ICT技術(shù)(Information Communication Technology)被人們廣泛地提及,從其內(nèi)涵看,將電子、通信、網(wǎng)絡(luò)技術(shù)、計算機(jī)技術(shù)等充分融合是該項技術(shù)的最重要的特征,尤其是智能技術(shù)、物聯(lián)網(wǎng)技術(shù)、無線網(wǎng)絡(luò)技術(shù)的日益興起更是將ICT技術(shù)的發(fā)展及應(yīng)用推倒了更高的層次。比如在人工智能方面,重慶工商大學(xué)計算機(jī)科學(xué)與信息工程學(xué)院的朱超平實現(xiàn)了“基于ARM9處理器的快速人臉檢測門禁系統(tǒng)設(shè)計[1]”。在物聯(lián)網(wǎng)應(yīng)用方面,重慶工商大學(xué)重慶市發(fā)展信息管理工程技術(shù)研究中心的王洪建等以節(jié)電節(jié)水為目標(biāo),建設(shè)了“基于物聯(lián)網(wǎng)技術(shù)的能耗監(jiān)測管理平臺[2]”。在無線網(wǎng)絡(luò)技術(shù)應(yīng)用方面,重慶工商大學(xué)計算機(jī)科學(xué)與信息工程學(xué)院的李昔華、代小紅實現(xiàn)了“基于無線監(jiān)控網(wǎng)絡(luò)的智能輸液系統(tǒng)設(shè)計”,利用 ZigBee技術(shù)實現(xiàn)了輸液中心無線傳感器網(wǎng)絡(luò)的組網(wǎng),解決了安裝布線、治療過程無人值守、護(hù)士多點監(jiān)管等難題,實現(xiàn)了中心監(jiān)控、移動監(jiān)測,安全警示與應(yīng)急處置相結(jié)合的綜合管理功能,提升了醫(yī)護(hù)人員的工作效率,大大降低了治療安全風(fēng)險[3]。所有這些技術(shù)的應(yīng)用都與嵌入式系統(tǒng)的應(yīng)用密不可分,因為傳統(tǒng)的通用計算機(jī)越來越不能滿足人們專業(yè)化應(yīng)用的需要,嵌入式技術(shù)就成為上述各項技術(shù)中最重要也是最關(guān)鍵的技術(shù)。嵌入式技術(shù)的開發(fā)過程中的一個重要環(huán)節(jié)就是引導(dǎo)加載程序Boot Loader的移植,U-boot是嵌入式技術(shù)開發(fā)中應(yīng)用最廣泛的引導(dǎo)加載程序,將就U-boot移植過程中的兩個關(guān)鍵參數(shù)設(shè)置問題予以討論。
在嵌入式系統(tǒng)中,以嵌入式Linux系統(tǒng)為例,固化進(jìn)存儲設(shè)備的系統(tǒng)及文件體系結(jié)構(gòu)如圖1所示,其中Boot loader是引導(dǎo)加載程序,Kernel是操作系統(tǒng)內(nèi)核,Root file system是根文件系統(tǒng)。從圖1中可以看出,引導(dǎo)加載程序占據(jù)著最底端的位置,是系統(tǒng)加電后在操作系統(tǒng)內(nèi)核運(yùn)行之前首先運(yùn)行的一小段程序,主要功能是硬件設(shè)備的初始化、建立內(nèi)存空間的映射圖、確立系統(tǒng)軟硬件環(huán)境狀態(tài)、為調(diào)用操作系統(tǒng)內(nèi)核做好準(zhǔn)備,提供一個控制臺及一個命令集在操作系統(tǒng)運(yùn)行前操控硬件設(shè)備。U-boot是目前幾種比較流行的Boot loader中使用作為廣泛的一種,它的主要特點是:開放源代碼、支持多種操作系統(tǒng)內(nèi)核、支持多種處理器系列、有較高的可靠性和穩(wěn)定性、豐富的設(shè)備驅(qū)動源碼、高度靈活的功能設(shè)置、豐富的開發(fā)調(diào)試文檔和強(qiáng)大的網(wǎng)絡(luò)技術(shù)支持等。
圖1 固態(tài)存儲設(shè)備系統(tǒng)及文件體系結(jié)構(gòu)空間分布圖
可以說,嵌入式系統(tǒng)能否正常運(yùn)行,很重要的一個方面就是配置好Boot loader,由于U-boot在業(yè)界使用有廣泛的影響力,本文將重點分析嵌入式系統(tǒng)定制時U-boot關(guān)鍵參數(shù)的配置方面的問題,以期對嵌入式系統(tǒng)開發(fā)人員有所啟發(fā)。
跟所有的Boot loader 一樣,U-boot 的啟動分為stage1和stage2兩大部分,依賴于CPU體系結(jié)構(gòu)的代碼(如CPU初始化代碼等)通常都放在stage1中,通常用匯編語言實現(xiàn),而stage2則通常用C 語言來實現(xiàn),這樣可以實現(xiàn)復(fù)雜的功能,而且有更好的可讀性和移植性。以基于ARM9的S3C2440芯片為例,過程如下:
stage1,是以匯編語言來寫的,對于s3c2440芯片對應(yīng)到cpu/arm920t/start.s 文件,實現(xiàn)的主要任務(wù)是:設(shè)置CPU的模式為管理模式;關(guān)閉看門狗(Watch dog),屏蔽所有中斷;設(shè)置CPU的頻率;將U-boot代碼段和初始化數(shù)據(jù)段復(fù)制到RAM;配置內(nèi)存區(qū)控制寄存器和??臻g;進(jìn)入C 語言代碼部分。
Stage2, 是用C 語言代碼來實現(xiàn)引導(dǎo)功能的,在lib/arm/board.c 中的start_armboot 是C 語言開始的函數(shù),也是整個啟動代碼中C 語言的主函數(shù)。這個函數(shù)調(diào)用一系列的初始化函數(shù)然后進(jìn)入主U-boot命令行,進(jìn)入命令循環(huán)(即整個boot 的工作循環(huán)),接受用戶從串口輸入的命令,然后進(jìn)行相應(yīng)的工作,如圖2所示[4]。
圖2 U-boot第二階段流程圖
從兩個階段的功能和結(jié)構(gòu)來看,它們的綜合作用就是為啟動操作系統(tǒng)的內(nèi)核Kernel做好充分的準(zhǔn)備,只是分工不同。其中依賴于CPU體系結(jié)構(gòu)的代碼(如CPU初始化代碼等)通常都放在stage1中用匯編語言實現(xiàn),而stage2用于實現(xiàn)復(fù)雜的功能,常用C語言來實現(xiàn),這樣可以有更好的移植性和可讀性。
U-boot雖然支持多種CPU,支持的操作系統(tǒng)也很多,但是由于嵌入式系統(tǒng)開發(fā)是建立在各種專門化應(yīng)用場合的基礎(chǔ)上的,不同于通用的計算機(jī)系統(tǒng)。嵌入式系統(tǒng)引導(dǎo)程序和操作系統(tǒng)都要針對不同的具體應(yīng)用給與專門的定制,否則不僅硬件和軟件資源會使用不合理,而且也容易在運(yùn)行過程中發(fā)生問題。因此,U-boot移植過程中某些關(guān)鍵參數(shù)的配置是至關(guān)重要的,以下將針對開發(fā)過程中常見的兩個最重要參數(shù)配置予以論述。
公開的U-boot的源代碼默認(rèn)是不針對任何目標(biāo)平臺的,但是在實際開發(fā)和使用時,即需要將U-boot移植到一個特定的目標(biāo)平臺時,需要生成針對目標(biāo)平臺的配置文件。U-boot支持的芯片可以在include/configs/下面找到。如果要編譯針對s3c2440芯片的U-boot.bin,就需要在U-boot源碼根路徑下執(zhí)行[4]:
make smdk2440_config
這樣U-boot源碼就是針對smdk2440平臺了。由于make命令會調(diào)用Makefile,與此相關(guān)的部分含義如下:
smdk2440_config是U-boot源碼根路徑下的Makefile的一個目標(biāo),相關(guān)的代碼如下:
“smdk2440_config :unconfig /*負(fù)責(zé)清理以前的配置信息*/
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2440 samsung s3c24x0
/* MKCONFIG就是源碼頂級目錄下的mkconfig文件,在執(zhí)行make smdk2440_config時系統(tǒng)執(zhí)行mkconfig這個腳本,arm arm920t smdk2440 NULL s3c24x0是傳遞這個腳本的五個參數(shù)。*/
unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp /*清理以前的配置信息的具體內(nèi)容*/ ”
mkconfig這個腳本程序?qū)嶋H上生成了兩個文件,一個是include/config.h,另一個是include/config.mk。在文件config.mk里面則有如下內(nèi)容:
ARCH=arm
CPU=arm920t
BOARD=smdk2440
VENDOR=NULL
SOC=s3c24x0
上面的代碼定義了5個變量,分別是體系結(jié)構(gòu)(arm)、處理器核(arm920t)、目標(biāo)板(smdk2440)、供應(yīng)商(NULL)、片上系統(tǒng)(s3c24x0)。也就是說,Makefile會判斷include下面有沒有config.mk這個文件,如果有就包含這個文件,這就相當(dāng)于在Makefile里面定義了ARCH、CPU、BOARD、VENDOR和SOC這5個變量。這樣U-boot就知道自己是針對哪個目標(biāo)平臺的了。
現(xiàn)在幾乎所有的嵌入式開發(fā)板上都有Flash,一般的情況下NOR Flash存儲容量小,與RAM接口相同,可隨機(jī)訪問,特別是進(jìn)行讀操作的效率非常高,常用于保存程序。而NAND Flash存儲量較大,接口基于I/O,并且順序訪問,擦寫較快,常用于保存數(shù)據(jù)。但是實際上,由于NAND Flash性能的提高和價格的降低,基本上廠家所制造的開發(fā)板都采用單一的NAND Flash,所以U-boot對NAND Flash的支持是至關(guān)重要的。
要想實現(xiàn)U-boot對NAND Flash的支持,需要進(jìn)行的配置如下:
首先在配置文件include/configs/ smdk2440.h(頭文件名隨著開發(fā)板有所不同)定義宏:
#define CONFIG_COMMANDS (CONFIG_CMD_DFL |
…
CFG_CMD_NAND
…
復(fù)合芯棒徑向抗剪切、抗壓性能較弱[7-10]??ň€器夾嘴靠與導(dǎo)線間的摩擦力正常工作,導(dǎo)線承受較大的徑向握緊力。為了評估導(dǎo)線被夾持時其芯棒是否發(fā)生損壞,采取芯棒徑向耐壓試驗及仿真來確定芯棒的徑向耐壓能力。
同時還要定義宏確定NAND基地址、設(shè)備數(shù)、芯片數(shù)等:
#define CFG_NAND_BASE 0 /*定義基地址,但通常在board_nand_init中會重新指定 */
#define CFG_MAX_NAND_DEVICE 1 /*NAND Flash設(shè)備數(shù)目為1 */
#define NAND _MAX_ CHIPS 1 /*每個NAND Flash設(shè)備由1個 NAND Flash芯片組成*/
另外,還要增加在include/s3c2440.h中的數(shù)據(jù)結(jié)構(gòu)和GetBase_NAND函數(shù)[5]:
typedef struct {
s3c2440_REG32 NFCONF;
s3c2440_REG32 NFCONT;
…
)s3c2440_NAND;
static inline s3c2440_NAND * const s3c2440_GetBase_NAND(void)
{
renturn (s3c2440_NAND * const) s3c2440_NAND_BASE;
}
對應(yīng)的在cpu/arm93t/s3c2440目錄下新建一個nand_flash.c文件可以調(diào)用board_nand_init函數(shù)初始化NAND Flash設(shè)備。文件可以仿照s3c2410的在drivers/mtd/nand/s3c2410.c文件寫,它就是用于對NAND Flash初始化的。與NAND Flash相關(guān)的參數(shù)配置完畢才能保證程序存儲和數(shù)據(jù)存儲的使用。
U-boot由于在嵌入式行業(yè)有著最廣泛的認(rèn)可,開放代碼資源也十分豐富,支持的操作系統(tǒng)、CPU、設(shè)備驅(qū)動等也十分廣泛。所以對U-boot的合理配置實際上也是對嵌入式系統(tǒng)本身合理剪裁的重要內(nèi)容之一。U-boot的源代碼是一套非常復(fù)雜而又功能強(qiáng)大的體系,在系統(tǒng)移植過程中不可能有過于復(fù)雜的代碼修改和配置。但是體系也是十分完善的,在實際開發(fā)中只要對于開發(fā)板和應(yīng)用有關(guān)的關(guān)鍵參數(shù)予以合理配置就可以了。主要對U-boot移植過程中兩個最重要的使用配置進(jìn)行了討論,并成功地應(yīng)用于嵌入式開發(fā)實踐中,效果良好。
[1] 朱超平.基于人臉識別的門禁系統(tǒng)設(shè)計與實現(xiàn)[J]. 重慶工商大學(xué)學(xué)報:自然科學(xué)版,2011(8):390-393
[2] 王洪建,陳安敏,林 娜,等.基于物聯(lián)網(wǎng)技術(shù)的能耗監(jiān)測管理平臺設(shè)計[J].重慶工商大學(xué)學(xué)報:自然科學(xué)版,2013(3):67-73
[3] 李昔華,代小紅.基于無線監(jiān)控網(wǎng)絡(luò)的智能輸液系統(tǒng)設(shè)計[J]. 重慶工商大學(xué)學(xué)報:自然科學(xué)版,2013(6):29-33
[4] 韋東山. 嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2013
[5] 楊鑄,唐攀. 深入淺出嵌入式底層軟件開發(fā)[M].北京:航空航天大學(xué)出版社,2013
Keywords:embedded systems; U-boot; parameters configuration
Two Key Parameters Configuration of U-boot Transplant in Embedded System Development
YUANYao-shen1,YUANFeng-shan2,JIANGChong3
(1.School of Automation, Southeast University, Nanjing 210096, China; 2.Information and Communication Department, Guangzhou Maritime Institute; Guangzhou 510725,China3.School of Mechanical Engineering, Southeast University, Nanjing 211189,China)
Embedded systems development is used for the practical application in a variety of specific situations. The boot program and the operating system are customized and targeted in different specific applications. The key parameters configuration of U-boot bootloader is crucial to the process of system transplant. It is positively significant for discussed configuration parameters in this paper to choose suitable development board and program memory as well as data storage based on NAND Flash.
1672-058X(2013)10-0073-04
2013-05-03;
2013-05-25.
廣州市黃埔區(qū)科技計劃項目(201253).
原堯燊(1992-),男 ,廣東廣州人,從事自動化技術(shù)研究.
TP391
A
責(zé)任編輯:羅澤舉
校對田靜