petalinux 方式移植 linux

使用 Ubuntu 16.04LST

22.04 我用成功安装过一次 petalinux, 之后重装以后不知道为什么一直安装出问题,折磨了我两三天,换用 16.04 什么问题都没有

vivado2018.3 (Windows 下) + petalinux 2018.3 (Linux 下)

petalinux 中文手册

petalinux 安装

x ​

shell
1
2
3
4
sudo apt-get install tofrodos iproute2 gawk gcc g++ git make net-tools libncurses5-dev \
tftpd zlib1g:i386 libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat \
xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential \
libsdl1.2-dev libglib2.0-dev screen pax gzip automake -y

2、官网下载 PetaLinux,地址

​ 选择需要的版本,这里选择和 Vivado 版本相同的 2018.3

3、创建文件夹

注意:安装后此目录被保存在环境 PRTALINUX 里,因此不要随便移动位置。这种大型应用我选择放在 opt 下

sh
1
2
sudo chown -R $USER:$USER /opt
mkdir -p /opt/pkg/petalinux/2018.3

4、来到下载的 petalinux 安装包目录下使用以下指令安装 petalinux

sh
1
./petalinux-v2018.3-final-installer.run /opt/pkg/petalinux/2018.3

运行上述命令后,需要等待一段时间,当出现 “Press Enter to display the license agreements” 字样的时候,按回车查看,按 q 退出,退出后输入 y,回车,如此重复三次,才开始正式安装

5、当遇到未安装 python 此类的 Error,跳转此链接有解决方法

image-20230125003249394

6、修改 bash

petalinux 工具需要主机系统的 /bin/sh 是 bash,而 Ubuntu 默认的 /bin/sh 是 dash,所以这里需要进行更改

shell
1
sudo dpkg-reconfigure dash

image-20230203214145110

选择 “No” 按下回车即可。

petalinux 使用

1、设置 Petalinux 环境变量

每次第一次打开终端输入

sh
1
source /opt/pkg/petalinux/2018.3/settings.shls

会点 linux 的可以自己设置别名或者自己设置自动载入,这里不细说

2、创建 petalinux 工程

在当前路径创建工程命令

sh
1
petalinux-create -t project --template <PLATFORM> --name <PROJECT_NAME>

<PLATFORM> 有三种选项

  • zynqMP (for UltraScale + MPSoC)
  • zynq (for Zynq)
  • microblaze (for MicroBlaze)

<PROJECT_NAME> 顾名思义工程名称

示例

sh
1
petalinux-create -t project --template zynqMP --name adrv9009_zcu102

创建成功显示

image-20230203215711892

3、引入 HDL 文件

进入创建的工程的文件夹

然后再用该命令导入 hdl 文件的目录

sh
1
petalinux-config --get-hw-description <path to hdf file>

注意是目录,不是 hdl 文件

Hdf 文件导入成功之后会自动弹出 petalinux 工程配置窗口

示例

sh
1
2
cd adrv9009_zcu102
petalinux-config --get-hw-description /home/noah/WorkSpace/zcu102/adrv9009_zcu102.sdk/

image-20230203220217124

4、进入 petalinux 设置窗口

使用方法:

​ 通过键盘上的 “↑” 和 “↓” 键来选择要配置的菜单,按下 “Enter” 键进入子菜单。菜单中高亮的字母就是此菜单的热键,在键盘上按下此高亮字母对应的键可以快速选中对应的菜单。选中子菜单以后按下 “Y” 键就会将相应的配置选项写入配置文件中,菜单前面变为 “<*>”。按下 “N” 键不编译相应的代码,按下 “M” 键就会将相应的代码编译为模块,菜单前面变为 “”。按两下 “Esc” 键退出,也就是返回到上一级,按下 “?” 键查看此菜单的帮助信息,按下 “/” 键打开搜索框,可以在搜索框输入要搜索的内容。

这里使用官方的给的 demo 做示例

