petalinux方式移植linux

使用Ubuntu 16.04LST

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

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

petalinux中文手册

petalinux安装

x ​

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下

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

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

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,所以这里需要进行更改

1
sudo dpkg-reconfigure dash

image-20230203214145110

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

petalinux使用

1、设置 Petalinux 环境变量

每次第一次打开终端输入

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

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

2、创建 petalinux 工程

在当前路径创建工程命令

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

< PLATFORM >有三种选项

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

< PROJECT_NAME >顾名思义工程名称

示例

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

创建成功显示

image-20230203215711892

3、引入HDL文件

进入创建的工程的文件夹

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

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

注意是目录,不是hdl文件

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

示例

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

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 内核

终端输入

1
petalinux-config -c kernel

保持默认,Exit退出

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

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

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

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、编译项目

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

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

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

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

image-20230302112723370

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,

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

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

image-20230204115410525

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