向BusyBox添加i2cdetect/i2ctransfer后Yocto构建失败求助
Yocto构建STM32MP157镜像时BusyBox添加i2cdetect的问题解决
环境与问题
- 环境:VirtualBox 7.0,Ubuntu 22.04.1镜像
- 目标:基于Digi-Key教程为STM32MP157构建Yocto Linux镜像,需向BusyBox添加
i2cdetect工具 - 问题现象:
- 添加配置后执行
bitbake custom-image出现FileExistsError:Exception: FileExistsError: [Errno 17] File exists: '/bin/busybox.suid' -> '/home/vboxuser/Projects/yocto/build-mp1/tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/busybox/1.36.1-r0/package/usr/lib/busybox/ptest/bin/i2cdetect' - 执行
bitbake -c do_cleanall busybox和bitbake -c do_cleanall custom_image后可成功构建,但镜像中无i2cdetect工具;替换为添加i2ctransfer时问题相同,且已确认meta/recipes-core/busybox/busybox.inc包含相关补丁。
- 添加配置后执行
解决方案
1. 正确配置BusyBox工具启用
不要直接修改busybox.inc,推荐通过自定义bbappend文件或local.conf来启用工具,避免覆盖上游配置:
- 方法一:使用bbappend文件
- 在自定义meta层(如
meta-custom)创建路径recipes-core/busybox/ - 创建
busybox_%.bbappend文件,内容如下:FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI += "file://busybox.cfg" PTEST_ENABLED = "0" - 在同目录的
files/文件夹下创建busybox.cfg,添加需要的工具配置:CONFIG_I2CDETECT=y CONFIG_I2CTRANSFER=y
- 在自定义meta层(如
- 方法二:直接在local.conf中添加
在build-mp1/conf/local.conf中追加:BUSYBOX_CONFIG_ADDITIONS += "CONFIG_I2CDETECT=y CONFIG_I2CTRANSFER=y" PTEST_ENABLED_pn-busybox = "0"
2. 解决FileExistsError冲突
错误源于BusyBox的ptest测试套件与工具安装路径冲突,禁用ptest即可解决该报错(上述配置中已包含PTEST_ENABLED = "0")。若仍有残留,手动清理ptest临时文件:
rm -rf /home/vboxuser/Projects/yocto/build-mp1/tmp/work/*/busybox/*/ptest
3. 确保配置生效的构建流程
清理后需强制重新生成BusyBox配置并编译,避免旧配置残留:
bitbake busybox -c do_configure -f bitbake busybox -c do_compile -f bitbake custom-image
可提前验证配置是否生效:
cat /home/vboxuser/Projects/yocto/build-mp1/tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/busybox/1.36.1-r0/build/.config | grep I2CDETECT
若输出CONFIG_I2CDETECT=y则配置已生效。
4. 镜像内工具验证
构建完成后启动QEMU或烧录镜像到硬件,验证工具存在:
which i2cdetect ls -l /usr/bin/i2cdetect
正常情况下i2cdetect是指向/bin/busybox的软链接。
内容的提问来源于stack exchange,提问作者PiotrBzdrega
相关产品推荐
相关产品推荐

