李青榮,任 昱
(1.中國(guó)電子科技集團(tuán)公司第二十八研究所,江蘇 南京 210007;2.南京萊斯信息技術(shù)股份有限公司,江蘇 南京 210007)
PC 機(jī)的系統(tǒng)引導(dǎo)通常由BIOS 和引導(dǎo)程序完成,引導(dǎo)程序一般使用GRUB;而嵌入式系統(tǒng)一般沒(méi)有BIOS 這樣的固件程序,系統(tǒng)的引導(dǎo)加載完全由Bootloader 獨(dú)立完成。Bootloader 在操作系統(tǒng)運(yùn)行前完成初始化硬件環(huán)境、建立內(nèi)存空間的映射表等操作,使得硬件設(shè)備初始到正常工作狀態(tài),從而建立適當(dāng)?shù)南到y(tǒng)軟硬件環(huán)境,為最終調(diào)用操作系統(tǒng)內(nèi)核做好準(zhǔn)備。嵌入式系統(tǒng),Bootloader 與底層硬件平臺(tái)聯(lián)系緊密,每個(gè)不同配置的目標(biāo)板有不同的Bootloader,因此Bootloader 需要按照硬件具體設(shè)計(jì)定制,然后燒錄到引導(dǎo)啟動(dòng)的ROM 或Flash 中。從可利用的資源和實(shí)際項(xiàng)目開(kāi)發(fā)考慮,采用移植已有的Bootloader 源碼作為項(xiàng)目的引導(dǎo)程序,可以有效的降低項(xiàng)目開(kāi)發(fā)成本,保證項(xiàng)目的順利開(kāi)展?;谝韵聨c(diǎn)本系統(tǒng)選擇了U-Boot 作為引導(dǎo)程序:(1)源碼開(kāi)放;(2)支持引導(dǎo)多種嵌入式操作系統(tǒng);(3)支持多種型號(hào)的處理器;(4)具有較高的可靠性和穩(wěn)定性;(5)豐富靈活的功能設(shè)置,適合U-Boot 調(diào)試、不同操作系統(tǒng)的引導(dǎo)要求和產(chǎn)品發(fā)布等;(6)具有豐富的設(shè)備驅(qū)動(dòng)源碼,如SDRAM、以太網(wǎng)、LCD、FLASH、EEPROM、RTC、鍵盤和串口等;(7)較為豐富的開(kāi)發(fā)調(diào)試文檔說(shuō)明,具有強(qiáng)大的網(wǎng)絡(luò)技術(shù)支持。
本系統(tǒng)開(kāi)發(fā)的是基于PowerPC MPC8377E 處理器為核心的硬件平臺(tái),原理框圖設(shè)計(jì)如圖1 所示。MPC8377E 外圍接口豐富,可參考實(shí)際需求自由刪減,提供了系統(tǒng)開(kāi)發(fā)很大程度的靈活性,同時(shí)降低產(chǎn)品開(kāi)發(fā)的難度與成本,有效縮短產(chǎn)品從研發(fā)到投放市場(chǎng)的時(shí)間,提高了產(chǎn)品的競(jìng)爭(zhēng)力。MPC8377E 處理器是PowerQUICCTMII Pro 系列產(chǎn)品中具有高性價(jià)比的產(chǎn)品,處理器內(nèi)部集成了e300 內(nèi)核、PCI、JTAG、PCI-E、DDR 控制器,尤其提供了雙千兆以太網(wǎng)控制器,在通信領(lǐng)域中得到非常廣泛的應(yīng)用,MPC8377E 采用90nm 工藝技術(shù),工作主頻從400MHz到800MHz[1]。本系統(tǒng)硬件資源具體如下:(1)處理器CPU:Freescale MPC8377E;(2)存儲(chǔ)器:512MB DDR2 SDRAM;32MB NOR flash;32MB NAND flash;(3)調(diào)試接口:JTAG/ COP;(4)I/O 接口:10/100/1000Mbps 以太網(wǎng)接口:兩個(gè)千兆位RGMII,兩個(gè)串口分別用作調(diào)試和正常通信。
圖1 MPC8377E 目標(biāo)板原理框
U-Boot(Universal Boot Loader)是遵循GPL 條款的開(kāi)放源碼項(xiàng)目,從FADSROM、PPCBOOT、8xxROM 逐步發(fā)展演化而來(lái)。其源碼目錄、編譯形式與Linux 內(nèi)核系統(tǒng)類似,U-Boot 部分源碼是通過(guò)相應(yīng)的Linux 內(nèi)核源程序簡(jiǎn)化而來(lái),尤其是一些設(shè)備的驅(qū)動(dòng)程序,從U-Boot 源碼注釋中能體現(xiàn)出這一點(diǎn)。但U-Boot 不僅支持嵌入式Linux 系統(tǒng),它還支持VxWorks、QNX、NetBSD、RTEMS、ARTOS 和LynxOS 等嵌入式操作系統(tǒng)的引導(dǎo)。U-Boot 支持的處理器類型除PowerPC 系列的處理器外,還支持MIPS、x86、ARM、NIOS 和XScale 等諸多常用系列的處理器。本系統(tǒng)采用的是u-boot-2011.3 版本,其主要目錄如下:(1)arch:存放各種類型特定架構(gòu)的實(shí)現(xiàn)文件,U-Boot 啟動(dòng)代碼一般在這里的start.s 中;(2)api:為拓展應(yīng)用準(zhǔn)備的,與硬件和架構(gòu)無(wú)關(guān)的接口定義文件;(3)board:目標(biāo)板相關(guān)文件;(4)common:獨(dú)立于處理器體系結(jié)構(gòu)的通用代碼,如內(nèi)存大小探測(cè)與故障檢測(cè);(5)disk:與磁盤操作相關(guān)的文件;(6)doc:項(xiàng)目開(kāi)發(fā)的說(shuō)明文檔;(7)driver:常用的設(shè)備驅(qū)動(dòng)文件;(8)examples:在U-Boot 下運(yùn)行的示例程序;如hello_world.c;(9)fs:支持的文件系統(tǒng)(jffs2 等);(10)include:U-Boot 頭文件,configs 子目錄下存放的是與目標(biāo)板相關(guān)的配置頭文件,是移植過(guò)程中經(jīng)常需要修改的文件;(11)lib:所有架構(gòu)通用的庫(kù)文件;(12)net:與網(wǎng)絡(luò)功能相關(guān)的文件目錄,如bootp、nfs、tftp;(13)post:上電自檢相關(guān)的文件目錄;(14)rtc:RTC 驅(qū)動(dòng)文件;(15)tools:用于創(chuàng)建U-Boot、S-RECORD 和BIN 鏡像文件的工具。
在開(kāi)展移植工作之前,先構(gòu)建交叉開(kāi)發(fā)環(huán)境。嵌入式系統(tǒng)及應(yīng)用軟件開(kāi)發(fā)一般采用宿主機(jī)-目標(biāo)機(jī)模式,本系統(tǒng)宿主機(jī)開(kāi)發(fā)環(huán)境是在X86 架構(gòu)的windows 操作系統(tǒng)下,用VMware 虛擬機(jī)軟件安裝的Linux Fedora 15 32 位操作系統(tǒng),搭建德國(guó)DENX 軟件中心提供的ELDK 開(kāi)發(fā)工具。目標(biāo)機(jī)上部署的是Linux 2.6.28 操作系統(tǒng)。
移植工作一般在U-Boot 項(xiàng)目中尋找與自制目標(biāo)板相似的硬件平臺(tái),按照目標(biāo)板硬件環(huán)境修改配置參數(shù);本系統(tǒng)開(kāi)發(fā)的基于PowerPC 處理器的MPC8377E 的硬件平臺(tái)與U-Boot-2011.3 版本中mpc837xerdb 硬件平臺(tái)相類似,接下來(lái)的工作是參考硬件設(shè)計(jì)原理圖和芯片手冊(cè)修改相關(guān)代碼,這在很多程度上降低了移植難度。U-Boot 的移植步驟說(shuō)明如下:(1)修改Include/configs/MPC837XERDB.h 文件:(a)修改起始基地址CONFIG_SYS_TEXT_BASE 為0xF0 000000;(b)關(guān)閉PCI 總線(#undef CONFIG_PCI);(c)修改DDR2 SDRAM 相關(guān)配置,主要配置如圖2所示。(2)修改boards.cfg 文件,添加一行:MPC837XERDB powerpc mpc83x mpc837xerdb freescale。(3)執(zhí) 行make MPC837XERDB_config 命令,成功執(zhí)行后U-Boot 會(huì)自動(dòng)生成編譯規(guī)則文件和配置文件,其中編譯規(guī)則文件(includeconfig.mk)主要定義目標(biāo)板的架構(gòu)類型、使用的處理器、目標(biāo)板的類型和廠商,本系統(tǒng)分別定義的是PowerPC、mpc83xx、mpc837xerdb 和freescale。接下來(lái)make 工具會(huì)根據(jù)以上配置,通過(guò)makefile 文件相關(guān)鏈接,逐層遞推的對(duì)整個(gè)U-Boot 項(xiàng)目進(jìn)行編譯。配置文件(includeconfig.h)主要包含當(dāng)前目標(biāo)板配置所引用的相關(guān)命令、目標(biāo)板參數(shù)所在的頭文件。(4)make 完成對(duì)u-boot 編譯后,生成U-boot.bin 文件。
圖2 DDR2 SDRAM 主要配置
嵌入式系統(tǒng)的Bootloader 移植是嵌入式系統(tǒng)設(shè)計(jì)開(kāi)發(fā)中的非常重要的一個(gè)步驟,如果利用像BDI3000 這樣的開(kāi)發(fā)調(diào)試工具進(jìn)行U-Boot 調(diào)試,對(duì)移植工作順利開(kāi)展非常有幫助。要想BDI3000 能夠啟動(dòng)控制目標(biāo)板,需要對(duì)BDI3000 中的啟動(dòng)參數(shù)進(jìn)行正確配置,具體配置要參考目標(biāo)板硬件設(shè)計(jì)信息。在U-Boot 的啟動(dòng)過(guò)程串口初始化之前,無(wú)法獲得U-Boot 啟動(dòng)的字符串提示信息,這個(gè)過(guò)程中對(duì)U-Boot 的調(diào)試就必須要用到BDI3000。在串口的初始化之后,便可通過(guò)串口打印的信息來(lái)實(shí)時(shí)跟蹤所啟動(dòng)的執(zhí)行流程,以了解U-Boot 目前執(zhí)行的具體部分或運(yùn)行到哪一階段出現(xiàn)了問(wèn)題[3]。
用BDI3000 調(diào)試時(shí),需要關(guān)注調(diào)試代碼地址,可利用objdump 命令獲得相關(guān)代碼地址,方便調(diào)試查找定位。重定位前的代碼直接運(yùn)行在NOR FLASH 中,地址可以在objdump 生成文件中直接獲得,而重定位后的代碼,地址發(fā)生偏移,可通過(guò)BDI 工具單步執(zhí)行或者設(shè)置斷點(diǎn)跟蹤調(diào)試。
U-Boot 在移植完成并測(cè)試成功后,通過(guò)BDI3000 把UBoot 映像文件燒寫到NOR FLASH 相應(yīng)地址,NOR FLASH 燒寫地址必須與硬件所規(guī)定的硬件復(fù)位向量一致,對(duì)于MPC8377E 處理器而言,燒寫地址是0xF0000000。U-Boot 經(jīng)過(guò)部署后,目標(biāo)機(jī)能夠正確引導(dǎo)內(nèi)核和加載文件系統(tǒng)。
U-Boot 是一個(gè)功能非常強(qiáng)大的開(kāi)源的系統(tǒng)引導(dǎo)軟件,支持ARM、PowerPC 等多種架構(gòu)處理器平臺(tái)上的Linux、VxWorks等多種嵌入式操作系統(tǒng)引導(dǎo)。U-Boot 設(shè)置環(huán)境參數(shù),配置硬件平臺(tái)初始化,為加載操作系統(tǒng)創(chuàng)造良好的運(yùn)行環(huán)境。本系統(tǒng)基于PowerPC 處理器的MPC8377E 的硬件平臺(tái),實(shí)現(xiàn)了UBoot 移植,并成功引導(dǎo)linux 操作系統(tǒng),使得linux 操作系統(tǒng)穩(wěn)定運(yùn)行。
[1]MPC8377E PowerQUICC II Pro Processor Hardware Specifications[Z].America:Freescale Semiconductor Corp,2008.
[2]孫紀(jì)坤,張小全.嵌入式Linux 系統(tǒng)開(kāi)發(fā)技術(shù)詳解—基于ARM[M].北京:人民郵電出版社,2006.
[3]宋國(guó)軍,張侃諭,林學(xué)龍.嵌入式系統(tǒng)中U-Boot 基本特點(diǎn)及其移植方法[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2004(10).