BIOS、BootLoader、uboot對比


轉載:http://blog.csdn.net/conowen/article/details/7253620

BIOS

BIOS是英文"Basic Input Output System"的縮略語,直譯過來后中文名稱就是"基本輸入輸出系統"。其實,它是一組固化到計算機內主板上一個ROM芯片上的程序,它保存着計算機最重要的基本輸入輸出的程序、系統設置信息、開機后自檢程序和系統自啟動程序。 其主要功能是為計算機提供最底層的、最直接的硬件設置和控制。

BootLoader

PC機中的引導加載程序由BIOS(其本質是一段固件程序)和GRUB或LILO一起組成。BIOS在完成硬件檢測和資源分配后,將硬盤中的引導程序讀到系統內存中然后將控制權交給引導程序。引導程序的主要任務是將內核從硬盤上讀到內存中,然后跳轉到內核的入口點去運行,即啟動操作系統。

BootLoader是一段小程序,可以把它想象成PC機linux上的GRUB/LILO引導程序,只不過在嵌入式linux中,沒有BIOS,而是直接從flash中運行,來裝載內核。它可以初始化硬件設備,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統做好准備。

簡單地說,BootLoader就是在操作系統運行之前運行的一段小程序。通過這段小程序,可以初始化硬件設備,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統做好准備。

一個嵌入式系統從軟件角度來看分為三個層次:
1.引導加載程序
包括固化在固化中的boot程序(可選),和BootLoader兩大部分
2.linux內核
特定於嵌入式平台的定制內核
3.文件系統
包括了系統命令和應用程序

--------------------------------------------------------------------------------
 BootLoader-->Boot Parameters-->Kernel-->Root Filesystem 
--------------------------------------------------------------------------------

為什么需要進行bootloader移植?
答:1.因為每種不同的CPU體系結構都有不同的BootLoader
2.BootLoader依賴於具體的嵌入式板級設備的配置
--------------------------------------------------------------------------------
BootLoader啟動過程可分為單階段和多階段(stage1、stage2),其中stage1完成初始化硬件,如CPU寄存器、內存控制器,為stage2准備內存空間。一般stage1是可以直接在nor flash中運行的,並將stage2復制到內存RAM中,設置堆棧,然后跳轉到stage2(從這也可以看出stage2是在RAM中運行的,與stage1不同)

BootLoader的stage1通常包括以下步驟:
1.硬件設備初始化  如CPU寄存器、內存控制器
2.為加載BootLoader的stage2准備RAM空間
3.拷貝BootLoader的stage2到RAM空間中
4.設置好堆棧    為什么?為了跳轉到stage2的入口,因為stage2大多數是用C語言寫的
5.跳轉到stage2的C入口點

BootLoader的stage2通常包括以下步驟:
1.初始化本階段要使用到的硬件設備    各種設備,如網卡
2.將內核映像和根文件系統映像從flash上讀到RAM中去
3.調用內核

--------------------------------------------------------------------------------

Uboot

Uboot用於多種嵌入式CPU的BootLoader程序
支持多種嵌入式操作系統的引導
UBOOT目錄結構
1.Borad        與開發板有關的文件。第一個開發板都以一個子目錄出現在當前目錄中
2.Common    實現Uboot支持的命令
3.Cpu        與特定CPU架構相關的代碼,支持的CPU對應一個子目錄(注意CPU與開發板的區別)
3.Disk        對磁盤的支持
4.Doc        文檔目錄
5.Drivers    Uboot支持的設備驅動程序  如各種網卡、串品、USB、支持CFI的Flash
6.Fs         文件系統的支持
7.Iclude    Uboot使用的頭文件。該目錄下configs目錄有與開發板相關的配置頭文件        該目錄下的asm目錄有與CPU體系結構相關的頭文件
8.Net        與網絡協議相關的代碼    各路協議的實現
9.Tools        生成Uboot的工具,如:mkimage,crc等等

Uboot編譯分為兩步
1.執行每種board相關的配置    如:make amdk_2420
2.編譯生成uboot.bin文件        如:make CROSS_COMPILE=arm-linux-(指定正確路徑)

 

u-boot終極目的就是啟動內核 。。。。分兩步

a. 從flash讀出內核UImage, 分區名不重要, 關鍵是代碼中寫死的 分區起始地址。。。

b. 啟動內核, do_bootm_linux

do_bootm_linux又分兩步,設置啟動參數,告訴內核一些參數(有一個起始地址,按固定格式寫入),跳到內核入口地址再啟動內核,內核啟動后要讀取設置的參數可以從起始地址讀取。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM