uboot启动内核

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

认识 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
);
/*-----------------相关宏定义----------------------*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值