新聞中心

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

        Bootloader 介紹

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

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

        本文引用地址:http://www.104case.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操作系

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 马尔康县| 开平市| 宁波市| 永昌县| 泽普县| 彝良县| 万源市| 敦煌市| 沭阳县| 施秉县| 镇宁| 博客| 新闻| 四平市| 青岛市| 阳江市| 宜君县| 定远县| 道孚县| 兰考县| 许昌县| 新巴尔虎左旗| 东至县| 石楼县| 同德县| 洛川县| 惠州市| 江都市| 鲜城| 囊谦县| 清流县| 台东县| 宣恩县| 调兵山市| 长寿区| 秦安县| 巴林左旗| 德兴市| 日喀则市| 康保县| 普兰店市|