新聞中心

Bootloader 介紹

作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
bootloader的定義:

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

本文引用地址:http://butianyuan.cn/article/201611/316751.htm

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

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

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

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

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

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

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

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

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

現(xiàn)在很多的bootloader是2個階段的

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

1是初始化硬件設(shè)備(cpu內(nèi)存的硬件設(shè)備)

2是初始化stage2 要使用的內(nèi)存空間

3是把stage 2的代碼copy到內(nèi)存中去

4初始話堆棧

5是跳轉(zhuǎn)到c的入口函數(shù)

stage 2(c語言)

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

2.將os kernel導入到內(nèi)存中去

3.調(diào)用內(nèi)核

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

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

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

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

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

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

1是因為不同的板子之間的cpu體系結(jié)構(gòu)不一樣...

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



關(guān)鍵詞: Bootloader操作系

評論


技術(shù)專區(qū)

關(guān)閉