- ? 1.uboot 調用do_bootm_linux 中的 theKernel (0, machid, bd->bi_boot_params)進入kernel部分代碼
該函數最終會通過r0,r1,r2這三個寄存器分別把0、machid、傳遞傳參的首地址傳給kernel。
- ? 2.Kernel 的入口 在head.S中ENTRY(stext)處, 此階段是匯編階段 ,此階段會解析r0,r1,r2(也就是uboot的傳參)最終會通過進入start_kernel,進入到c語言環境執行。
經過前面uboot的準備工作,通過theKernel (0, machid, bd->bi_boot_params);
開始進入到kernel部分開始執行。
其中 第二個參數為機器 ID,第三參數為 u-boot 傳遞給內核參數存放在內存中的首地址 ,此處是 0x30000100
由 zImage 的生成過程我們可以知道,第一階段運行的內核映像實際就是arch/arm/boot/compressed/vmlinux,而這一階段所涉及的文件也只有三個:
- ? (1)arch/arm/boot/compressed/vmlinux.lds
- ? (2)arch/arm/boot/compressed/head.S
- ? (3)arch/arm/boot/compressed/misc.c
下面我們的分析集中在 arch/arm/boot/compressed/head.S, 適當參考 vmlinux.lds 。
從linux/arch/arm/boot/compressed/vmlinux.lds文件可以看出head.S的入口地址為ENTRY(_start),也就是head.S匯編文件的_start標號開始的第一條指令。
-
內核
+關注
關注
3文章
1372瀏覽量
40277 -
Linux
+關注
關注
87文章
11292瀏覽量
209328 -
Uboot
+關注
關注
4文章
125瀏覽量
28214 -
Kernel
+關注
關注
0文章
48瀏覽量
11159
發布評論請先 登錄
相關推薦
評論