0.设置petalinux环境变量
在 Ubuntu 系统中需要先设置 petalinux 工作环境,也就是对 petalinux 工作环境进行初始化,在终端输入如下命令即可:
source /opt/pkg/petalinux/2018.3/settings.sh
1.创建petalinux工程
petalinux-create -t project --template zynq -n ad9371
template 参数表明创建的 petalinux 工程使用的平台模板,此处的 zynq 表明使用的是
zynq 平台模板的 petalinux 工程,用于 zynq-7000 系列的芯片。name 参数(此处简写为“-n”)后接的是 petalinux 工程名,如此处的"ad9371”。创建后如图所示
2.配置petalinux工程
首次配置 Petalinux 工程是将 hdf 硬件描述文件文件导入到 Petalinux 工程中,Petalinux工具会解析 hdf 文件并弹出配置窗口。在终端中输入如下命令配置 Petalinux 工程:
cd ad9371 //进入到 petalinux 工程目录下
petalinux-config --get-hw-description ../hdf/adrv9371x_zc706.sdk/ //导入 hdf 文件
即进入到 petalinux 工程文件夹,并配置 petalinux 工程。“petalinux-config
–get-hw-description ” 命 令 后 面 的 文 件 夹 就是vivada生成的.sdk文件夹,该文件夹含有.hdf文件(硬件信息),大家根据自己的实际路径填写。如果后面修改了 Vivado 工程,重新生成 hdf 文件后,可以重新执行“petalinux-config --get-hw-description <hdf 文件目录>”命令以重新配置 Petalinux 工程。
Hdf 文件导入成功之后会自动弹出 petalinux 工程配置窗口,如下图所示
注:由于我需要用到ad9371,所以我的内核是使用adi公司提供的,其网址如下:https://github.com/analogdevicesinc,下载版本时,选和petalinux配套的,避免其他问题。
进 入 到 “ Linux Components Selection—>u-boot(u-boot-xlnx)”菜单下,配置 Linux 内核来源。此处选择“ext-local-src”,也就是本地存放的uboot 内核源码,如下图所示:
然后进入external u-boot …
输入uboot文件的绝对位置
linux 内核导入方法和u-boot一样。
根文件系统如果较大,可将根文件系统放在另一个分区
进入Image Packaging Configuration
进入后如图所示
进入Root filesystem type (INITRAMFS)
选择SD card.
对于rootfs的配置,如果不需要登陆密码,可以执行以下命令配置根文件系统
petalinux-config -c rootfs
进入Image Features
使能该菜单下的“debug-tweaks”选项,就不需要手动输入用户名和密码了。
2.编译
执行petalinux-build编译工程
该命令将生成设备树 DTB 文件、fsbl 文件、U-Boot 文件,Linux 内核和根文件系统映像。编译完成后,生成的映像将位于工程的 images 目录下。需要说明的是 fsbl、U-Boot 这两个我们在工程中并不需要配置,这是因为 Petalinux 会根据 hdf 文件和 petalinux-config 去自动配置 fsbl 和 uboot,如无特需要求,不需要再手动配置
3.打包
petalinux-package --boot --fsbl --fpga --u-boot --force
选项“–fsbl”用于指定 fsbl 镜像文件所在位置,后面接文件对应的路径信息,如果不
指定文件位置,默认对应的是 images/linux/zynq_fsbl.elf;选项“–fpga”用于指定bitstream 文 件 所 在 位 置 , 后 面 接 该 文 件 对 应 的 路 径 信 息 , 默 认 对 应 的 是images/linux/system.bit;选项“–u-boot”用于指定 U-Boot 镜像所在位置,后面接该文件所在路径信息,默认为 images/linux/u-boot.elf。这里我没有指定对应的文件的路径信息,那么 Petalinux 会自动使用默认文件。
4.制作SD启动卡
由于根文件系统较大,在前面petalinux-config --get-hw-description …/hdf/adrv9371x_zc706.sdk/时,根文件系统选择了sd card,所以这里我们需要2个分区,一个分区使用FAT32文件系统,用于放置启动镜像文件(如BOOT.BIN,linux镜像等),另一个分区使用EXT4文件系统,用于存放根文件系统。(如果根文件系统的类型配置使用的是INITRAMFS,只需要一个分区( FAT32 文件系统的)就可以了)。
对于sd卡的分区设置,命令如下所示
umount /dev/sdb*
sudo fdisk /dev/sdb
。。。。
5.将编译的文件拷贝到sd卡
首先将petalinux工程目录image/linux目录下的BOOT.BIN和image.ub文件拷贝到名为boot分区也即/dev/sdb1分区中。
再将rootfs.tar.gz解压到rootfs分区也即/dev/sdb2分区中。