嵌入式 ARM Linux啟動流程

2021-09-29 15:09:40 字數 1199 閱讀 2478

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...