李青榮,任 昱
(1.中國電子科技集團公司第二十八研究所,江蘇 南京 210007;2.南京萊斯信息技術股份有限公司,江蘇 南京 210007)
PC 機的系統引導通常由BIOS 和引導程序完成,引導程序一般使用GRUB;而嵌入式系統一般沒有BIOS 這樣的固件程序,系統的引導加載完全由Bootloader 獨立完成。Bootloader 在操作系統運行前完成初始化硬件環境、建立內存空間的映射表等操作,使得硬件設備初始到正常工作狀態,從而建立適當的系統軟硬件環境,為最終調用操作系統內核做好準備。嵌入式系統,Bootloader 與底層硬件平臺聯系緊密,每個不同配置的目標板有不同的Bootloader,因此Bootloader 需要按照硬件具體設計定制,然后燒錄到引導啟動的ROM 或Flash 中。從可利用的資源和實際項目開發考慮,采用移植已有的Bootloader 源碼作為項目的引導程序,可以有效的降低項目開發成本,保證項目的順利開展。基于以下幾點本系統選擇了U-Boot 作為引導程序:(1)源碼開放;(2)支持引導多種嵌入式操作系統;(3)支持多種型號的處理器;(4)具有較高的可靠性和穩定性;(5)豐富靈活的功能設置,適合U-Boot 調試、不同操作系統的引導要求和產品發布等;(6)具有豐富的設備驅動源碼,如SDRAM、以太網、LCD、FLASH、EEPROM、RTC、鍵盤和串口等;(7)較為豐富的開發調試文檔說明,具有強大的網絡技術支持。
本系統開發的是基于PowerPC MPC8377E 處理器為核心的硬件平臺,原理框圖設計如圖1 所示。MPC8377E 外圍接口豐富,可參考實際需求自由刪減,提供了系統開發很大程度的靈活性,同時降低產品開發的難度與成本,有效縮短產品從研發到投放市場的時間,提高了產品的競爭力。MPC8377E 處理器是PowerQUICCTMII Pro 系列產品中具有高性價比的產品,處理器內部集成了e300 內核、PCI、JTAG、PCI-E、DDR 控制器,尤其提供了雙千兆以太網控制器,在通信領域中得到非常廣泛的應用,MPC8377E 采用90nm 工藝技術,工作主頻從400MHz到800MHz[1]。本系統硬件資源具體如下:(1)處理器CPU:Freescale MPC8377E;(2)存儲器:512MB DDR2 SDRAM;32MB NOR flash;32MB NAND flash;(3)調試接口:JTAG/ COP;(4)I/O 接口:10/100/1000Mbps 以太網接口:兩個千兆位RGMII,兩個串口分別用作調試和正常通信。

