You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitbake构建镜像后udev规则文件未在目标路径显示问题

Bitbake 打包自定义udev规则丢失问题修复

首先明确:install -D 命令会自动递归创建目标路径的所有父目录,不需要手动执行mkdir创建规则存放目录,这不是你遇到问题的原因。
按优先级排查以下常见问题:

  • 未声明打包文件路径:独立编写的Bitbake recipe默认不会自动把do_install放到${sysconfdir}目录下的文件纳入输出包,你需要在.bb文件中显式声明文件所属包,添加配置:
    FILES_${PN} += "${sysconfdir}/udev/rules.d/83-duplicate_dev.rules"
    
    缺这行配置的话,do_install阶段虽然会把文件临时放到工作目录的${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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:12:21