U-Boot启动后做的事情

启动后最主要执行的就是main_loop函数了

详细解释一下这段代码

46行,定义的s是用来判断用户有没有打断bootdelay_process的,没打断则赋值为bootdelay_process的返回值用于autoboot_command(s)自启动Linux

48行,标记U-Boot的阶段进入main_loop在bootstage工具里面可以看到main_loop标记

51行,如果开了版本变量配置,就把Uboot的版本字符串(如U-Boot 2017.04)存进环境变量ver,后面可以跟Uboot交互的时候使用可以用 printenv ver 查看版本,方便调试/脚本使用

54行,初始化命令行接口

  • 注册所有内置命令(help、printenv、setenv、boot、mmc 等)。
  • 初始化 hush shell(如果 CONFIG_HUSH_PARSER=y,更高级的 shell 支持 if/while 等)。
  • 设置提示符(CONFIG_SYS_PROMPT,如 "=>")

56行,执行环境变量中定义的 preboot 命令(如果存在,preboot 是用户自定义的预启动脚本

比如打印一些信息,点个灯,设置一些环境变量啥的

举例:preboot=echo "Running preboot..."; 设置一些环境变量啥的; ...

58行,从配置的TFTP服务器下载新镜像并且烧录,一般不开

62行,等待有没有交互,没有交互就返回s,返回值s就是接下来要执行的命令字符串(自启动Linux的命令)

63行,校验设备树,常见于启用 CONFIG_FIT_SIGNATURE 或 CONFIG_SECURE_BOOT 的平台。

66行,如果s不为空(即bootdelay_process正常结束),则执行bootcmd,启动Linux

68行,66行没运行,说明前面bootdelay_process阶段被打断了,那么这里就进入命令行循环,开始在console进行交互

总的来说

main_loop就是U-Boot的"待机界面+自启动",在delay的几秒里面等待用户通过之前配置的console敲键盘,如果不敲,就"按下"自启动按钮,启动Linux,敲了的话就进入一个命令行开始交互

相关推荐
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
丰锋ff4 小时前
压缩命令笔记
linux
GeW6 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
by209996 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享
cq林志炫6 小时前
两个Linux服务器之间同步文件
linux·运维·服务器
无人生还别怕7 小时前
如何搭建k8s服务(containerd部署)
linux·云原生·容器·kubernetes·openanolisos
企鹅侠客8 小时前
Linux CPU 负载平均值(Load Average)详解:从原理到实践
linux·运维·服务器·服务器负载
易点云徐源8 小时前
HP 暗影精灵 PRO 16 安装双系统后,开机直接进入 Windows,按 F9 才能进入 Ubuntu:GRUB 菜单不显示的处理方法
linux·运维·ubuntu
第404号工位9 小时前
离职退电脑前别只点“清空回收站”!手把手教你彻底抹除凭证与数字痕迹
linux·python·架构
就像楞次定律9 小时前
【Linux 学习记之二】C++ 构建体系与底层链接机制的深度透视(1)
linux·后端