Yocto构建树莓派4B fitImage中嵌入式uEnv.txt的作用与加载时机
关于fitImage中嵌入uEnv.txt的疑问
我正在使用Yocto为Raspberry Pi 4B构建自定义镜像,生成的fitImage中包含如下片段:
bootscr-uEnv.txt { description = "U-boot script"; data = /incbin/("uEnv.txt"); type = "script"; arch = "arm"; compression = "none"; hash-1 { algo = "sha256"; }; };
我的系统通过以太网加载时,U-boot会从SD卡读取uEnv.txt文件(其中包含用于下载fitImage的服务器IP地址),随后fitImage被下载并完成系统启动。现咨询两个问题:
- 将uEnv.txt嵌入fitImage中的目的是什么?
- 该嵌入的uEnv.txt是否会在Kernel启动前被读取?
回答
嵌入uEnv.txt到fitImage的目的:
核心是为了保证启动配置的完整性、可验证性和场景通用性。fitImage是整合了内核、设备树、启动脚本等组件的统一镜像,把uEnv.txt作为启动脚本嵌入后,整个启动相关的配置和核心镜像打包在一起:一方面可以通过内置的sha256哈希校验这个脚本的完整性,避免被篡改;另一方面,在无SD卡的纯网络启动场景下,U-boot可以直接从fitImage里提取这个脚本执行,不需要依赖外部存储介质读取配置。嵌入的uEnv.txt是否会在Kernel启动前被读取:
这完全取决于你的U-boot启动流程配置。在你当前的场景里,U-boot是先从SD卡读取uEnv.txt获取服务器IP来下载fitImage,这个阶段fitImage还没被加载,所以此时不会读取fitImage里的uEnv.txt。只有当fitImage被加载后,如果你在U-boot中配置了从fitImage提取并执行该脚本的逻辑,它才会被读取执行;如果没有相关配置,这个嵌入的脚本只是fitImage的一个静态组件,不会主动被触发读取。
内容的提问来源于stack exchange,提问作者grandzello
相关产品推荐
相关产品推荐

