认识 uboot 和 内核 之间不可不说的关系
uboot 镜像为 uboot.bin,Linux 镜像为 zImage
嵌入式设备中的分区表是自己定义的,uboot 和内核中的分区表应一致
内核运行前必须加载到 ddr 中指定的地址处
uboot 需要提供内核必要的参数
内核启动的方式
uboot 启动内核有两种方式,一种是等待倒计时结束后直接启动内核,一种是在 uboot 命令行中使用 boot 命令启动内核
其代码分别如下
其中 parse_string_outer 的作用是解析 boot 参数并执行
/*------------------倒计时----------------------*/
s = getenv ("bootcmd");
if (bootdelay >= 0 && s && !abortboot (bootdelay)) {
...
parse_string_outer(s, FLAG_PARSE_SEMICOLON |
FLAG_EXIT_FROM_LOOP);
...
}
/*------------------命令行----------------------*/
int do_bootd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
...
if (parse_string_outer (getenv ("bootcmd"),
FLAG_PARSE_SEMICOLON | FLAG_EXIT_FROM_LOOP) != 0)
rcode = 1;
...
}
U_BOOT_CMD(
boot, 1, 1, do_bootd,
"boot - boot default, i.e., run 'bootcmd'\n",
NULL
);
/*-----------------相关宏定义----------------------*/

本文详细介绍了uboot启动Linux内核的过程,包括内核启动方式、加载内核到DDR、内核镜像生成及启动参数传递。uboot通过movi指令从SD卡加载内核到DDR中,然后通过do_bootm系列函数启动内核,传参过程至关重要,涉及结构体tag和ATAGs。最后总结了uboot启动内核的四个关键步骤。
最低0.47元/天 解锁文章
865

被折叠的 条评论
为什么被折叠?



