本文将详细介绍PetaLinux 2023.1版本的安装和使用流程,包括:虚拟机环境搭建、PetaLinux安装、在线/离线编译方法、SD卡制作与上板验证。不同版本和板子之间可能略有区别。
1. 安装虚拟机
查看文档UG1144,确定所要安装的petalinux版本对应的虚拟机版本,这里我安装的是Ubuntu20.04.6(虽然显示不支持,但实际上没什么问题)。

Ubuntu配置中硬盘可以给大一点,后面如果要离线编译的话用得上。

安装虚拟机后可以切换镜像源,方便后面下载库文件。
2. 下载petalinux
进入官网下载页面:

3. 安装Petalinux
3.1 安装必要的库文件
1 | sudo apt-get install tofrodos gawk xvfb git libncurses5-dev tftpd zlib1g-dev zlib1g-dev:i386 libssl-dev flex bison chrpath socat autoconf libtool texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev screen pax xterm build-essential libtinfo5 libncurses5 tftpd-hpa -y |
3.2 将petalinux安装包复制到虚拟机中
可以使用scp命令复制,前提是虚拟机需要先安装并启动SSH服务(sudo apt install openssh-server 和 sudo systemctl start ssh)。
SCP传输语法
1 | scp 需要复制的文件 虚拟机用户名@虚拟机ip地址:文件保存的地址 |
示例:
1 | scp petalinux-v2023.1-05012318-installer.run raiset@192.168.80.130:~/Downloads |
3.3 创建Petalinux文件夹并给予权限
1 | sudo mkdir -p /opt/pkg/petalinux |

3.4 开始安装
为安装文件添加执行权限:
1 | sudo chmod 777 petalinux-v2023.1-05012318-installer.run |
指定安装路径为刚才创建的文件夹:
1 | ./petalinux-v2023.1-05012318-installer.run -d /opt/pkg/petalinux/ |

输入 q ,回车,然后跳出一大段文字:


依此类推,直到开始安装:

4. PetaLinux使用
使用PetaLinux前,需要根据板卡的用户手册,在Vivado的PS IP核配置中,将SD卡、以太网、串口打开,并正确配置Bank 0和Bank 1的电平,然后生成xsa文件。

4.1 配置环境变量
每次打开一个Terminal都需要执行此命令,否则无法运行PetaLinux相关指令!
1 | source /opt/pkg/petalinux/settings.sh |
4.2 创建工作目录并给予权限
创建一个目录,在该目录下可创建多个PetaLinux工程。
1 | sudo mkdir peta_prj |
4.3 创建PetaLinux工程
命令格式
1 | petalinux-create --type project --template <PLATFORM> --name <PROJECT_NAME> |
参数说明:
<PLATFORM>- 目标平台类型支持的平台类型
versal- Versal ACAPzynqMP- Zynq UltraScale+ MPSoCzynq- Zynq-7000 devicesmicroblaze- MicroBlaze™ processor
<PROJECT_NAME>- 工程名称

4.4 配置PetaLinux(在线编译)
4.4.1 配置工程
进入工程目录:
1 | cd test_peta |
将Vivado生成的XSA文件移动到虚拟机中

运行
1 | petalinux-config --get-hw-description <XSA_PATH> |
其中 <XSA_PATH> 是XSA文件所在路径。

不同板子的配置可能不一样,可以参考板卡的相关手册,下面几个配置同理。
这里需要更改根文件系统的类型,使用方向键移动到Image Packaging Configuration并按Enter进入,然后进入Root filesystem type,按空格选择EXT4,因为后面会将文件系统写入SD卡上,所以需要让板子从SD卡读取文件系统。

然后选择Exit逐层退出并保存配置:

4.4.2 配置内核
1 | petalinux-config -c kernel |
⚠️保持虚拟机联网状态,这里会从网络下载大量文件!

由于以太网的PHY芯片驱动默认没有打开,需要手动配置:
依次选择Device Drivers → Network device support → PHY Device support and infrastructure → Micrel Phys
按 y 选中Micrel Phys驱动,然后选择Exit逐层退出并保存。

4.4.3 配置根文件系统
1 | petalinux-config -c rootfs |

根文件系统配置一般保持默认即可,直接退出。
4.5 编译
1 | petalinux-build |
⚠️编译过程较长,会从网络下载大量依赖文件。
常见问题解决:cracklib分支问题
错误现象: 编译过程中出现以下错误信息:

解决方案: GitHub上的cracklib主分支已从master改为main,需要修改配置文件:
文件路径: [projectdir]/components/yocto/layers/poky/meta/recipes-extended/cracklib/cracklib_2.9.8.bb
修改内容: 将分支信息从master改为main:

有时如果编译不成功,可以多运行几次petalinux-build命令。
出现以下信息代表编译成功:

