在 《embedded linux primer 》上看到的,其實還有一些分歧和不精確的地方,
比如bootstrap 和bootstrap loader似乎在pc上還有區別,不過還是不影響理解了
又如redboot(redhat embedded debug and bootstrap),本質是乙個bootloader但名字又有bootstrap,讓人鬱悶
這裡僅限於嵌入式+arm+linux環境
bootloader 翻譯為 (第一階段)引導裝入程式
bootstrap loader 翻譯為 第二階段引導裝入程式
bootloader不用多解釋都能理解--上電後執行的第乙個程式,它絕對不會依賴核心。比如uboot、vivi
bootstrap,第二階段引導裝入程式,屬於核心**(沒有被編譯進vmlinux,但是可執行的映象如zimage中含有bootstrap ),充當bootloader和核心映象之間的紐帶。
bootstrap通常會校驗核心映象、解壓縮核心映象、重新部署核心映象到記憶體、為核心執行提供合適的上下文(無非是關中斷、開指令cache和資料cache、設定c語言執行環境)
執行流程
上電-->bootloader -->bootstrap(head.o)-->核心vmlinux(head.o)-->核心start_kernel(main.o)
以上兩個head.o並不相同
bootstrap用的是/arch/arm/boot/compressed/head.s
核心vmlinux用的是/arch/arm/kernel/head.s
雖然都是head.o,但是不在乙個時代了,自此區分開了bootstrap和核心vmlinux
等於你看到uncompressing linux... done, booting the kernel. 還屬於bootstrap
等到列印出第二行核心版本資訊的時候,就已經是真正的核心main.o的時代了
最後配合原書的圖再說一下
乙個嚴格意義上的核心,make的乙個最重要的生成檔案 vmlinux
去掉了符號、標記和注釋後生成了image
gzip壓縮後變成piggy.gz
接下來,乙個名為piggy.s的檔案被彙編成piggy.o
非常有意思的是它僅有7行**,其實就只有把piggy.gz 包含進來的作用
.section .piggydata,#alloc
.globl input_data
input_data:
.incbin "arch/arm/boot/compressed/piggy.gz"
.globl input_data_end
input_data_end:
接著piggy.o同misc.o、head.o等屬於bootstrap的**一起鏈結成為zimage等可以被引導的合成映象。
其中misc.o負責解壓縮、head.o head_xx.o 負責進行核心上下文的初始化
bootloader和bootstrap的區別
bootloader和bootstrap的區別 在 embedded linux primer 上看到的,其實還有一些分歧和不精確的地方,比如bootstrap 和bootstrap loader似乎在pc上還有區別,不過還是不影響理解了 又如redboot redhat embedded debu...
關於BSP,BIOS,和bootloader區別
bsp是板級支援包,是介於主機板硬體和作業系統之間的一層,應該說是屬於作業系統的一部分,主要目的是為了支援作業系統,使之能夠更好的執行於硬體主機板。bsp是相對於作業系統而言的,不同的作業系統對應於不同定義形式的bsp,例如vxworks的bsp和linux的bsp相對於某一cpu來說儘管實現的功能...
Bootloader介紹和啟動
一 bootloader的介紹 1.什麼是bootloader bootloader是硬體啟動的引導程式,是執行作業系統的前提。在作業系統核心或使用者應用程式執行之前執行的一段小 對硬體進行相應的初始化和設定,最終為作業系統準備好環境。2.bootloader的特點 bootloader不屬於作業系...