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