Docker搭建petalinux2022.1开发环境

Docker搭建petalinux2022.1开发环境

petalinux-docker

系统环境

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
uname -a
Linux VM-4-13-ubuntu 6.8.0-71-generic #71-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 22 16:52:38 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

准备docker构建petalinux环境

可以将构建环境上传到github仓库或者gitee仓库,需要的时候直接克隆下来使用就可以了

目录结构
1
2
3
4
5
6
7
8
9
# tree
.
├── accept-eula.sh
├── Dockerfile
├── LICENSE
├── petalinux-v2022.1-04191534-installer.run
└── README.md

1 directory, 5 files

注意:petalinux-v2022.1-04191534-installer.run,需要自行准备并拷贝到当前目录下,下载的文件要检验md5sum值与官方是否一致

准备构建文件

构建与运行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 我已将相关文件上传到github并导入到gitee仓库
git clone -b petalinux-2022.1 https://gitee.com/yenao/petalinux-docker.git
cd petalinux-docker
# 将petalinux-v2022.1-04191534-installer.run拷贝到当前目录

# 构建
# docker build --build-arg PETA_VERSION=2022.1 --build-arg PETA_RUN_FILE=petalinux-v2022.1-04191534-installer.run -t petalinux:2022.1 .
# 配置阿里云安装源
docker build --build-arg UBUNTU_MIRROR=mirrors.aliyun.com --build-arg PETA_VERSION=2022.1 --build-arg PETA_RUN_FILE=petalinux-v2022.1-04191534-installer.run -t petalinux:2022.1 .

# 运行
# docker run -ti --rm -e DISPLAY=$DISPLAY --net="host" -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/home/vivado/.Xauthority -v $HOME/Projects:/home/vivado/project  petalinux:2022.1 /bin/bash
# mkdir -p Projects; cd Projects
mkdir -p /data/disk/Projects; cd /data/disk/Projects
docker run -ti --rm -e DISPLAY=$DISPLAY --net="host" -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/home/vivado/.Xauthority -v ./:/home/vivado/project  petalinux:2022.1 /bin/bash

# 清理构建缓存
docker system prune

# 需要在项目目录内执行,
petalinux-util --webtalk off
<<'CONTENT'
WebTalk 是 Xilinx/AMD 的遥测功能,会收集你使用 PetaLinux 工具的匿名数据并发送给 AMD。
关闭它的原因:
1. 隐私 ― 不想被收集使用数据
2. 避免构建错误 ― WebTalk 需要联网,在很多环境下会失败,报错如:
      webtalk failed:Failed to get PetaLinux usage statistics!
3. 老旧功能 ― 从 PetaLinux 2022.2 开始,WebTalk 已被 AMD 移除
你用的 2022.1 版本还有这个功能,所以建议关闭。如果你确定不会遇到网络问题,也可以不关,不会影响核心功能。
注意:你现在已经在容器内了,运行 petalinux-util --webtalk off 需要在项目目录内执行,而不是全局设置。
CONTENT

关于离线编译的方案

准备离线编译包
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 准备离线编译包:sstate_aarch64_2022.1_04190222.tar.gz、sstate_arm_2022.1_04190222.tar.gz、downloads_2022.1_04190222.tar.gz,然后分别解压:
tar zxf sstate_aarch64_2022.1_04190222.tar.gz
tar zxf sstate_arm_2022.1_04190222.tar.gz
tar zxf downloads_2022.1_04190222.tar.gz
# 解压后的目录结构如下:
tree -L 1 /root/data/disk/petalinux-2022.1
<<'CONTENT'
/root/data/disk/petalinux-2022.1
├── aarch64
├── arm
├── downloads
├── downloads_2022.1_04190222.tar.gz
├── project
├── sstate_aarch64_2022.1_04190222.tar.gz
└── sstate_arm_2022.1_04190222.tar.gz

5 directories, 3 files
CONTENT
方案一,docker运行容器时指定离线编译包路径
1
2
3
4
5
6
7
mkdir -p /data/disk/Projects; cd /data/disk/Projects
mv /root/data/disk/petalinux-2022.1 ./
docker run -ti --rm -e DISPLAY=$DISPLAY --net="host" -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/home/vivado/.Xauthority -v ./:/home/vivado/project -v /root/data/disk/petalinux-2022.1:/home/vivado  petalinux:2022.1 /bin/bash

sudo chown -R vivado:vivado $(dirname $PWD)

# 然后正常创建petalinux工程,导入硬件描述文件时配置离线编译路径,可以从网上找教程
自动配置离线编译脚本,根据离线编译路径修改脚本中对应的离线编译包路径
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
touch auto.sh
chmod +x auto.sh
cat - > auto.sh << 'EOF'
#!/bin/sh
## 本地仓库设置
SSTATE_LOCAL_PATH="/home/vivado/project/petalinux-2022.1"

case $1 in
        zynq)
                ARCH="arm"
                ;;
        zynqmp)
                ARCH="aarch64"
                ;;
        ,*)
                echo "Usage: $0 zynq/zynqmp"
                exit
esac

echo "ARCH=$ARCH"

if [ $ARCH == "" ]; then
  exit
fi

#删除带有指定关键字的行
delete_line_with_special_word ()
{
  if [[ $# -lt 2 ]]; then
	return
  fi
  FILE=$1
  WORD=$2

  sed -i "/${WORD}/d" ${FILE}
}
#文件内容追加
append_line_into_file ()
{
  if [[ $# -lt 2 ]]; then
	return
  fi
  FILE=$1
  LINE=$2
  echo do
  echo $LINE >> $FILE
}
CONFIG="./project-spec/configs/config"
cp $CONFIG $CONFIG.old

## 本地包
delete_line_with_special_word   $CONFIG  CONFIG_YOCTO_NETWORK_SSTATE_FEEDS
append_line_into_file           $CONFIG  "# CONFIG_YOCTO_NETWORK_SSTATE_FEEDS is not set"
delete_line_with_special_word   $CONFIG  CONFIG_YOCTO_BB_NO_NETWORK
append_line_into_file           $CONFIG  "CONFIG_YOCTO_BB_NO_NETWORK=y"
delete_line_with_special_word   $CONFIG  CONFIG_PRE_MIRROR_URL
append_line_into_file           $CONFIG  "CONFIG_PRE_MIRROR_URL=\"file://${SSTATE_LOCAL_PATH}/downloads\""
delete_line_with_special_word   $CONFIG  CONFIG_YOCTO_LOCAL_SSTATE_FEEDS_URL
append_line_into_file           $CONFIG  "CONFIG_YOCTO_LOCAL_SSTATE_FEEDS_URL=\"${SSTATE_LOCAL_PATH}/${ARCH}\""

## | 目录      | 平台        |
## | --------- | ----------- |
## | aarch64   | ZynqMP      |
## | arm       | Zynq        |
## | mb-full   | MB AXI      |
## | mb-lite   | MB AXI lite |
## | downloads | 全平台  |
EOF
使用方法
1
2
3
./auto.sh zynqmp
# 或
./auto.sh zynq
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计