bootm调用流程
本文作为一个笔记,记录bootm启动的流程,参考版本:uboot 2021.01
在执行bootm之前,image已经从sd卡读到了内存中,这个要看uboot的参数,是从哪里读取读到哪里
下面的是qemu的下载命令:uboot的命令可以放在代码里面可以放在环境变量里面也可以放在文件里面,例如boot.scr。
fatload mmc 0 0xa1000000 uImage.lz4
fatload mmc 0 0xa8300000 uInitrd.lz4
fatload mmc 0 0xa8000000 kernel.dtb
bootm – 执行命令 : bootm 0xa1000000 0xa8300000 0xa8000000
do_bootm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) – cmd/bootm.c
A. argc–; argv++; //去掉了命令参数中的argv[0],也就是bootm
B. // 如果states包含BOOTM_STATE_OS_GO此函数最终就会boot an OS, 那么这个函数就不会返回了,除非出错了。
// 这里传入的States是0x71f,所以会执行很多子函数
do_bootm_states(cmdtp, flag, argc, argv, states, &images, 1) -- common/bootm.c
1.1 if (states & BOOTM_STATE_START)
ret = bootm_start(cmdtp, flag, argc, argv); -- common/bootm.c
memset 全局变量images,image状态设置为start
2.1 if (!ret && (states & BOOTM_STATE_FINDOS))
ret = bootm_find_os(cmdtp, fla

最低0.47元/天 解锁文章
827

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



