ZCU102初步-使用 PetaLinux 从 0 构建 Linux
写在开头
本文介绍了使用 Petalinux 在 ZCU102 硬核上启动 Linux 的方式方法。 PetaLinux 版本为 2024.1
硬件设计
参照 ZCU102初步-HelloWorld 配置硬件资源,导出 .xsa 文件,需要注意一定配好 SD Card。 本文将使用 SD Card 来 Boot Linux。而非 HelloWorld 中的 QSPI 方法。
PetaLinux
介绍
PetaLinux 是 Xilinx 开发出来为 FPGA 运行系统的一套懒人化工具链,其输入类似于 Vitis,为 .xsa 的硬件描述文件。其根据硬件描述文件为其生成启动 Linux 的一切程序,包括但不限于 fsbl、u-boot、linux 本体、设备树,并且将其合并为 Boot.bin,使得用户可以直接使用 Petalinux 的产物在 FPGA 开发板上启动 Linux。
使用过程
首先一定进入 PetaLinux 的用户手册查找安装对应版本的 Petalinux 所需要的环境,在不符合要求的环境上运行 PetaLinux 出现任何奇怪报错都是可能的!
笔者使用版本为 2024.1,Ubuntu 为 22.04.3 LTS
在官网下载安装和 Vivado 版本一致的 Petalinux,
将下载好的
petalinux.run
文件放置到想要安装到的目录下,为其添加执行权限,之后直接./petalinux.run
运行安装程序。安装程序会自动检测所需要的环境,如果不符合则会将缺失的环境提示出来,只需要对其一个个
apt insntall
即可。安装完成后每次使用 Petalinux 前需要进入安装目录,手动
source settings.sh
来添加环境变量,嫌麻烦将该命令加入到~/.bashrc
中,每次运行终端将自动运行该语句。创建 PetaLinux 工程
petalinux-create --t project --template <PLATFORM> --name <PROJECT_NAME>
可选的 Platform 有:versal、zynqMP(我们要用的)、zynq、microblaze
Project_name 将会作为文件夹名字出现。
将 .xsa 文件 和 .bit 文件复制到
工程目录/project-spec/hw-description/
下,将 .xsa 改名为 system.xsa,之后直接运行petalinux-config
进行工程配置,当然也可以运行petalinux-config --get-hw-description <PATH-TO-XSA-FILE>
来手动指定 .xsa 文件位置。之后进入 menuconfig 界面配置 Linux、U-boot、设备树等,这里可以不配置,直接两次 ESC 退出配置界面。
如果是笔记本键盘,可能会遇到按键不灵的情况,最好换一个外接键盘试试
config 完成后运行
petalinux-build
来编译工程,完成之后,工程目录下将出现 images 文件夹,里面存放了诸如 linux.ub、u-boot.elf、fsbl.elf、rootfs 等产物。运行
petalinux-package --boot --fsbl --fpga --u-boot --force
将 fsbl、bit流、u-boot打包为 BOOT.bin。这里没有明确指定,将会在工作目录内自动查找对应后缀。
SD卡配置
这里使用的 SD卡是真正的 SD卡、即大卡而非小卡,参照 How to format SD card for SD boot 进行格式化,下文也会介绍
SD 卡格式化
将 SD 卡格式化为两个分区,一个是 较小的 BOOT 分区,分区类型为 FAT32、另一个是 较大的文件系统分区,分区类型为 EXT4。工具可以使用 DiskGenius
文件拷贝
将 Boot.bin、Boot.scr、images.ul 拷贝到 BOOT 分区
将文件系统拷贝到文件系统分区,即使用 Images/rootfs.tar.gz。
dd if=rootfs.ext4 of=/dev/sd卡的文件系统分区名
例如
dd if=rootfs.ext4 of=/dev/mmcblk0p2
上板验证
参考这个网站,zcu102启动方式配置
要想从sd卡启动,需要将拨码开关 1-4 设置为 On off off off
。
和 Helloworld 中提到的一样连接串口,插入 SD 卡。启动观察是否能够启动 Linux。
登录账户为 petalinux,密码会在第一次登录时进行设置。
网卡添加
前言
这里值得单写一下,是因为这里有一些坑点。
Vivado
双击 MPsoc 芯片,添加 GEM3 MIO 配置 64…75
Petalinux
如果已经进行过编译,就调用
petalinux-build -x mrproper
删除编译目录和产物来清理工程重新使用
petalinux-config
,在 menuconfig 界面修改machine name
从默认的Template
改为zcu102-revb
,之后正常编译即可这个解决方案来源于 AMD论坛
也可以采用这个贴子里面加设备树的方式解决,但笔者用此方法编译会报错,所以还是用上一种比较好。
至于为什么改个名字就能解决,笔者只能将其归功于特定的名字会触发一些额外的设备树编译内容吧,从编译产物来看是这样。