如何在Yocto中覆写linux-firmware配方以排除无用固件?
正确排除Yocto linux-firmware中指定固件的方法
问题原因分析
你之前的bbappend将FILES_${PN}-i915设为空值,会导致linux-firmware-i915子包没有任何可安装文件。若你的镜像默认依赖该子包,Yocto的包管理逻辑会判定该子包无效,进而引发连锁问题,导致所有固件包都未被安装。
解决方案
方案1:排除整个i915固件子包
如果不需要任何i915相关固件,有两种实现方式:
方式A:通过bbappend修改依赖
在你的linux-firmware_git.bbappend中添加以下内容:
# 从主包依赖中移除i915子包 RDEPENDS_${PN} = "${@bb.utils.filter_out('${PN}-i915', d.getVar('RDEPENDS_${PN}'), d)}" # 清空i915子包的文件、依赖与许可证信息,确保它不被构建安装 FILES_${PN}-i915 = "" RDEPENDS_${PN}-i915 = "" LICENSE_${PN}-i915 = "" LICENSE_${PN}-i915-license = "" FILES_${PN}-i915-license = ""
方式B:直接在镜像配置中移除子包
在local.conf文件中添加:
IMAGE_INSTALL_remove += " linux-firmware-i915 "
方案2:仅排除指定的i915固件文件
如果只想移除bxt_dmc_ver1_07.bin和bxt_guc_ver9_29.bin这两个特定固件,保留其他i915固件,可在bbappend中修改FILES_${PN}-i915,精准过滤不需要的文件:
# 保留i915目录下所有固件,仅排除指定的两个文件 FILES_${PN}-i915 = "${nonarch_base_libdir}/firmware/i915/* !${nonarch_base_libdir}/firmware/i915/bxt_dmc_ver1_07.bin !${nonarch_base_libdir}/firmware/i915/bxt_guc_ver9_29.bin"
这种写法通过!符号排除特定文件,既保留了其他i915固件,又移除了你不需要的目标文件。
内容的提问来源于stack exchange,提问作者Andrew Ellis
相关产品推荐
相关产品推荐

