- • 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浏览量
40274 -
Linux
+关注
关注
87文章
11291浏览量
209309 -
Uboot
+关注
关注
4文章
125浏览量
28213 -
Kernel
+关注
关注
0文章
48浏览量
11157
发布评论请先 登录
相关推荐
评论