PetaLinux 2023.2 离线缓存与加速编译配置

前言

  • 本文目标:为 PetaLinux 开发者提供一个标准化的流程,通过使用 AMD 官方提供的离线缓存包,彻底解决因网络问题导致的编译失败,并极大地加速后续项目的构建速度。我们将配置两种核心缓存:

    • sstate-cache (编译状态缓存): 存储已编译好的软件组件,避免重复编译

    • downloads (下载镜像): 存储所有需要的源代码压缩包,避免重复下载

前提条件

你已经从 AMD 官网下载了以下两个针对你目标架构的缓存文件,下载链接为https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools/archive.html

  • arm sstate-cache: 用于 Zynq-7000 系列 (32位 ARM)
    • 文件名示例: sstate_arm_2023.2_10121051.tar.gz
  • Downloads: 包含所有架构通用的源代码
    • 文件名示例: downloads_2023.2_10121051.tar.gz

第一步:创建并准备缓存目录

为了让缓存能够被所有 PetaLinux 项目共享,我们将其存放在一个全局的、统一的系统路径下(例如 /opt/petalinux/)。

创建顶层及子目录

1
2
sudo mkdir -p /opt/petalinux/2023.2/sstate-cache
sudo mkdir -p /opt/petalinux/2023.2/downloads

将新创建目录的所有权赋予当前用户

1
sudo chown -R $USER:$USER /opt/petalinux/

注意: $USER 是一个系统变量,会自动替换为你的用户名(例如: kuang)

第二步:解压缓存文件到指定目录

接下来,我们将下载好的缓存压缩包解压到刚刚创建好的对应目录中。

1
2
3
4
5
6
7
8
9
# 假设你的下载文件存放在 ~/workspace/ 目录

# 1. 解压 sstate-cache 缓存包到 sstate-cache 目录
# 请将文件名替换为你实际下载的文件名
tar -xzvf ~/workspace/sstate_arm_2023.2_10121051.tar.gz -C /opt/petalinux/2023.2/sstate-cache/

# 2. 解压 downloads 源码包到 downloads 目录
# 请将文件名替换为你实际下载的文件名
tar -xzvf ~/workspace/downloads_2023.2_10121051.tar.gz -C /opt/petalinux/2023.2/downloads/

完成这一步后,你的全局缓存已经准备就绪。

第三步:配置 PetaLinux 项目以使用本地缓存

这是最关键的一步。你需要在你的每一个 PetaLinux 项目中修改配置文件,让构建系统(Yocto)明确地知道去哪里寻找和使用这些本地缓存。

配置步骤

  1. 修改项目配置

    1
    petalinux-config

    在配置界面中:

    • 取消勾选 Yocto Settings → Enable Network sstate feeds
    • 勾选 Yocto Settings → Enable BB No Network
    • 配置Add pre-mirror url为file:///opt/petalinux/2023.2/downloads/downloads/
    • 配置Local sstate feeds settings为/opt/petalinux/2023.2/sstate-cache/arm
  2. 使用 cd 命令进入你的 PetaLinux 项目根目录

  3. 打开 project-spec/meta-user/conf/petalinuxbsp.conf 文件,在文件的最上方,添加以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # User Configuration
    # OE_TERMINAL = "tmux"

    # 设置下载和缓存目录
    DL_DIR = "/opt/petalinux/2023.2/downloads/downloads"
    SSTATE_DIR = "/opt/petalinux/2023.2/sstate-cache/arm"

    # 使用新语法的 PREMIRRORS 配置
    PREMIRRORS:prepend = " \
    git://.*/.* file:///opt/petalinux/2023.2/downloads/downloads/ \n \
    gitsm://.*/.* file:///opt/petalinux/2023.2/downloads/downloads/ \n \
    ftp://.*/.* file:///opt/petalinux/2023.2/downloads/downloads/ \n \
    http://.*/.* file:///opt/petalinux/2023.2/downloads/downloads/ \n \
    https://.*/.* file:///opt/petalinux/2023.2/downloads/downloads/ \n \
    "
  4. 对于2023.2版本,还需要在downloads/downloads文件夹下补充两个文件git2_github.com.Xilinx.linux-xlnx.git.tar.gz,git2_git.yoctoproject.org.yocto-kernel-cache.tar.gz,git2_github.com.Xilinx.device-tree-xlnx.git.tar.gzgit2_github.com.Xilinx.u-boot-xlnx.git.tar.gz

第四步:验证配置

保存 petalinuxbsp.conf 文件后,即可开始构建项目来验证配置是否生效。

1
2
# 执行构建命令
petalinux-build