在Ubuntu20.04下安装、测试PetaLinux
PetaLinux是Xilinx公司推出的嵌入式Linux开发套件,包括了Linux Kernel、u-boot、device-tree、rootfs等源码、库,以及Yocto recipes,可以让客户很方便的生成、配置、编译及自定义。PetaLinux支持Zynq UltraScale+ MPSoC、Zynq-7000全可编程SoC,以及MicroBlaze,可与Xilinx硬件设计工具Vivado协同工作,简化了Linux系统的开发工作。
使用PetaLinux工具,开发人员可以定制u-boot、Linux内核或Linux应用,开发者还可以通过网络或JTAG在随附的全系统仿真器 (QEMU) 或物理硬件上添加新的内核、器件驱动程序、应用和库,以及启动并测试软件协议栈,完成从系统启动到执行的所有操作。在主机端提供的PetaLinux工具包括:
- 命令行界面
- 应用、器件驱动程序、库生成器以及开发模板
- 可引导的系统镜像生成器
- 调试代理程序
- GCC工具集
- 集成的QEMU全系统仿真器
- 自动化工具
- 支持Xilinx系统调试器
参考文档:ug1144-petalinux-tools-reference-guide
-
安装必要的库和程序
Xilinx网站页面最下方的“2021.2_PetaLinux_Package_List.xlsx”文件内说明了针对不同Linux发行版所需库及其版本。
sudo apt-get install iproute2 gawk python3 python build-essential gcc git make net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget git-core diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib automake zlib1g:i386 screen pax gzip cpio python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3
-
修改默认终端为bash
sudo dpkg-reconfigure dash
选择No
-
TFTP安装(非必须),参考https://www.cnblogs.com/5201351/p/4934625.html
sudo mkdir -p /tftpboot sudo chown -R $(whoami):$(whoami) /tftpboot
-
PetaLinux可在Xilinx官网免费下载,这里以2021.2为例,注意这里安装的版本要和Vivado的版本一致(包括子版本号)。
sudo mkdir -p /opt/xilinx/petalinux/2021.2 sudo chown -R $(whoami):$(whoami) /opt/xilinx/petalinux/2021.2/ ./petalinux-v2021.2-final-installer.run --dir /opt/xilinx/petalinux/2021.2
注意安装不需要管理员权限。
-
配置PetaLinux 工作环境,在~/.bashrc中加入
source /opt/xilinx/petalinux/2021.2/settings.sh
最后通过
echo $PETALINUX
验证安装。
使用PetaLinux进行离线编译
由于PetaLinux编译时需要下载很多依赖文件,由于网络的原因很容易导致失败,以2021.2为例整理了一下如何离线编译。
-
到官网下载aarch64 sstate-cache和downloads文件并解压。
-
配置本地downloads
在使用petalinux-config命令进入配置界面时,进入菜单“Yocto Settings ->Add pre-mirror url” 里,以file://格式提供上述download目录,比如“file:///opt/xilinx/petalinux/2021.2/downloads" -
配置sstate
选择Yocto Settings -> Local sstate feeds settings,填入aarch64 sstate-cache解压后的所在目录<your path>/aarch64
,这里不需要使用file://格式。 -
设置离线编译(非必须)
进入菜单“Yocto Settings -> [] BB NO NETWORK”,按空格键,选择“BB NO NETWORK”。
设置后,可以到build/conf/plnxtool.conf文件检查配置参数。 -
补充(非必须)
本地download也可以通过在文件project-spec/meta-user/conf/petalinuxbsp.conf里添加下列行设置。PREMIRRORS_prepend = "\ git://.*/.* file://<your path>/downloads/ \ ftp://.*/.* file://<your path>/downloads/ \ http://.*/.* file://<your path>/downloads/ \ https://.*/.* file://<your path>/downloads/ \ "
使用PetaLinux
-
新建PetaLinux工程,这里以ZCU102开发板为例,这里使用板级支持包BSP创建工程zcu102。
petalinux-create -t project -s <your path>/xilinx-zcu102-v2021.2-final.bsp -n zcu102 cd zcu102
-
导入硬件信息
注意:2019 年前的版本使用system.hdf 文件,而以后的版本使用system.xsa 文件,这需要将老版本的项目转换称为新版本的项目,或者重新建立一个vivado工程,File- ->Export–>Export Hardware,产生xsa 文件。petalinux-config --get-hw-description <PATH-TO-XSA-FILE>
出现system configuration menu,可参考前文配置离线编译
-
构建Image
cd build petalinux-build
经过较长时间等待后,images/linux文件夹产生bl31.elf,Image,pmufw.elf,u-boot.bin,zynqmp_fsbl.elf等文件。
-
产生Boot Image
cd .. petalinux-package --boot --u-boot --force
-
复制文件到SD卡
如需格式化SD,划分出两个分区,boot分区(500MB~1GB)和root分区。boot分区使用FAT32格式化,root使用ext4格式化,流程参考这里,SD卡在我的电脑上SD卡被识别到/dev/mmcblk0。- 复制images/linux或pre-built/linux/images/文件夹下的BOOT.BIN,image.ub,boot.scr文件到boot分区根目录。其中pre-built/linux/images是来自Xilinx BSP的测试过的文件. images/linux是根据用户自定义,经过petalinux编译过的文件。
- 复制文件系统到root分区
dd if=.images/linux/rootfs.ext4 of=/dev/mmcblk0p2
-
开发板插入SD,检查拨码开关SW6(On,Off,Off,Off),连接USB串口,上位机打开串口工具(如Putty),设置115200波特率。开发板上电后,查看串口输出。
关于SD卡
如遇如下报错:
blk_update_request: I/O error, dev mmcblk0, sector 4210690 op 0x1: (WRITE) flags 0x800 phys_seg 1 prio class 0
Buffer I/O error on dev mmcblk0p2, logical block 0, lost sync page write
EXT4-fs (mmcblk0p2): I/O error while writing superblock
EXT4-fs (mmcblk0p2): mount failed
VFS: Cannot open root device "mmcblk0p2" or unknown-block(179,2): error -5
可能是读写超时,需要更换其他SD卡,解释参考这个网站
这里对市面上常见的SD和TF卡(microSD+卡套)在zcu102上进行了测试,结果如下:
名称 | 型号 | 测试 | |
---|---|---|---|
![]() | SanDisk Ultra,闪迪至尊高速™ SD™ 存储卡 16GB | SDSDUNB-016G-ZN3IN | 通过 |
![]() | SanDisk Ultra,闪迪至尊高速™ SD™ 存储卡 32GB | SDSDUNB-032G-ZN3IN | 通过 |
![]() | SanDisk Extreme,闪迪至尊极速™ SD™ UHS-I 存储卡 64GB | SDSDXV6-064G-ZNCIN | 通过 |
![]() | SanDisk Ultra,闪迪至尊高速™ microSD 16GB | SDSQUNC-016G-ZN3MN | 未通过 |
![]() | SanDisk Extreme,闪迪至尊极速移动™ microSDXC™ UHS-I 存储卡 32GB | SDSQXNE-032G-ZN6MA | 未通过 |
![]() | SanDisk Extreme PRO,闪迪至尊超极速移动™ microSDXC™ UHS-I 存储卡 32GB | SDSDQXP-032G-Z46A | 通过 |
![]() | SanDisk HIGH ENDURANCE,闪迪® 高耐用 microSD™ 存储卡 32GB | SDSQQNR-032G-ZN6IA | 通过 |
![]() | SanDisk MAX ENDURANCE,闪迪™专业级高耐用 microSD™ 存储卡 32GB | SDSQQVR-032G-ZN6IA | 通过 |