虽然 petalinux 功能很全面,但是其编译速度较慢,不适用于驱动调试阶段(因为驱动调试阶段会频繁修改驱动模块、内核、设备树等),因此本章将采用分步编译的方式来编译启动开发板所需要的各种镜像文件,虽然步骤比较繁琐,但灵活性比较高,方便在驱动调试过程中单独对某一部分进行修改。
对于 Zynq 而言,一个完整的 linux 系统包含 PS 和 PL 两个构件,其中 PS 构件包含 fsbl、uboot(包括可选的boot.scr)、设备树文件、linux内核、根文件系统共 5 要素,PL 构件包含 bit 文件一个要素(当不使用 PL 的时候,该要素非必须)。
利用 Petalinux 构建根文件系统和 BOOT.BIN
这里主要是利用 Petalinux 工具构建根文件系统、fsbl、uboot(fsbl 和 uboot 最终打包到 BOOT.BIN 中),同时在编译过程中还能生成设备树源文件。
- 创建在创建 Vivado 硬件平台的时候必须包含ZYNQ IP核,且配置ZYNQ的如下外设:
- flash,若采用flash模式启动则必须配置
- ENET,一般Linux都需要有网络
- SD或EMMC,用于存放Linux根文件系统等,若从SD0启动则必须要配置SD0
- UART,Linux的终端需要使用串口
- DDR,Linux运行时需要DDR
- 如果使用了带中断信号的IP核需确保中断信号正确连接
配置完成后生成Products,然后编译工程,编译完成后导出xsa文件,如果工程中包含PL资源,在到处xsa时需要选择包含比特模式。
- 创建 petalinux 工程
#加载petalinux工作环境
source /opt/pkg/petalinux2020.2/settings.sh
#创建空的petalinux工程
petalinux-create -t project --template zynq -n alientek-pelainux
- 配置petalinux工程
#进入工程目录
cd alientek-pelainux/
#导入xsa文件,并打开配置菜单
petalinux-config --get-hw-description ../xsa-alientek/
进行如下配置:
-*- Subsystem AUTO Hardware Settings --->
Serial Settings --->
FSBL Serial stdin/stdout (ps7_uart_0) ---> #根据硬件选择正确的串口号,我这里选择ps7_uart_0
DTG Serial stdin/stdout (ps7_uart_0) ---> #根据硬件选择正确的串口号,我这里选择ps7_uart_0
[*] Advanced bootable images storage Settings ---> #为了方便调试,全部选择primary sd,调试完成后根据需求重新进行配置
boot image settings --->
image storage media (primary sd) --->
u-boot env partition settings --->
image storage media (primary sd) ---> #还需要在uboot进行相应配置才能将环境变量存储到SD
kernel image settings --->
image storage media (primary sd) --->
dtb image settings --->
image storage media (primary sd) --->
Yocto Settings --->
Add pre-mirror url --->
pre-mirror url path #将pre-mirror url path设置为file://downloads_2020.2.tar.gz解压后的目录,我这里是 file:///opt/pkg/petalinux2020.2/downloads
Local sstate feeds settings--->
()local sstate feeds url #将local sstate feeds url设置为sstate_arm_2020.2.tar.gz解压后得到的arm路径下,我这里是/opt/pkg/petalinux2020.2/sstate_arm_2020.2/arm
[ ] Enable Network sstate feeds #取消此项选择
[*] Enable BB NO NETWORK #选中此选项
- 配置uboot
#打开uboot配置菜单
petalinux-config -c u-boot
进行如下配置:
Environment --->
[*] Environment is in a FAT filesystem #将环境变量存储到FAT文件系统
[ ] Environment is in SPI flash #取消flash存储环境变量的选项