ARM Linux啟動流程 前傳

2021-07-25 02:31:51 字數 1014 閱讀 9628

zimage是由乙個壓縮後的核心piggy.o,連線上一段初始化及解壓功能的**(head.o misc.o)組成的。

核心從什麼地方開始執行呢?當然要看lds檔案啦。zimage的 生成經歷了兩次大的鏈結過程:

一次是頂層根目錄下vmlinux的生成,由arch/arm/boot/vmlinux.lds(這個lds檔案是由 arch/arm/kernel/vmlinux.lds.s生成的)決定;

另一次是arch/arm/boot/compressed/vmlinux 的生成,是由arch/arm/boot/compressed/vmlinux.lds(這個lds檔案是由 arch/arm/boot/compressed/vmlinux.lds.in生成的)決定。

所以,zimage的入口點應該由 arch/arm/boot/compressed/vmlinux.lds決定。擷取/vmlinux.lds部分內容,如下所示。從中可以看出入口點為『_start』

output_arch(arm)

entry(_start)

sections

並且,arch/arm/boot/compressed/makefile裡有如下兩句:

head    = head.o

$(obj)/vmlinux:

$(obj)/vmlinux.lds $(obj)/$(

head) $(obj)/piggy.o \

$(addprefix $(obj)/, $(

objs)) force

所以,zimage的入口點便是arch/arm/boot/compressed/head.s裡的start。其整個流程如下:

Arm linux 啟動流程

了解完kernel啟動以前的彙編之後我們來看看正式的c語言啟動 也就是我們的start kernel函式了。start kernel相當大,裡面每乙個呼叫到的函式都足夠我們傷腦筋了,我這裡只是淺嘗輒止的描述一下函式的功能,從而對kernel啟動的過程有乙個比較直觀的了解。很多函式真正理解需要對lin...

Arm linux啟動流程

linux啟動 分為以下三部分 彙編編寫的體系結構相關的部分 c語言編譯的體系結構相關的部分 c語言編譯的體系結構無關的部分 核心映象的生成 核心啟動流程 1.彙編部分 核心啟動入口 核心編譯連線後生成的elf映像檔案是vmlinux,從核心源 頂層目錄的makefile中可以找到vmlinux的生...

arm linux 啟動流程分析

arm linux啟動總體過程 bootloader kernel rootfs.bootloader 一般的soc中一般會有一塊sdram 又叫墊腳石 當soc上電時,soc中固化的 會根據啟動方式從nand,emmc等不同儲存上,載入bootloader到sdram,進而執行。也就是說soc上電...