圖1 MPC8377E 目標板原理框
U-Boot(Universal Boot Loader)是遵循GPL 條款的開放源碼項目,從FADSROM、PPCBOOT、8xxROM 逐步發展演化而來。其源碼目錄、編譯形式與Linux 內核系統類似,U-Boot 部分源碼是通過相應的Linux 內核源程序簡化而來,尤其是一些設備的驅動程序,從U-Boot 源碼注釋中能體現出這一點。但U-Boot 不僅支持嵌入式Linux 系統,它還支持VxWorks、QNX、NetBSD、RTEMS、ARTOS 和LynxOS 等嵌入式操作系統的引導。U-Boot 支持的處理器類型除PowerPC 系列的處理器外,還支持MIPS、x86、ARM、NIOS 和XScale 等諸多常用系列的處理器。本系統采用的是u-boot-2011.3 版本,其主要目錄如下:(1)arch:存放各種類型特定架構的實現文件,U-Boot 啟動代碼一般在這里的start.s 中;(2)api:為拓展應用準備的,與硬件和架構無關的接口定義文件;(3)board:目標板相關文件;(4)common:獨立于處理器體系結構的通用代碼,如內存大小探測與故障檢測;(5)disk:與磁盤操作相關的文件;(6)doc:項目開發的說明文檔;(7)driver:常用的設備驅動文件;(8)examples:在U-Boot 下運行的示例程序;如hello_world.c;(9)fs:支持的文件系統(jffs2 等);(10)include:U-Boot 頭文件,configs 子目錄下存放的是與目標板相關的配置頭文件,是移植過程中經常需要修改的文件;(11)lib:所有架構通用的庫文件;(12)net:與網絡功能相關的文件目錄,如bootp、nfs、tftp;(13)post:上電自檢相關的文件目錄;(14)rtc:RTC 驅動文件;(15)tools:用于創建U-Boot、S-RECORD 和BIN 鏡像文件的工具。
在開展移植工作之前,先構建交叉開發環境。嵌入式系統及應用軟件開發一般采用宿主機-目標機模式,本系統宿主機開發環境是在X86 架構的windows 操作系統下,用VMware 虛擬機軟件安裝的Linux Fedora 15 32 位操作系統,搭建德國DENX 軟件中心提供的ELDK 開發工具。目標機上部署的是Linux 2.6.28 操作系統。
移植工作一般在U-Boot 項目中尋找與自制目標板相似的硬件平臺,按照目標板硬件環境修改配置參數;本系統開發的基于PowerPC 處理器的MPC8377E 的硬件平臺與U-Boot-2011.3 版本中mpc837xerdb 硬件平臺相類似,接下來的工作是參考硬件設計原理圖和芯片手冊修改相關代碼,這在很多程度上降低了移植難度。U-Boot 的移植步驟說明如下:(1)修改Include/configs/MPC837XERDB.h 文件:(a)修改起始基地址CONFIG_SYS_TEXT_BASE 為0xF0 000000;(b)關閉PCI 總線(#undef CONFIG_PCI);(c)修改DDR2 SDRAM 相關配置,主要配置如圖2所示。(2)修改boards.cfg 文件,添加一行:MPC837XERDB powerpc mpc83x mpc837xerdb freescale。(3)執 行make MPC837XERDB_config 命令,成功執行后U-Boot 會自動生成編譯規則文件和配置文件,其中編譯規則文件(includeconfig.mk)主要定義目標板的架構類型、使用的處理器、目標板的類型和廠商,本系統分別定義的是PowerPC、mpc83xx、mpc837xerdb 和freescale。接下來make 工具會根據以上配置,通過makefile 文件相關鏈接,逐層遞推的對整個U-Boot 項目進行編譯。配置文件(includeconfig.h)主要包含當前目標板配置所引用的相關命令、目標板參數所在的頭文件。(4)make 完成對u-boot 編譯后,生成U-boot.bin 文件。

圖2 DDR2 SDRAM 主要配置
嵌入式系統的Bootloader 移植是嵌入式系統設計開發中的非常重要的一個步驟,如果利用像BDI3000 這樣的開發調試工具進行U-Boot 調試,對移植工作順利開展非常有幫助。要想BDI3000 能夠啟動控制目標板,需要對BDI3000 中的啟動參數進行正確配置,具體配置要參考目標板硬件設計信息。在U-Boot 的啟動過程串口初始化之前,無法獲得U-Boot 啟動的字符串提示信息,這個過程中對U-Boot 的調試就必須要用到BDI3000。在串口的初始化之后,便可通過串口打印的信息來實時跟蹤所啟動的執行流程,以了解U-Boot 目前執行的具體部分或運行到哪一階段出現了問題[3]。
用BDI3000 調試時,需要關注調試代碼地址,可利用objdump 命令獲得相關代碼地址,方便調試查找定位。重定位前的代碼直接運行在NOR FLASH 中,地址可以在objdump 生成文件中直接獲得,而重定位后的代碼,地址發生偏移,可通過BDI 工具單步執行或者設置斷點跟蹤調試。
U-Boot 在移植完成并測試成功后,通過BDI3000 把UBoot 映像文件燒寫到NOR FLASH 相應地址,NOR FLASH 燒寫地址必須與硬件所規定的硬件復位向量一致,對于MPC8377E 處理器而言,燒寫地址是0xF0000000。U-Boot 經過部署后,目標機能夠正確引導內核和加載文件系統。
U-Boot 是一個功能非常強大的開源的系統引導軟件,支持ARM、PowerPC 等多種架構處理器平臺上的Linux、VxWorks等多種嵌入式操作系統引導。U-Boot 設置環境參數,配置硬件平臺初始化,為加載操作系統創造良好的運行環境。本系統基于PowerPC 處理器的MPC8377E 的硬件平臺,實現了UBoot 移植,并成功引導linux 操作系統,使得linux 操作系統穩定運行。
[1]MPC8377E PowerQUICC II Pro Processor Hardware Specifications[Z].America:Freescale Semiconductor Corp,2008.
[2]孫紀坤,張小全.嵌入式Linux 系統開發技術詳解—基于ARM[M].北京:人民郵電出版社,2006.
[3]宋國軍,張侃諭,林學龍.嵌入式系統中U-Boot 基本特點及其移植方法[J].單片機與嵌入式系統應用,2004(10).