找个地方 git clone

注意,我们用的版本是 petalinux 2018.3,下载完以后要记得切换到 2019_R1 分支,此版本是支持 2018.3 的,否则 ERROR: Unable to start bitbake server

image-20230204003352590

sh
1
2
3
git clone https://github.com/analogdevicesinc/meta-adi.git
cd meta-adi/
git checkout 2019_R1

在 petalinux 窗口,选择 Yocto Settings->User layers,然后添加刚刚 clone 的文件夹下两个下属文件夹 meta-adi-xilinx 和 meta-adi-core 的路径

​ 重要提示:由于该层依赖于 meta-adi-core(因为用户空间工具),因此必须将其包含在 meta-adi-core 之后,否则 **petalinux-config** 将失败。

image-20230203220941700

进入 “Image Packaging Configuration” 子菜单

第一个选项便是根文件系统的类型的配置,默认为 INITRAMFS,也可以选择 SD card

image-20230203223217342

​ INITRAMFS 类型的根文件系统每次重新启动 linux 系统都是全新的、未改动过的,也 就是说启动系统后进行的所有修改掉电后就全部丢失了,再次重新启动还是之前未修改过的根 文件系统,选择 SD card 可以将根文件系统放在 SD 卡的 ext4 分区,这样启动系统后进行的所

选择 Save 保存后一路选择 Exit 退出

成功截图

image-20230203225557383

5、配置 Linux 内核

终端输入

plaintext
1
petalinux-config -c kernel

保持默认,Exit 退出

6、选择适合正在构建的项目的设备树

配置完成后,转到 <path-to-meta-adi>/recipes-bsp/device-tree 并打开 device-tree.bbappend 文件。在文件中将 KERNEL_DTB 变量设置为适合您的 FPGA 载体和 FMC 卡的变量。

意思是,进入下载好的 meta-adi 文件夹下

sh
1
2
3
4
5
cd ~/WorkSpace/meta-adi/meta-adi-xilinx/recipes-bsp/device-tree
gedit device-tree.bbappend
# ctrl f 搜索 KERNEL_DTB 将其变量内的值改为
# KERNEL_DTB = "zynqmp-zcu102-rev10-adrv9009"
# 在它的下方也有写它所支持的zynq、zynqmp、microblaze

示意图

image-20230204005826953

保存退出

7、编译项目

sh
1
2
cd build
petalinux-build

当遇到此种错误,系 Failed to fetch URL git://github.com/analogdevicesinc/libiio.git;branch=2019_R1 失败造成的,先打开 http 和 https 的 proxy(系统代理),然后键入,将 git:// 替换为 http 或者 https

sh
1
git config --global url."https://".insteadOf git://

实在不行还是 Error 的终极解决方法,因为要下载这个 Xilinx 官方验证过的 linux 内核,这文件很大,经常下载途中断联导致报错,折磨我到凌晨四点

导入下面设置 git 参数,不需要了可以在 ~/.gitconfig 里面删去

image-20230302112723370

sh
1
2
3
4
5
git config --global url."https://gitclone.com/".insteadOf https://

git clone https://github.com/tendermint/tendermint.git

git config --global url."https://gitclone.com/".insteadOf git://

image-20230204113550221

经过漫长的编译过程成功后应该是这样的:

image-20230204114003699

他这里会有一个 error,说写入到 “/tftpboot” 目录时出错。这些错误消息仅供参考,不会影响输出 image。可以在系统级配置中的 Image Packing Configuration (镜像打包配置) 中关闭 Copy final images to tftpboot(将最终映像复制到 tftpboot)这一选项来根除此 Error。

8、启动平台

构建 BOOT.bin,

plaintext
1
petalinux-package --boot --fsbl --fpga --u-boot

输出文件将放在 path-to-petalinux-project>/images/linux.

image-20230204115410525

还需要烧录到 sd 卡,等待之后续写出详细教程