在外部USB HDD上为i.MX8构建Yocto时路径报错如何解决?
问题根因
你遇到的Errno 22错误和挂载路径解析无关,是外接USB HDD的文件系统不支持Yocto/bitbake生成的sstate缓存文件名里的冒号(:)字符。默认自动挂载的NTFS/FAT32格式分区禁止文件名包含冒号、问号等特殊字符,直接触发系统调用错误。
解决方案
你可以根据自己的需求选择任意一种方案修复:
- 方案1:重新格式化外接硬盘为Linux原生文件系统(推荐,性能和兼容性最优)
- 先备份外接硬盘里的所有重要数据,格式化操作会清空全部分区内容
- 执行
sudo fdisk -l确认外接硬盘的分区设备号(比如/dev/sdb1,注意不要填错本地硬盘的设备号) - 卸载已挂载的分区:
sudo umount /media/home_dir/427AD2297AD2198D - 格式化为EXT4格式:
sudo mkfs.ext4 /dev/sdb1(替换为你自己的分区设备号) - 建议配置固定挂载路径避免后续路径变动:
创建固定挂载目录:sudo mkdir /mnt/yocto_build
临时挂载测试:sudo mount /dev/sdb1 /mnt/yocto_build
给普通用户赋权:sudo chown -R $USER:$USER /mnt/yocto_build - 把之前的imx-yocto-bsp构建目录整体移动到新挂载路径下,重新执行bitbake命令即可
- 方案2:不修改文件系统,调整bitbake配置规避特殊字符限制
如果不想格式化硬盘,可以修改构建配置替换sstate文件名的特殊字符:- 打开构建目录下的
conf/local.conf文件 - 添加如下配置项:
# 替换sstate文件名中的冒号为下划线,兼容非Linux原生文件系统 SSTATE_PATTERN = "sstate-${PN}-${PV}-${PR}-${MACHINE}-${BUILD_ARCH}-${TUNE_PKGARCH}-${PACKAGE_ARCH}_${BB_TASKHASH}.tgz" SSTATE_HASHEQUIV_METHOD = "opaque"- 清空之前生成的残缺sstate缓存:
rm -rf sstate-cache/* - 重新执行
bitbake core-image-minimal构建命令即可
- 打开构建目录下的
内容的提问来源于stack exchange,提问作者Designalog
相关产品推荐
相关产品推荐

