久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > Bootloader 介紹

Bootloader 介紹

作者: 時間:2016-11-11 來源:網絡 收藏
bootloader的定義:

相當于pc機的BIOS,在操作系統啟動內核運行之前運行的一段小程序,通過這段小程序我們可以初始化cpu內部的硬件設備,建立內存空間映射范圍,從而將系統的軟硬件環境帶到一個合適的狀態,以便最終調用os內核準備好正確的環境。

本文引用地址:http://cqxgywz.com/article/201611/316751.htm

可以得出bootloader主要有2個任務,1是初始化cpu內部的硬件設備,2是將os kernel帶到內存中去。

在講bootloader之前,我們先講講pc機的啟動過程,

pc機中有bois,這個是固化在硬件的,當pc機一加電以后,bios就會自己啟動,完成硬件檢測和資源的分配,然后將硬盤中的引導程序調入內存,然后把控制權交給引導程序,引導程序主要的用途就是將操作系統的kernel調入內存,然后跳轉到內核的開始地址,然后os就開始啟動了。

就pc而言,啟動的過程相對復雜,從bios--->引導程序(grub等)---->os

但是嵌入式系統來說,他沒有bios這樣硬件,所以它的啟動過程全部都是交給bootloader去完成的。

bootloader是放在flash的最前面的位置,原因是:

系統在加電或復位的時候,所有的cpu通常都從cpu制造商預先安排地址開始執行的,(通常是0x00000000位置),所以bootloader通常是放在flash中的最前面的位置。

這是一個簡易的flash分布圖,bootloader在flash的最前端。

關于bootloader的啟動過程還可以分為兩種,1是單階段,2是多階段的

現在很多的bootloader是2個階段的

stage 1 的步驟(用的是匯編)

1是初始化硬件設備(cpu內存的硬件設備)

2是初始化stage2 要使用的內存空間

3是把stage 2的代碼copy到內存中去

4初始話堆棧

5是跳轉到c的入口函數

stage 2(c語言)

1.初始化本階段的硬件設備(板載硬件設備)

2.將os kernel導入到內存中去

3.調用內核

stage 1是用匯編寫,主要是是為了配置能讓c語言運行環境。

這個是一個具體的flash的結構圖,bootloader 在執行第一個部分的時候,也就是stage1的時候,會把bootloader stage2這部分copy到ram中去運行,為什么呢,我覺得一個在內存中運行總是比在flash中執行要好,第二我覺得能執行code的flash必須是nor flash,這樣的flash相對成本也就高了。所以就會產生這個部分。當stage2的時候,會將kernel也copy到內存中,然后在結束的階段,讓執行地址跳轉到操作系統的入口地址,那樣的話操作系統也就自己啟動來了。

如果分析過2440的官方代碼的話,里面有一個start.s 這個匯編代碼,這可以看成一個小型的bootloader,因為他也完成了自啟動的過程,不過他啟動的是你的程序而不是操作系統,不過作用很相似。

在上面我們知道bootloader stage1這個階段的代碼是運行在flash中的,如果flash是nor flash的話也是可以的,不過如果你的開發板是不帶nor flash的話則就不能了。nand flash是不能讓代碼運行在flash的,所以他的自啟動過程是比較復雜的。他的cpu有一個4k ram 在加電的時候是被當作墊腳石使用的,當板子加電以后,硬件會自動把flash最前面的code copy到這個內存中的,也就是bootloader stage1這個部分,在這4kB的空間中的代碼必須要完成講代碼copy的內存中去

對于bootloader的研究我覺得可以看一下start.s這個源代碼,你會知道的更加清楚,不過是匯編的,理解起來會有點困難,要耐心看的.....

還有關于bootloader的移植,為什么要進行bootloader的移植呢,原因有2個

1是因為不同的板子之間的cpu體系結構不一樣...

2是因為不同的板子之間的外圍硬件設備不一樣...



關鍵詞: Bootloader操作系

評論


技術專區

關閉