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 負責進行核心上下文的初始化
嵌入式linux啟動流程
s3c6410 map io裡面呼叫 mach s3c6410下的cpu.c中 各個成員函式在不同時期被呼叫 1.init machine 在 arch arm kernel setup.c 中被 customize machine 呼叫,放在 arch initcall 段裡面,會自動按順序被呼叫...
ARM Linux與嵌入式開發
arm linux開發與mcu開發有何不同?針對arm linux程式的開發,主要分為三類 應用程式開發 驅動程式開發 系統核心開發。linux核心與驅動 會51嗎?會c嗎?如bai果不會的話就有點難du度哦!會的話就學起來稍微輕zhi松一點,只dao是輕鬆一點。學arm肯定要先看彙編指令的,等指令...
嵌入式linux核心啟動流程
核心構成分析 uimage構成 arm linux核心映像uimage生成過程 u boot認為zimage為自解壓檔案 zimage decompress code head.s misc.s compressed vmlinux vmlinux vmlinux init arch arm ker...