在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            Bootloader 介紹

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

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

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

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

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

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

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

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

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

            系統(tǒng)在加電或復(fù)位的時候,所有的cpu通常都從cpu制造商預(yù)先安排地址開始執(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導(dǎo)入到內(nèi)存中去

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

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

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

            如果分析過2440的官方代碼的話,里面有一個start.s 這個匯編代碼,這可以看成一個小型的bootloader,因?yàn)樗餐瓿闪俗詥拥倪^程,不過他啟動的是你的程序而不是操作系統(tǒng),不過作用很相似。

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

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

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

            1是因?yàn)椴煌陌遄又g的cpu體系結(jié)構(gòu)不一樣...

            2是因?yàn)椴煌陌遄又g的外圍硬件設(shè)備不一樣...



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

            評論


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

            關(guān)閉