修改目录名后Bitbake无法找到SRC_URI指定文件的问题
问题原因及解决方法
核心原因分析
出现该问题的核心是路径匹配错误或Bitbake缓存未彻底清理,具体分以下几种情况:
1. 路径层级拼写错误
修改目录名时,你可能只更改了目录本身的名称,未同步修正SRC_URI中的完整路径:
- 原始目录结构为
configs/fs,若之前配方隐含将configs作为搜索根目录(比如设置了FILESDIR = "${THISDIR}/configs"),则SRC_URI += "file://fs"可正常生效; - 改目录名为
fsconfigs后,若实际目录是configs/fsconfigs,但你将SRC_URI写成file://fsconfigs却省略了configs/前缀,Bitbake会在默认搜索路径而非configs目录下查找fsconfigs,自然无法找到目标文件。
2. FILESDIR配置未同步
若配方之前通过FILESDIR指定了配置文件的根目录(比如FILESDIR = "${THISDIR}/configs"),改目录名后需确认:
- 新目录
fsconfigs确实处于FILESDIR指定的路径下; SRC_URI中的路径是相对于FILESDIR的相对路径,而非错误层级的路径。
3. 缓存未彻底清除
尽管执行了bitbake -c clean或bitbake -c cleanall,Bitbake的部分缓存仍可能残留:
tmp/work目录下对应包的工作目录(如tmp/work/<arch>/compliance-config/1.0-r0/)可能保留旧文件索引;- 共享状态缓存
sstate-cache中可能存有旧构建元数据,导致Bitbake仍按旧路径查找资源。
解决步骤
步骤1:核对路径一致性
- 确认实际目录结构:确保改后目录为
./configs/fsconfigs(与原结构层级一致); - 修正
SRC_URI路径:
若未设置FILESDIR,需写完整相对路径:
若已设置SRC_URI += "file://configs/fsconfigs"FILESDIR = "${THISDIR}/configs",则保持相对路径即可:FILESDIR = "${THISDIR}/configs" SRC_URI += "file://fsconfigs" - 同步修正
do_install中的路径:do_install() { install -d ${D}${sysconfdir}/modprobe.d/ install -m 0644 ${WORKDIR}/fsconfigs/*.conf ${D}${sysconfdir}/modprobe.d/ }
步骤2:彻底清理缓存
- 清理目标包的所有缓存:
bitbake compliance-config -c cleanall - 手动删除对应工作目录(若
cleanall无效):rm -rf tmp/work/*/compliance-config/1.0-r0/ - 若共享状态缓存干扰,可临时禁用(构建完成后恢复原设置):
在local.conf中添加:SSTATE_DIR = "${TOPDIR}/tmp/sstate-disabled"
步骤3:验证路径搜索逻辑
通过以下命令查看Bitbake搜索file://资源的路径列表,确认新目录所在路径是否在其中:
bitbake compliance-config -e | grep -E "^FILESPATH="
若configs目录不在输出路径中,需显式将其添加到FILESPATH或调整FILESDIR配置。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

