跳到主要內容

U BOOT 簡介

U BOOT 簡介

前言
目前市面上以嵌入式Linux為基礎的設備正以驚人的速度成長著,從大小僅3英吋的Gumstix系統到 PDA、Smart-phones等,嵌入式Linux系統幾乎無所不在。然而,在這些各式各樣不同的平台中安裝與啟動Linux卻是個艱難的工作。由於 平台差異性造成開發上的困難,因此開發人員希望能夠擁有一個功能強大且支援大量平台的Boot Loader來簡化開發的過程。而U-Boot就是在這種期望下所產生出來的產物。
所謂的Boot Loader,也有人稱之為Boot Code或Boot Monitor,即是在系統電源打開後最早執行的一小段程式。以執行Linux系統的PC為例,存在於硬碟MBR (Master Boot Record)中的Lilo或Grub程式,就是一種常見的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,其中包括了PowerPC、ARM、XScale、 MIPS、Coldfire、NIOS、Microblaze與x86等。因此你可以輕易的將U-Boot移植到你的平台上並享受它所提供的強大功能。
U- Boot最早起源於一個名為「8xxROM」的專案,目的是提供PowerPC系統一個功能完整的Boot Loader,當時主導此專案的人是Magnus Damm。而在2000年時,Wolfgang Denk,也就是目前的專案主導人,將此專案加入了Sourceforge組織,但由於該組織不允許以數字為開頭的專案名稱,因此Wolfgang Denk便將專案名稱改為「PPCBoot」。
由於PPCBoot所提供的功能與相關工具程式非常完整併且開放源始碼,在日漸受到大眾歡 迎之際,便開始有人將PPCBoot移植到其它平台上。2002年9月,PPCBoot已經支援了四種不同的ARM處理器,因此,相關人員又建立了名為 ARMBoot的專案。有鑑於程式支援的處理器愈來愈多,2002年11月,開發團隊最終決定建立一個新的專案來整合這些不同平台的移植版本,並將其命名 為「Das U-Boot」(Universal Boot Loader)。
事實上,U-Boot開發的方式非常接近Linux,甚至 有部分的程式亦直接取自Linux原始程式,尤其是設備驅動程式。U-Boot能夠啟動的作業系統包含了Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS等,其中以Linux的支援最為豐富。U-Boot的版本命名也與Linux類似,它使用三階段的版本編號,分別是Version、Sub- version與Patchlevel,以U-Boot-1.2.3為例,Version為1,Sub-version為2,而Patchlevel則為 3。其中Patchlevel用來識別該版本修訂的次數,通常當某版本正式釋出時,Patchlevel為0。
下表為U-Boot原始碼的目錄架構,熟悉Linux的讀者對於這種架構應該不陌生。若你有機會從事大型軟體開發的工作,不妨以此為參考範本,相信對於專案的進行會更加的順利。
目錄名稱 說明
board 包含所有已建立完成之開發板,與硬體相關之檔案,比如Makefile和u-boot.lds等都和具體開發板的硬體和地址分配有關。
common 與系統架構無關的檔案,包含環境變數的設定與執行遠端控制台各種命令的處理等。
cpu CPU 相關檔案,其中的子目錄都是以U-Boot所支援的CPU為名,比如有子目錄arm926ejs、mips、mpc8260和nios等,每個特定的子目 錄中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、設置指令(Instruction) Cache和資料(Data) Cache等;interrupt.c設置系統的各種中斷和異常/特殊事件(Exception),比如快速中斷、開關中斷、時鐘中斷、軟體中斷、預取中 止和未定義指令等;start.S是U-Boot啟動時執行的第一個檔案,它主要是設定系統堆疊(Stack)和工作方式,為進入C程式作好前置作業。
disk 磁碟驅動與分區處理(partition handling)相關的程式碼。
doc 相關說明文件。
drivers 各種硬體設備驅動程式(Device Driver),比如各種網路卡、支援CFI的Flash、串列埠(Serial Port)和USB等。
dtt 處理與溫度設備相關的控制。
examples 一些應用範例,例如:hello_world.c、sched.c等。
fs 與所支援檔案系統有關之原始程式,U-Boot現在支援cramfs、fat、fdos、jffs2和registerfs。
include 檔頭定義檔(.h),還有對各種硬體平台支援的組合語言檔(.asm),定義系統的各種配置,包含軟體與硬體。
lib_xxx 與各種不同架構相關的函式庫或程式碼。(lib_arm、lib_mips、lib_i386、lib_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-Record或U-Boot映像檔等工具程式。

留言

這個網誌中的熱門文章

17分鐘波段策略

使用中 觀察中 待修正 TXF_17min_1 TXF_17min_2 TXF_17min_3 TXF_17min_4 TXF_17min_5 TXF_17min_6 TXF_17min_7 TXF_17min_8 TXF_17min_9 TXF_17min_10 * TXF_17min_11 TXF_17min_12 TXF_17min_13 TXF_17min_14 * TXF_17min_15