4.6 打包
1 | petalinux-package --boot --u-boot --fsbl --fpga --force |
参数详解
--fsbl
- 指定FSBL镜像文件位置
- 默认路径:
images/linux/zynq_fsbl.elf
--fpga
- 指定bitstream文件位置
- 默认路径:
images/linux/system.bit - 注意:如果XSA文件中不包含bit文件,不应添加此参数
--u-boot
- 指定U-Boot镜像位置
- 默认路径:
images/linux/u-boot.elf
--force
- 强制覆盖已存在的文件
5. 制作SD卡
5.1 准备工作
- 一张空闲的SD卡
- 读卡器
- 将SD卡通过读卡器连接至虚拟机
5.2 查看SD卡设备
打开Disks工具,查看SD卡设备名称:

本例中SD卡设备被识别为/dev/sdb,请根据实际情况调整后续命令中的设备名称!
5.3 SD卡分区操作
5.3.1 进入分区工具
1 | sudo fdisk /dev/sdb |

5.3.2 查看现有分区
输入 p 并回车查看当前分区状态:

如果存在已有分区,需要先删除。输入 d 删除现有分区,然后选择要删除的分区编号:

5.3.3 SD卡分区创建
创建主分区:
- 输入
n创建新分区 - 输入
p设置为primary主分区 - 分区编号和起始扇区默认即可,直接回车
- 输入
+1G设置分区大小为1GB

设置为启动分区:
输入 a 将分区1设置为可启动:

设置文件系统类型:
输入 t 然后输入 c 设置为FAT32格式:

创建Root分区:
- 输入
n创建第二个分区 - 输入
p设置为primary主分区 - 其他设置默认即可,直接回车使用剩余所有空间

输入 p 查看分区创建结果:

写入分区表:
输入 w 并回车将分区配置写入SD卡,写入完成后会自动退出fdisk工具。
5.3.4 格式化分区
取消挂载:
1 | sudo umount /dev/sdb1 |
格式化Boot分区为FAT32格式:
1 | sudo mkfs.vfat -F 32 -n boot /dev/sdb1 |
格式化Root分区为ext4格式:
1 | sudo mkfs.ext4 -L root /dev/sdb2 |
重新插拔SD卡后,使用以下命令验证格式化结果::
1 | lsblk -f |

除了命令行方式,也可以使用图形化工具:Linux: gparted;Windows: DiskGenius。

5.4 写入系统文件
5.4.1 拷贝Boot文件
进入工程目录/images/linux,将以下文件拷贝到Boot分区:
boot.scrBOOT.BINimage.ub

5.4.2 写入Root文件系统
dd命令:直接写入ext4镜像文件,完整性好;
解压方式:将rootfs.tar.gz解压到挂载点,速度较快。
通常使用解压方式好一点。
1 | sudo tar -zxf rootfs.tar.gz -C /media/raiset/root |
挂载的位置可以从上面lsblk -f命令输出的结果中看到。
1 | sudo dd if=rootfs.ext4 of=/dev/sdb2 |
等待写入完成

6. 上板验证
6.1 设置SD卡启动
将开发板设置为SD卡启动模式,具体设置方法请参考板卡用户手册,通常通过跳线帽或拨码开关来设置。
6.2 串口连接
6.2.1 查看端口
打开Windows设备管理器查看串口号:

如果设备管理器中不显示串口,需要下载并安装相应的USB转串口驱动程序。
6.2.2 配置串口工具
以Putty为例,配置连接参数:

6.3 启动测试
6.3.1 启动过程
- 启动开发板 - 插入SD卡并上电
- 打开串口工具 - 连接并打开串口窗口
- 等待启动完成 - 观察启动日志输出
6.3.2 首次登录配置
- 用户名: 输入
petalinux - 设置密码: 根据提示设置新密码
- 确认密码: 再次输入密码确认
- 登录成功: 进入PetaLinux系统命令行

7. 离线编译
离线编译通过预先下载所需文件,避免在编译过程中联网下载,可以显著提升编译速度。
7.1 下载离线资源

根据开发板型号选择相应的文件,其中downloads文件所有平台都需要:

7.2 解压
创建两个文件夹分别用于存放sstate-cache和downloads文件。

运行tar -xvf xxx.tar.gz解压文件,解压完成后删去压缩包。
7.3 配置离线编译
进入Yocto Settings菜单:
在运行petalinux-config --get-hw-description <XSA_PATH>配置工程时,进入 “Yocto Settings” 。
禁用网络并启用离线模式:
- 按
n取消 “Enable Network sstate feeds” - 按
y选择 “Enable BB NO NETWORK”

配置sstate-cache路径:
找到 Local sstate feeds settings选项,进入后输入sstate-cache所在路径:

注意使用绝对路径,不能使用 ~/ 简写,否则后面会报错。
配置downloads路径:
找到Add pre-mirror url选项,进入后输入downloads所在路径:
注意必须添加file://前缀。

后面的步骤和在线编译一样,设置Root filesystem type,而后配置内核和根文件系统,最后编译打包。