当前位置: 首页 > ops >正文

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 服务器不可达或网络限制。
  • 本地缓存未配置或文件未正确放置。
解决方案
  1. 手动下载文件
    wget https://ftp.gnu.org/gnu/autoconf/autoconf-2.72e.tar.gz -P /home/dd/pkg/downloads
    
  2. 配置本地缓存优先级
    修改 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 快照文件名或内容格式不符。
解决方案
  1. 手动生成 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
    
  2. 确保文件名与 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', ...)
原因分析
  • 官方服务器下载速度慢或超时。
  • 本地缓存未正确配置。
解决方案
  1. 手动下载并放入缓存目录
    wget https://www.mpfr.org/mpfr-4.2.1/mpfr-4.2.1.tar.xz -P /home/dd/pkg/downloads
    
  2. 调整 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 协议重定向。
解决方案
  1. 直接下载源码包并替换 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)。
  • 快照解压后路径不符合预期。
解决方案
  1. 重新生成快照
    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_DIRSSTATE_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 构建中因依赖下载导致的典型错误,核心解决思路:

  1. 手动下载:优先从替代源(如 GNU 官方)获取依赖包。
  2. 生成 Git 快照:使用 git clone --mirror 生成标准快照文件。
  3. 配置覆盖:通过 PREMIRRORSSRC_URI 强制使用本地缓存。
  4. 日志分析:通过 log.do_fetch 定位具体 URL 和缓存路径问题。

建议将上述配置与操作集成到构建脚本中,以提高离线环境下的构建效率。

http://www.xdnf.cn/news/16944.html

相关文章:

  • k8s+isulad 国产化技术栈云原生技术栈搭建3-master节点安装
  • 音视频学习(四十九):音频有损压缩
  • TVS二极管数据手册解读
  • Android系统模块编译调试与Ninja使用指南
  • Spring AOP_2
  • 【大模型篇】:GPT-Llama-Qwen-Deepseek
  • Linux进程启动后,监听端口几分钟后消失之问题分析
  • 【游戏比赛demo灵感】Scenario No.9(又名:World Agent)
  • 基于pytorch深度学习笔记:3.GooLeNet介绍
  • RT-Thread **标准版(Standard)** 和 **智能版(Smart)
  • LLM - AI大模型应用集成协议三件套 MCP、A2A与AG-UI
  • Rust 同步方式访问 REST API 的完整指南
  • 04.Redis 的多实例
  • Linux 文件系统基本管理
  • go 中的 fmt 占位符
  • 【lucene】ByteBufferGuard
  • RabbitMQ面试精讲 Day 9:优先级队列与惰性队列
  • 深度学习中的三种Embedding技术详解
  • 【内容规范】关于标题中【】标记的使用说明
  • 02.Redis 安装
  • 浅窥Claude-Prompting for Agents的Talk
  • Thread 类的基本用法
  • 位运算在权限授权中的应用及Vue3实践
  • 深度学习(鱼书)day10--与学习相关的技巧(后两节)
  • 【Python练习】075. 编写一个函数,实现简单的语音识别功能
  • MySQL Undo Log
  • 从零开始设计一个分布式KV存储:基于Raft的协程化实现
  • golang 函数选项模式
  • 手机(电脑)与音响的蓝牙通信
  • Python 实例属性与方法命名冲突:一次隐藏的Bug引发的思考