NXP MCU 技术论坛
直播中

张玲

8年用户 1348经验值
私信 关注
[问答]

Errno22构建镜像/尝试获取包时出错怎么解决?

我在尝试构建任何映像或对任何包进行位烘焙时收到以下错误(例如:bitbake 核心映像最小 or bitbake u-boot-imx (位烘焙 u-boot-imx)) ,则出现以下错误:

导致此异常/失败的 python 调用的堆栈跟踪为:
File: 'exec_func_python() autogenerated', lineno: 2, function:
0001:
0002:sstate_create_and_sign_package(d)
0003:
文件:'/media/compute1/7C261D53261D0FAE/Advantech/5722_6.6_scarthgap/adv-release-bsp/sources/poky/meta/classes-global/sstate.bbclass',行号:889,函数:sstate_create_and_sign_package
0885:
0886:update_file(tmp_pkg,sstate_pkg,force=True)
0887: 其他:
0888: 从 tempfile 导入 NamedTemporaryFile
0889:NamedTemporaryFile(prefix=sstate_pkg.name, dir=sstate_pkg.parent) 作为tmp_pkg_fd:
0890: tmp_pkg = tmp_pkg_fd.name
0891: d.setVar(“TMP_SSTATE_PKG”, str(tmp_pkg))
0892: bb.build.exec_func('sstate_archive_package',d)
0893: update_file(tmp_pkg, sstate_pkg)
文件:'/usr/lib/python3.10/tempfile.py',行号:714,函数:NamedTemporaryFile
0710:非本地名称
0711:fd,名称 = _mkstemp_inner(dir, prefix, suffix, flags, output_type)
0712: 返回 FD
0713: 尝试:
0714: 文件 = _io.open(dir, mode, buffering=buffering,
0715: newline=newline, encoding=encoding, errors=错误,
0716: opener=opener)
0717: 尝试:
0718: raw = getattr(文件, '缓冲区', 文件)
文件: '/usr/lib/python3.10/tempfile.py', lineno: 711, function: opener
0707:
0708:名称 = 无
0709: def opener(*args):
0710:非本地名称
0711:FD,名称 = _mkstemp_inner(目录、前缀、后缀、标志、output_type)
0712: 返回 FD
0713: 尝试:
0714: 文件 = _io.open(dir, mode, buffering=buffering,
0715: newline=newline, encoding=encoding, errors=错误,
文件:'/usr/lib/python3.10/tempfile.py',行号:395,函数:_mkstemp_inner
0391: name = next(names)
0392: 文件 = _os.path.join(dir, pre name suf)
0393: _sys.audit(“tempfile.mkstemp”, 文件)
0394: 尝试:
0395: fd = _os.open(文件、标志、0o600)
0396:FileExistsError 除外:
0397: 继续
0398:除 PermissionError 外:
0399:
异常:OSError:[errno 22] 参数无效:”

根据我的假设,这是与 Python 相关的 Errno 22 错误。
提供背景 - 存储分区在 Ubuntu 主机和 Windows 之间共享(双启动)。这会产生任何问题吗?
如果是,如何在不干扰 Ubuntu 分区的情况下删除 Windows 分区,请建议

python errno 22 错误



回帖(1)

chumowei

2025-4-7 18:20:03

在Yocto构建过程中遇到Errno22(无效参数)错误通常与文件系统权限、路径配置或存储问题有关。以下是分步解决方案:




1. 检查文件系统权限


确保构建目录及sstate-cache的权限正确:


# 进入构建目录(通常为build)
cd /media/compute1/.../adv-release-bsp/build

# 检查权限(确保用户有读写权限)
ls -ld sstate-cache

# 修复权限(示例)
chmod -R 755 sstate-cache
chown -R your_username:your_group sstate-cache



2. 验证路径有效性



  • 路径长度限制:缩短路径深度(如将/media/compute1/7C261D53261D0FAE/Advantech/...改为更短的路径)。

  • 无效字符:避免路径中包含空格或特殊符号(如#, $)。

  • 挂载问题:若路径在外部存储设备上,确认设备已正确挂载且无错误:
    mount | grep "/media/compute1"




3. 检查磁盘空间


确保磁盘有足够空间:


df -h /media/compute1


  • 若空间不足,清理旧构建或扩展存储。




4. 检查SSTATE_DIR配置


确认build/conf/local.conf中的sstate路径配置:


# 检查SSTATE_DIR设置
grep "SSTATE_DIR" build/conf/local.conf

# 示例正确配置(路径需存在且可写)
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"



5. 排除网络文件系统问题


sstate-cache位于NFS/Samba共享:



  • 临时方案:将sstate-cache移动到本地目录:
    mkdir -p /home/your_user/local_sstate
    echo 'SSTATE_DIR = "/home/your_user/local_sstate"' >> build/conf/local.conf




6. 禁用包签名(临时测试)


local.conf中禁用签名功能以排查问题:


# 注释或删除以下配置
# SSTATE_SIG_KEY = "..."
# SSTATE_SIGNATURE_HANDLER = "..."



7. 清理并重新构建


清理缓存后重新尝试构建:


# 清理指定配方(如u-boot-imx)
bitbake -c cleansstate u-boot-imx

# 或删除整个sstate-cache
rm -rf sstate-cache/*

# 重新构建
bitbake u-boot-imx



8. 启用详细日志


通过调试模式获取更详细的错误信息:


bitbake -D u-boot-imx 2>&1 | tee build.log

检查日志中具体操作失败的文件路径及系统调用。




9. 更新Yocto和元数据层


确认使用的Yocto版本和板级支持包(BSP)无已知问题:


# 更新各层(如poky、meta-advantech等)
cd sources/poky
git checkout scarthgap
git pull

cd ../meta-advantech
git pull



10. 检查文件系统类型


某些文件系统(如FAT/NTFS)可能不支持Linux权限或符号链接:



  • 确保构建目录位于ext4xfs等Linux原生文件系统。




总结:多数情况下,此错误由权限不足或路径配置错误导致。建议按顺序执行上述步骤,优先检查权限、路径和磁盘空间。若仍无法解决,请提供build.log中的关键错误段落以便进一步分析。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分