U-Boot 簡介

前言

目前市面上以嵌入式Linux為基礎的設備正以驚人的速度成長著,從大小僅3英吋的Gumstix系統到PDASmart-phones等,嵌入式Linux系統幾乎無所不在。然而,在這些各式各樣不同的平台中安裝與啟動Linux卻是個艱難的工作。由於平台差異性造成開發上的困難,因此開發人員希望能夠擁有一個功能強大且支援大量平台的Boot Loader來簡化開發的過程。而U-Boot就是在這種期望下所產生出來的產物。

 

所謂的Boot Loader,也有人稱之為Boot CodeBoot Monitor,即是在系統電源打開後最早執行的一小段程式。以執行Linux系統的PC為例,存在於硬碟MBR (Master Boot Record)中的LiloGrub程式,就是一種常見的Boot Loader

 

PC中,當BIOS做完系統各種初始化後,便會執行MBR中的Boot Loader,接著Boot Loader提供必要的系統資訊給作業系統核心並啟動作業系統。

 

然而,在嵌入式系統中的Boot Loader則較為複雜,因為大部分的平台中並沒有BIOS來處理系統初始化的動作,且微處理器、記憶體控制器與其它的特定的硬體,其初始化的方式亦隨著CPU或平台的不同而不同,因此我們並不希望將初始化的動作交付給作業系統,而是由Boot Loader來執行。

 

一個運作於嵌入式系統中的Boot Loader至少必需提供下列的功能

l 初始化硬體,特別是記憶體控制器

l 提供啟動時的參數給作業系統

l 啟動作業系統

 

除此之外,大部分的Boot Loader亦提供了許多額外的功能,如讀寫任意合法位址的記憶體資料、自我更新Boot Image或網路支援等。

 

U-Boot簡介

 

U-Boot是一個遵循GPL的自由軟體,而Wolfgang Denk為此專案現任的主導人。

 

目前U-Boot已經支援了大量的嵌入式系統平台與各式各樣的CPU,其中包括了PowerPCARMXScaleMIPSColdfireNIOSMicroblazex86等。

 

因此你可以輕易的將U-Boot移植到你的平台上並享受它所提供的強大功能。

 

U-Boot最早起源於一個名為「8xxROM」的專案,目的是提供PowerPC系統一個功能完整的Boot Loader,當時主導此專案的人是Magnus Damm

 

而在2000年時,Wolfgang Denk,也就是目前的專案主導人,將此專案加入了Sourceforge組織,但由於該組織不允許以數字為開頭的專案名稱,因此Wolfgang Denk便將專案名稱改為「PPCBoot」。

 

由於PPCBoot所提供的功能與相關工具程式非常完整並且開放源始碼,在日漸受到大眾歡迎之際,便開始有人將PPCBoot移植到其它平台上。

 

20029月,PPCBoot已經支援了四種不同的ARM處理器,因此,相關人員又建立了名為ARMBoot的專案。

 

有鑑於程式支援的處理器愈來愈多,200211月,開發團隊最終決定建立一個新的專案來整合這些不同平台的移植版本,並將其命名為「Das U-Boot(Universal Boot Loader)

 

事實上,U-Boot開發的方式非常接近Linux,甚至有部分的程式亦直接取自Linux原始程式,尤其是設備驅動程式。

 

U-Boot能夠啟動的作業系統包含了LinuxNetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS等,其中以Linux的支援最為豐富。

 

U-Boot的版本命名也與Linux類似,它使用三階段的版本編號,分別是VersionSub-versionPatchlevel,以U-Boot-1.2.3為例,Version1Sub-version2,而Patchlevel則為3

 

其中Patchlevel用來識別該版本修訂的次數,通常當某版本正式釋出時,Patchlevel0

 

下表為U-Boot原始碼的目錄架構,熟悉Linux的讀者對於這種架構應該不陌生。

 

若你有機會從事大型軟體開發的工作,不妨以此為參考範本,相信對於專案的進行會更加的順利。

 

目錄名稱

說明

board

包含所有已建立完成之開發板,與硬體相關之檔案,比如Makefileu-boot.lds等都和具體開發板的硬體和地址分配有關。

common

與系統架構無關的檔案,包含環境變數的設定與執行遠端控制台各種命令的處理等。

cpu

CPU相關檔案,其中的子目錄都是以U-Boot所支援的CPU為名,比如有子目錄arm926ejsmipsmpc8260nios等,每個特定的子目錄中都包括cpu.cinterrupt.cstart.S。其中cpu.c初始化CPU、設置指令(Instruction) Cache和資料(Data) Cache等;interrupt.c設置系統的各種中斷和異常/特殊事件(Exception),比如快速中斷、開關中斷、時鐘中斷、軟體中斷、預取中止和未定義指令等;start.SU-Boot啟動時執行的第一個檔案,它主要是設定系統堆疊(Stack)和工作方式,為進入C程式作好前置作業。

disk

磁碟驅動與分區處理(partition handling)相關的程式碼。

doc

相關說明文件。

drivers

各種硬體設備驅動程式(Device Driver),比如各種網路卡、支援CFIFlash、串列埠(Serial Port)USB等。

dtt

處理與溫度設備相關的控制。

examples

一些應用範例,例如:hello_world.csched.c等。

fs

與所支援檔案系統有關之原始程式,U-Boot現在支援cramfsfatfdosjffs2registerfs

include

檔頭定義檔(.h),還有對各種硬體平台支援的組合語言檔(.asm),定義系統的各種配置,包含軟體與硬體。

lib_xxx

與各種不同架構相關的函式庫或程式碼。(lib_armlib_mipslib_i386lib_m68k)

lib_generic

公用的程式庫(Library),例如:crc32.c(CRC Check)zlib.c(壓縮)string.c(字串處理)等。

net

處理與網絡有關之相關程式,BOOTP協定(Protocol)TFTP協定、RARP協定和NFS檔案統的實現。

post

提供Power On Self Test功能。

rtc

Real Time Clock驅動程式。

tools

提供建立S-RecordU-Boot映像檔等工具程式。

 

 

arrow
arrow
    文章標籤
    uboot
    全站熱搜
    創作者介紹
    創作者 JL8051 的頭像
    JL8051

    不會的就放這邊

    JL8051 發表在 痞客邦 留言(0) 人氣()