U-Boot

U-Boot

引導加載程序
U-Boot,全稱Universal Boot Loader,是遵循GPL條款的開放源碼項目。U-Boot的作用是系統引導。[1]其源碼目錄、編譯形式與Linux内核很相似,事實上,不少U-Boot源碼就是根據相應的Linux内核源程序進行簡化而形成的,尤其是一些設備的驅動程序,這從U-Boot源碼的注釋中能體現這一點。
  • 網站名稱:
  • 别名:
  • 創始人:
  • 總部地點:
  • 主辦單位:
  • 網站類型:
  • 網站口号:
  • ICP備案号:
  • 中文名:U-Boot
  • 全稱:Universal Boot Loader
  • 類型:開放源碼項目
  • 特點:遵循GPL條款

簡介

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、XScale;

④較高的可靠性和穩定性;

⑤高度靈活的功能設置,适合U-Boot調試、操作系統不同引導要求、産品發布等;

⑥豐富的設備驅動源碼,如串口、以太網、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;

⑦較為豐富的開發調試文檔與強大的網絡技術支持;

目錄結構

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上電自檢文件目錄。尚有待于進一步完善;

rtcRTC驅動程序;

tools用于創建U-Boot S-RECORD和BIN鏡像文件的工具。

主要功能

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的工作模式有啟動加載模式和下載模式。啟動加載模式是Bootloader的正常工作模式,嵌入式産品發布時,Bootloader必須工作在這種模式下,Bootloader将嵌入式操作系統從FLASH中加載到SDRAM中運行,整個過程是自動的。下載模式就是Bootloader通過某些通信手段将内核映像或根文件系統映像等從PC機中下載到目标闆的FLASH中。用戶可以利用Bootloader提供的一些命令接口來完成自己想要的操作。

啟動流程

大多數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的工作循環),接受用戶從串口輸入的命令,然後進行相應的工作。

相關詞條

相關搜索

其它詞條