Petalinux 23.2 构建过程中常见下载错误及解决方法总结
Petalinux 23.2 构建过程中常见下载错误及解决方法总结
以下是构建过程中因依赖包下载失败而触发的典型错误,及已验证的解决方案。内容基于实际错误日志整理,适用于需要离线构建或网络受限的场景。
1. autoconf-native 下载失败
错误描述
无法从 Xilinx 服务器下载 autoconf-2.72e.tar.gz
,触发网络超时。
错误日志片段
ERROR: autoconf-native-2.72e-r0 do_fetch:
Bitbake Fetcher Error: NetworkAccess('https://petalinux.xilinx.com/.../autoconf-2.72e.tar.gz', ...)
原因分析
- Xilinx 服务器不可达或网络限制。
- 本地缓存未配置或文件未正确放置。
解决方案
- 手动下载文件:
wget https://ftp.gnu.org/gnu/autoconf/autoconf-2.72e.tar.gz -P /home/dd/pkg/downloads
- 配置本地缓存优先级:
修改project-spec/meta-user/conf/petalinuxbsp.conf
,添加:PREMIRRORS:prepend = "https?://petalinux.xilinx.com/.* file://${DL_DIR}" DL_DIR = "/home/dd/pkg/downloads"
2. git 仓库快照下载失败(以 pkg-config 为例)
错误描述
Git 仓库(如 git2_gitlab.freedesktop.org.pkg-config.pkg-config.git.tar.gz
)无法克隆或生成快照。
错误日志片段
ERROR: pkgconfig-native-0.29.2+git-r0 do_fetch:
Bitbake Fetcher Error: NetworkAccess('https://petalinux.xilinx.com/.../pkg-config.git.tar.gz', ...)
原因分析
- 网络克隆 Git 仓库失败。
- 本地生成的 Git 快照文件名或内容格式不符。
解决方案
- 手动生成 Git 快照:
# 克隆为裸仓库并打包 git clone --mirror https://gitlab.freedesktop.org/pkg-config/pkg-config.git tar czvf git2_gitlab.freedesktop.org.pkg-config.pkg-config.git.tar.gz pkg-config.git rm -rf pkg-config.git mv *.tar.gz /home/dd/pkg/downloads
- 确保文件名与 URL 匹配:
- 快照文件名需与 Bitbake 请求的 URL 中的哈希路径一致。
3. mpfr-native 下载失败
错误描述
无法从 www.mpfr.org
下载 mpfr-4.2.1.tar.xz
。
错误日志片段
ERROR: mpfr-native-4.2.1-r0 do_fetch:
Bitbake Fetcher Error: NetworkAccess('https://www.mpfr.org/.../mpfr-4.2.1.tar.xz', ...)
原因分析
- 官方服务器下载速度慢或超时。
- 本地缓存未正确配置。
解决方案
- 手动下载并放入缓存目录:
wget https://www.mpfr.org/mpfr-4.2.1/mpfr-4.2.1.tar.xz -P /home/dd/pkg/downloads
- 调整 PREMIRRORS 规则:
PREMIRRORS:prepend += "https?://.*/mpfr-.* file://${DL_DIR}"
4. binutils-cross-arm 的 Git 仓库克隆失败
错误描述
无法从 sourceware.org
克隆 binutils-gdb
仓库。
错误日志片段
ERROR: binutils-cross-arm-2.42-r0 do_fetch:
Bitbake Fetcher Error: NetworkAccess('git://sourceware.org/git/binutils-gdb.git', ...)
原因分析
- Git 协议被防火墙拦截(如
git://
使用非标准端口)。 - 本地缓存不支持 Git 协议重定向。
解决方案
- 直接下载源码包并替换 SRC_URI:
# 下载源码包 wget https://ftp.gnu.org/gnu/binutils/binutils-2.42.tar.xz -P /home/dd/pkg/downloads# 修改配方(覆盖 Git 仓库请求) echo 'SRC_URI:pn-binutils-cross-arm = "file://binutils-2.42.tar.xz"' >> project-spec/meta-user/conf/petalinuxbsp.conf
5. pseudo-native Git 快照无效
错误描述
本地 Git 快照无法被识别为有效仓库。
错误日志片段
ERROR: pseudo-native-1.9.0+git-r0 do_fetch:
Fetcher failure: fatal: not a git repository...
原因分析
- 快照生成方式错误(未使用
git clone --mirror
)。 - 快照解压后路径不符合预期。
解决方案
- 重新生成快照:
git clone --mirror https://git.yoctoproject.org/git/pseudo tar czvf git2_git.yoctoproject.org.pseudo.tar.gz pseudo.git rm -rf pseudo.git mv *.tar.gz /home/dd/pkg/downloads
通用配置优化建议
1. 本地缓存管理
- 关键配置:确保
DL_DIR
和SSTATE_DIR
指向共享目录:DL_DIR = "/home/dd/pkg/downloads" SSTATE_DIR = "/home/dd/pkg/sstate-cache"
- 镜像规则:覆盖 Xilinx 和其他常见源:
PREMIRRORS:prepend = " \https?://.*\.tar\.gz file://${DL_DIR} \n \git://.* file://${DL_DIR} \n \ "
2. 网络代理配置(可选)
若需通过代理访问外网:
ENV_HOST_PROXIES = " \http_proxy=http://<proxy_ip>:<proxy_port> \n \https_proxy=http://<proxy_ip>:<proxy_port> \n \
"
3. 缓存验证与清理
- 检查缓存命中:
cat build/tmp/log/cooker/*/log.do_fetch | grep "Fetched"
- 清理无效缓存:
petalinux-build -c cleansstate <package-name> # 全量清理 petalinux-build -x distclean
总结
本文档覆盖了 Petalinux 构建中因依赖下载导致的典型错误,核心解决思路:
- 手动下载:优先从替代源(如 GNU 官方)获取依赖包。
- 生成 Git 快照:使用
git clone --mirror
生成标准快照文件。 - 配置覆盖:通过
PREMIRRORS
和SRC_URI
强制使用本地缓存。 - 日志分析:通过
log.do_fetch
定位具体 URL 和缓存路径问题。
建议将上述配置与操作集成到构建脚本中,以提高离线环境下的构建效率。