[嵌入式]Bootloader的作用
關(guān)于Bootloader的作用,老師教我們把它當(dāng)作PC的BIOS來理解,但其實(shí)不完全是這么回事。文章參考:
http://www.cnblogs.com/yashi88/archive/2010/02/11/1667548.html
http://hi.baidu.com/shaohua312/item/2284a71e318c1512e3f98636
?
BootLoader 是系統(tǒng)加電后運(yùn)行的第一段代碼。一般它只在系統(tǒng)啟動(dòng)時(shí)非常短的時(shí)間內(nèi)運(yùn)行。
在PC中,整個(gè)BootLoader由BIOS(主板上固化的一段程序)、位于硬盤MBR區(qū)的OS Loader一起組成。BIOS完成第一級(jí)引導(dǎo)加載工作,OS Loader完成第二級(jí)引導(dǎo)加載工作(可能有些系統(tǒng)不只兩級(jí)加載)。上電后,系統(tǒng)開始執(zhí)行BIOS中的代碼,這段代碼負(fù)責(zé)進(jìn)行硬件檢測和資源分配,完成這步工作后,將按照CMOS中設(shè)定的順序檢索硬盤。BIOS將第一個(gè)檢索到的硬盤上MBR中的內(nèi)容讀到系統(tǒng)RAM中,然后將系統(tǒng)控制權(quán)交給相應(yīng)的OS Loader。最后由OS Loader負(fù)責(zé)將所要引導(dǎo)的操作系統(tǒng)的內(nèi)核映象從硬盤上讀到系統(tǒng)RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)上。
而在嵌入式中,通常不存在BIOS那樣的一段固定內(nèi)容的固化的程序。原因是PC平臺(tái)盡管品牌等有差異,但通常都有相近甚至是相同的體系結(jié)構(gòu),遵循一個(gè)共同的工業(yè)標(biāo)準(zhǔn),因而可以使用同一個(gè)BIOS代碼來引導(dǎo)。而通常對(duì)嵌入式系統(tǒng)來說,即使是使用相同的架構(gòu),甚至是同一個(gè)CPU來構(gòu)建,但因?yàn)椴⒉荒茏裱囊粋€(gè)共同的工業(yè)標(biāo)準(zhǔn)。因而在嵌入式系統(tǒng)上除非兩者的各方面與引導(dǎo)過程相關(guān)設(shè)計(jì)完成一致,否則不能使用同一個(gè)BootLoader。
?
其實(shí)Bootloader主要的必須的作用只有一個(gè):就是把操作系統(tǒng)映像文件拷貝到RAM中去,然后跳轉(zhuǎn)到它的入口處去執(zhí)行,我們稱之為啟動(dòng)加載模式,該過程沒有用戶的介入,是它正常工作的模式。它的步驟如下:
Stage1:
1. 硬件設(shè)備初始化。為stage2的執(zhí)行及隨后內(nèi)核的執(zhí)行準(zhǔn)備好基本的硬件環(huán)境
2. 為加載stage2 準(zhǔn)備ram空間。為了獲得更好的執(zhí)行速度,通常吧stage2加載到ram中執(zhí)行
3. 復(fù)制stage2的代碼到ram中
4. 設(shè)置好堆棧
5. 跳轉(zhuǎn)到stage2的c程序入口
Stage2:
1. 初始化本階段要使用的硬件設(shè)備
2. 檢測系統(tǒng)內(nèi)存映射
3. 將內(nèi)核映像和根文件系統(tǒng)映像從flash讀到ram中
4. 為內(nèi)核設(shè)置啟動(dòng)參數(shù)
5. 調(diào)用內(nèi)核
?
然而,在嵌入式開發(fā)中,經(jīng)常需要為一個(gè)嵌入式的硬件系統(tǒng)下載新的Bootloader,操作系統(tǒng)(內(nèi)核,根文件系統(tǒng)系統(tǒng))等,此時(shí)用到的是Bootloader的下載功能,我們稱之為下載模式,該過程有用戶的介入。我在使用uboot的過程中,發(fā)現(xiàn)它提供了基于usb的下載(pc端的dnf),也有基于網(wǎng)絡(luò)的下載(我的開發(fā)板uboot啟動(dòng)的時(shí)候開發(fā)板就已經(jīng)有局域網(wǎng)的ip地址了,網(wǎng)卡已經(jīng)被驅(qū)動(dòng)了,uboot提供了基于tftp協(xié)議的下載,還有其它查看內(nèi)存,格式化存儲(chǔ)器等功能)。
關(guān)于串口終端顯示的信息是不是由Bootloader提供的,我搜索了一下,沒找到相關(guān)信息。但我個(gè)人認(rèn)為串口終端的信息也是Bootloader提供的,用于與用戶交互。
?
所以說,Bootloader并不是可以完全簡單的理解為pc的BIOS。它完成了BIOS+OSLoader的功能,同時(shí)向開發(fā)人員提供系統(tǒng)運(yùn)行的信息及調(diào)試信息,提供了下載功能,及其它輔助功能。
?
下面這段純粹copy過來的
bootloader是不是必須的:
Bootloader并不是必須的,如果我們的硬件有足夠大的norflash,并且實(shí)現(xiàn)了XIP技術(shù),那么WinCE 操作系統(tǒng)可以直接在norflash里面運(yùn)行起來,不需要將它復(fù)制到RAM中去,所以Bootloader就失去了作用。
但是考慮到成本因素,現(xiàn)在的硬件一般都不會(huì)配置這么大的norflash,image文件都存儲(chǔ)在nand flash里面,所以都會(huì)用到Bootloader。
附加說明一下PC上Linux的啟動(dòng)過程:
1.BIOS啟動(dòng),初始化硬件,系統(tǒng)自檢,假設(shè)BIOS設(shè)定為從硬盤啟動(dòng)(這里不考慮光盤,及其它可移動(dòng)存儲(chǔ)設(shè)備)
2.每個(gè)磁盤的首部都有一個(gè)MBR,記錄了分區(qū)信息,還有引導(dǎo)程序,新的硬盤沒有MBR,格式化之后就有了。系統(tǒng)找到硬盤的MBR,根據(jù)MBR里面的引導(dǎo)程序找到要啟動(dòng)的分區(qū)。附圖一張,我常用的引導(dǎo)備份工具,:
3.根據(jù)MBR里面的引導(dǎo)程序,找到要啟動(dòng)的分區(qū),每個(gè)分區(qū)首部都要一個(gè)PBR,PBR里邊可能也有啟動(dòng)信息,根據(jù)MBR里邊的程序來定。附兩張圖:
4.在指定的分區(qū)中加載Linux內(nèi)核,啟動(dòng)操作系統(tǒng)。
?
附件:
U-Boot的常用命令詳解.pdf
下載地址:
http://pan.baidu.com/share/link?shareid=135850&uk=3238766853
轉(zhuǎn)載于:https://www.cnblogs.com/cateats2016/archive/2012/12/06/2804387.html
總結(jié)
以上是生活随笔為你收集整理的[嵌入式]Bootloader的作用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UILabel详解
- 下一篇: iOS RunLoop 初识