Yocto dunfell分支集成psplash无对应二进制导致启动服务报错
问题根因与解决方案
核心逻辑说明
你遇到的是Poky Dunfell分支下psplash配方的固有设计行为,和编译环节、镜像打包环节的基础流程无关:
- 你标记的可疑代码
rm -f ${D}${bindir}/psplash不是配方bug,是psplash官方的刻意设计:psplash的主程序默认不会安装到目标镜像的/usr/bin路径,只把配套的IPC工具psplash-write安装到该路径,主二进制的启动逻辑是通过systemd服务在开机阶段从内存临时分区加载运行。直接删除这行代码触发的scriplet错误,本质是psplash的post-install脚本中硬编码了删除该文件的逻辑,和实际安装流程不匹配导致的。 - 编译过程在tmp目录生成的psplash二进制属于do_compile阶段的中间产物,本身就不在do_install的打包清单里,自然不会被拷贝到sysroot或者最终镜像中。
你当前配置的错误点
SPLASH = " psplash-default"赋值时带了多余的前置空格,Yocto变量赋值会将前导空格计入变量实际值,最终会导致splash主题名匹配失败- 手动通过
IMAGE_INSTALL_append += " psplash"追加psplash包的方式,本身没有修正psplash默认的文件裁剪逻辑,即使包被安装到镜像里,也不会带上/usr/bin/psplash主二进制 - 之前移除meta-raspberrypi层的psplash内置引用时,没有同步清理层内残留的psplash自定义systemd服务文件,这些硬编码指向
/usr/bin/psplash路径的服务文件,就是触发EXEC报错的直接原因
正确操作步骤
- 移除local.conf中手动追加的
IMAGE_INSTALL_append += " psplash"配置,保留IMAGE_FEATURES += " splash"即可——Dunfell分支中这个splash特性会自动触发psplash的适配安装流程,修正文件裁剪规则,将主二进制正确打入镜像 - 将带前置空格的SPLASH配置修改为
SPLASH = "psplash-default",去掉值前后的多余空格 - 清理meta-raspberrypi层中残留的所有自定义psplash相关service文件,使用Poky原生的psplash systemd配置即可解决路径找不到的报错
- 如果有强制需求需要在
/usr/bin路径保留psplash主二进制,不要直接修改原配方中的删除行,而是通过自定义bbappend在do_install阶段后补充文件拷贝逻辑,避免触发scriplet错误:do_install_append() { install -m 0755 ${B}/psplash ${D}${bindir}/psplash }
内容的提问来源于stack exchange,提问作者Escalion
相关产品推荐
相关产品推荐

