Bitbake构建镜像后udev规则文件未在目标路径显示问题
Bitbake 打包自定义udev规则丢失问题修复
首先明确:install -D 命令会自动递归创建目标路径的所有父目录,不需要手动执行mkdir创建规则存放目录,这不是你遇到问题的原因。
按优先级排查以下常见问题:
- 未声明打包文件路径:独立编写的Bitbake recipe默认不会自动把do_install放到
${sysconfdir}目录下的文件纳入输出包,你需要在.bb文件中显式声明文件所属包,添加配置:
缺这行配置的话,do_install阶段虽然会把文件临时放到工作目录的FILES_${PN} += "${sysconfdir}/udev/rules.d/83-duplicate_dev.rules"${D}对应路径下,但打包阶段会直接丢弃未声明的文件,最终烧录的镜像里自然找不到对应规则。 - 未将recipe加入镜像安装列表:编写完.bb文件后,需要确认对应包被纳入镜像构建列表,可以在构建配置(比如local.conf或者对应镜像的recipe文件)中添加配置,注意
append后的值开头要保留空格:IMAGE_INSTALL_append = " 你的recipe名称" - 源文件路径校验:确认
83-duplicate_dev.rules文件确实存放在和.bb文件同级的files目录下,文件名大小写完全匹配。如果路径不对,构建的do_fetch阶段就会抛出找不到源文件的报错,构建全程无报错的话可以跳过这步检查。 - 路径规范提示:系统内置udev规则更推荐存放到
${nonarch_base_libdir}/udev/rules.d/(对应系统路径/lib/udev/rules.d/),/etc/udev/rules.d/设计上是给用户运行时自定义覆盖规则用的,不过存放到etc路径本身不会导致文件丢失,仅为规范建议。
修正后可用的.bb文件参考
SUMMARY = "Custom udev rule for duplicate device handling" LICENSE = "CLOSED" FILESEXTRAPATHS_prepend := "${THISDIR}/files:" SRC_URI = "file://83-duplicate_dev.rules" do_install() { install -D -m 0644 ${WORKDIR}/83-duplicate_dev.rules ${D}${sysconfdir}/udev/rules.d/83-duplicate_dev.rules } FILES_${PN} += "${sysconfdir}/udev/rules.d/83-duplicate_dev.rules"
快速验证技巧:构建完成后可以直接到构建工作目录的
tmp/work/对应架构/你的recipe名/版本/packages-split/目录下,查看对应输出包的目录内是否存在目标rules文件:如果这里能找到文件但镜像里没有,说明包没被加入镜像安装列表;如果这里就找不到文件,说明FILES配置或者do_install逻辑有问题。
内容的提问来源于stack exchange,提问作者bilumer
相关产品推荐
相关产品推荐

