嵌入式 Bootloader的作用

2022-07-21 02:39:09 字數 2171 閱讀 7208

關於bootloader的作用,老師教我們把它當作pc的bios來理解,但其實不完全是這麼回事。文章參考:

bootloader是系統加電後執行的第一段**。一般它只在系統啟動時非常短的時間內執行。

在pc中,整個bootloader由bios(主機板上固化的一段程式)、位於硬碟mbr區的os loader一起組成。bios完成第一級引導載入工作,os loader完成第二級引導載入工作(可能有些系統不只兩級載入)。上電後,系統開始執行bios中的**,這段**負責進行硬體檢測和資源分配,完成這步工作後,將按照cmos中設定的順序檢索硬碟。bios將第乙個檢索到的硬碟上mbr中的內容讀到系統ram中,然後將系統控制權交給相應的os loader。最後由os loader負責將所要引導的作業系統的核心映象從硬碟上讀到系統ram中,然後跳轉到核心的入口點上。

而在嵌入式中,通常不存在bios那樣的一段固定內容的固化的程式。原因是pc平台儘管品牌等有差異,但通常都有相近甚至是相同的體系結構,遵循乙個共同的工業標準,因而可以使用同乙個bios**來引導。而通常對嵌入式系統來說,即使是使用相同的架構,甚至是同乙個cpu來構建,但因為並不能遵循的乙個共同的工業標準。因而在嵌入式系統上除非兩者的各方面與引導過程相關設計完成一致,否則不能使用同乙個bootloader。

其實bootloader主要的必須的作用只有乙個:就是把作業系統映像檔案拷貝到ram中去,然後跳轉到它的入口處去執行,我們稱之為啟動載入模式,該過程沒有使用者的介入,是它正常工作的模式。它的步驟如下:

stage1:

1. 硬體裝置初始化。為stage2的執行及隨後核心的執行準備好基本的硬體環境

2. 為載入stage2 準備ram空間。為了獲得更好的執行速度,通常吧stage2載入到ram中執行

3. 複製stage2的**到ram中

4. 設定好堆疊

5. 跳轉到stage2的c程式入口

stage2:

1. 初始化本階段要使用的硬體裝置

2. 檢測系統記憶體對映

3. 將核心映像和根檔案系統映像從flash讀到ram中

4. 為核心設定啟動引數

5. 呼叫核心

關於串列埠終端顯示的資訊是不是由bootloader提供的,我搜尋了一下,沒找到相關資訊。但我個人認為串列埠終端的資訊也是bootloader提供的,用於與使用者互動。

下面這段純粹copy過來的

bootloader是不是必須的:

bootloader並不是必須的,如果我們的硬體有足夠大的norflash,並且實現了xip技術,那麼wince 作業系統可以直接在norflash裡面執行起來,不需要將它複製到ram中去,所以bootloader就失去了作用。

但是考慮到成本因素,現在的硬體一般都不會配置這麼大的norflash,image檔案都儲存在nand flash裡面,所以都會用到bootloader。

附加說明一下pc上linux的啟動過程:

1.bios啟動,初始化硬體,系統自檢,假設bios設定為從硬碟啟動(這裡不考慮光碟,及其它可移動儲存裝置)

2.每個磁碟的首部都有乙個mbr,記錄了分割槽資訊,還有引導程式,新的硬碟沒有mbr,格式化之後就有了。系統找到硬碟的mbr,根據mbr裡面的引導程式找到要啟動的分割槽。附圖一張,我常用的引導備份工具,:

3.根據mbr裡面的引導程式,找到要啟動的分割槽,每個分割槽首部都要乙個pbr,pbr裡邊可能也有啟動資訊,根據mbr裡邊的程式來定。附兩張圖:

4.在指定的分割槽中載入linux核心,啟動作業系統。

附件:

u-boot的常用命令詳解.pdf

嵌入式Bootloader小述

bootloader的概念 bootloader就是在作業系統核心執行之前執行的一段程式,類似於pc機中的bios程式。bootloader的功能就是完成硬體裝置的初始化 建立記憶體空間的對映圖的功能,將系統的軟硬體環境帶到乙個合適的狀態,為最終呼叫系統核心做好準備。嵌入式中的bootloader一...

嵌入式 BootLoader 技術內幕

在專用的嵌入式板子執行 gnu linux 系統已經變得越來越流行。乙個嵌入 式 linux 系統從軟體的角度看通常可以分為四個層次 引導引導程式。包括固化在韌體 firmware 中的 boot 可選 和 boot loader 兩大部分。linux 核心。特定於嵌入式板子的定製核心以及核心的啟動...

深入嵌入式系統的 BootLoader

黑公尺 設定核心的啟動引數 是啊 我原來以為只要傳乙個大小就可以了,不用管幾段的。結果掛載ramdisk的時候 就是識別不到第2個控制器上的映像。但是uboot確是可以使用的。呵呵 這也是經驗吧 記憶體段tag的設定 static void setup memory tags bd t bd 初始化...