U-Boot

U-Boot

U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開放源碼項目。U-Boot的作用是系統引導。U-Boot從FADSROM、8xxROM、PPCBOOT逐步發展演化而來。其源碼目錄、編譯形式與Linux核心很相似,事實上,不少U-Boot源碼就是根據相應的Linux核心源程式進行簡化而形成的,尤其是一些設備的驅動程式,這從U-Boot源碼的注釋中能體現這一點。

基本介紹

  • 中文名: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
選擇U-Boot的理由
① 開放源碼;
② 支持多種嵌入式作業系統核心,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
③ 支持多個處理器系列,如PowerPC、ARM、x86、MIPS;
④ 較高的可靠性和穩定性;
⑤ 高度靈活的功能設定,適合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 上電自檢檔案目錄。尚有待於進一步完善;
* 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可支持的主要功能列表:
*系統引導支持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的工作循環),接受用戶從串口輸入的命令,然後進行相應的工作。

相關詞條

熱門詞條

聯絡我們