複製鏈接
請複製以下鏈接發送給好友

U-Boot

鎖定
Das U-Boot 是一個主要用於嵌入式系統的引導加載程序,可以支持多種不同的計算機系統結構,包括PPC、ARM、AVR32、MIPSx8668k、Nios與MicroBlaze。這也是一套在GNU通用公共許可證之下發布的自由軟件
Das U-Boot可以在x86計算機上建構,但這部x86計算機必須安裝有可支持特定平台結構的交互發展GNU工具鏈,例如crosstool、Embedded Linux Development Kit (ELDK)或OSELAS.Toolchain。
中文名
U-Boot
全    稱
Universal Boot Loader
類    型
開放源碼項目
特    點
遵循GPL條款

U-Boot簡介

U-Boot不僅僅支持嵌入式Linux系統的引導,它還支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系統。其目前要支持的目標操作系統是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS, android。這是U-Boot中Universal的一層含義,另外一層含義則是U-Boot除了支持PowerPC系列的處理器外,還能支持MIPS、 x86、ARM、NIOS、XScale等諸多常用系列的處理器。這兩個特點正是U-Boot項目的開發目標,即支持儘可能多的嵌入式處理器和嵌入式操作系統。就目前來看,U-Boot對PowerPC系列處理器支持最為豐富,對Linux的支持最完善。其它系列的處理器和操作系統基本是在2002年11 月PPCBOOT改名為U-Boot後逐步擴充的。從PPCBOOT向U-Boot的順利過渡,很大程度上歸功於U-Boot的維護人德國DENX軟件工程中心Wolfgang Denk[以下簡稱W.D]本人精湛專業水平和執着不懈的努力。當前,U-Boot項目正在他的領軍之下,眾多有志於開放源碼BOOT LOADER移植工作的嵌入式開發人員正如火如荼地將各個不同系列嵌入式處理器的移植工作不斷展開和深入,以支持更多的嵌入式操作系統的裝載與引導。
選擇U-Boot的理由
① 開放源碼;
② 支持多種嵌入式操作系統內核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
③ 支持多個處理器系列,如PowerPC、ARM、x86、MIPS;
④ 較高的可靠性和穩定性;
⑤ 高度靈活的功能設置,適合U-Boot調試、操作系統不同引導要求、產品發佈等;
⑥ 豐富的設備驅動源碼,如串口、以太網、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;
⑦ 較為豐富的開發調試文檔與強大的網絡技術支持;

U-Boot目錄結構

* board 目標板相關文件,主要包含SDRAM、FLASH驅動;
* common 獨立於處理器體系結構的通用代碼,如內存大小探測與故障檢測;
* cpu 與處理器相關的文件。如mpc8xx子目錄下含串口、網口、LCD驅動及中斷初始化等文件;
* driver 通用設備驅動,如CFI FLASH驅動(目前對INTEL FLASH支持較好)
* doc U-Boot的説明文檔;
* examples可在U-Boot下運行的示例程序;如hello_world.c,timer.c;
* include U-Boot頭文件;尤其configs子目錄下與目標板相關的配置頭文件是移植過程中經常要修改的文件;
* lib_xxx 處理器體系相關的文件,如lib_ppc, lib_arm目錄分別包含與PowerPC、ARM體系結構相關的文件;
* net 與網絡功能相關的文件目錄,如bootp,nfs,tftp;
* post 上電自檢文件目錄。尚有待於進一步完善;
* rtc RTC驅動程序
* tools 用於創建U-Boot S-RECORD和BIN鏡像文件的工具;
(以上關於目錄結構的説明只適應u-boot-2010.06之前版本。u-boot-2010.06之後目錄結構改變
1.cpu與lib_arch合二為一,命名arch
2.增加include folder
3.分離出通用庫文件夾lib

U-Boot主要功能

U-Boot可支持的主要功能列表:
*系統引導支持NFS掛載、RAMDISK(壓縮或非壓縮)形式的根文件系統;支持NFS掛載、從FLASH中引導壓縮或非壓縮系統內核
* 基本輔助功能強大的操作系統接口功能;可靈活設置、傳遞多個關鍵參數給操作系統,適合系統在不同開發階段的調試要求與產品發佈,尤以Linux支持最為強勁;支持目標板環境參數多種存儲方式,如FLASH、NVRAM、EEPROM;
* CRC32校驗可校驗FLASH中內核、RAMDISK鏡像文件是否完好;
* 設備驅動串口、SDRAM、FLASH、以太網、LCD、NVRAM、EEPROM、鍵盤、USB、PCMCIA、PCI、RTC等驅動支持;
* 上電自檢功能SDRAM、FLASH大小自動檢測;SDRAM故障檢測;CPU型號;
* 特殊功能XIP內核引導;

U-Boot工作模式

U-Boot的工作模式有啓動加載模式和下載模式。啓動加載模式是Bootloader的正常工作模式,嵌入式產品發佈時,Bootloader必須工作在這種模式下,Bootloader將嵌入式操作系統從FLASH中加載到SDRAM中運行,整個過程是自動的。下載模式就是Bootloader通過某些通信手段將內核映像或根文件系統映像等從PC機中下載到目標板的FLASH中。用户可以利用Bootloader提供的一些命令接口來完成自己想要的操作。

U-Boot啓動流程

大多數BootLoader都分為stage1和stage2兩大部分,U-boot也不例外。依賴於cpu體系結構的代碼(如設備初始化代碼等)通常都放在stage1且可以用匯編語言來實現,而stage2則通常用C語言來實現,這樣可以實現複雜的功能,而且有更好的可讀性和移植性。
1、 stage1(start.s代碼結構)
U-boot的stage1代碼通常放在start.s文件中,它用匯編語言寫成,其主要代碼部分如下:
(1) 定義入口。由於一個可執行的image必須有一個入口點,並且只能有一個全局入口,通常這個入口放在rom(Flash)的0x0地址,因此,必須通知編譯器以使其知道這個入口,該工作可通過修改連接器腳本來完成。
(2)設置異常向量(exception vector)。
(3)設置CPU的速度、時鐘頻率及中斷控制寄存器
(4)初始化內存控制器
(5)將rom中的程序複製到ram中。
(6)初始化堆棧
(7)轉到ram中執行,該工作可使用指令ldrpc來完成。
2、 stage2(C語言代碼部分)
lib_arm/board.c中的start armboot是C語言開始的函數,也是整個啓動代碼中C語言的主函數,同時還是整個u-boot(armboot)的主函數,該函數主要完成如下操作:
(1)調用一系列的初始化函數。
(2)初始化flash設備。
(3)初始化系統內存分配函數。
(4)如果目標系統擁有nand設備,則初始化nand設備。
(5)如果目標系統有顯示設備,則初始化該類設備。
(6)初始化相關網絡設備,填寫ip,c地址等。
(7)進入命令循環(即整個boot的工作循環),接受用户從串口輸入的命令,然後進行相應的工作。

U-Boot功能[編輯]

U-Boot支持的文件系統

U-Boot歷史

這個項目起源於 Magnus Damm.在 8xx PowerPC 架構下寫的引導加載程序:8xxROM。1999 年十月,Wolfgang Denk 將項目移轉到 SourceForge.net,但 SourceForge.net 不允許數字開頭的項目名稱,所以改名為PPCBoot。PPCBoot 在 2000年 7 月 19 日第一次公開發布 0.4.1 版 [1] 
參考資料
  • 1.    陳為軍, 李正明, 孫俊,等. 基於U-BOOT的S3C44B0引導程序設計實現[J]. 微計算機信息, 2007, 23(2):113-115.