<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

Bootloader 介紹

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
bootloader的定義:

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

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

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

在講bootloader之前,我們先講講pc機的啟動(dòng)過(guò)程,

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

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

但是嵌入式系統來(lái)說(shuō),他沒(méi)有bios這樣硬件,所以它的啟動(dòng)過(guò)程全部都是交給bootloader去完成的。

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

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

這是一個(gè)簡(jiǎn)易的flash分布圖,bootloader在flash的最前端。

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

現在很多的bootloader是2個(gè)階段的

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

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

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

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

4初始話(huà)堆棧

5是跳轉到c的入口函數

stage 2(c語(yǔ)言)

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

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

3.調用內核

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

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

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

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

對于bootloader的研究我覺(jué)得可以看一下start.s這個(gè)源代碼,你會(huì )知道的更加清楚,不過(guò)是匯編的,理解起來(lái)會(huì )有點(diǎn)困難,要耐心看的.....

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

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

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



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

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>