参考博客
参考网站
有许多关于在ZYNQ处理系统上安装Ubuntu或Linaro发行版的教程,但是其中大部分已经过时,其中一些使用交叉编译工具来构建内核和内核模块,大多数初学者都觉得很难。大多数教程在FPGA部分中使用特定硬件,我们无法更改。当我第一次开始在ZYNQ ZC702上安装Ubuntu时,我不得不通过所有这些方法来确定每个工具链的任务。因此,下面将介绍使用ZC702评估套件在ZYNQ-7000 AP SoC上安装Ubuntu的最简单快捷的方法。
PetaLinux
PetaLinux是由Xilinx提供的工具链,用于为ZYNQ生成Linux内核镜像、root file system和内核模块,例如具有可编译硬件的嵌入式系统(适用于FPGA部分中不同硬件设计)。
使用PetaLinux工具链,我们可以轻松地为ZYNQ PS构建内核和模块,而无需使用交叉编译工具。使用PetaLinux一个缺点是每个PetaLinux版本都附带特定的Linux内核版本。例如,PetaLinux2016.4附带一个4.6.0的默认内核版本。但是Xilinx提供了一种改变PetaLinux默认内核版本的方法。
Note PetaLinux工具可以为特定硬件设计生成U-Boot files、First Stage Boot Loader(FSBL)和BOOT.BIN。使用Xilinx SDK可以完成同样的事。
Prerequisites
- PC with Linux installed (Preferably Ubuntu 16.04 or later)
- SD card ( 8 GB or bigger)
- SD card reader
- Xilinx ZYNQ ZC702 Evaluation Kit
- PC with Vivado 2014.4 or later installed
Start
将主要介绍如何安装PetaLinux,并准备SD卡以启动Linux。更关注只用PetaLinux。
Step 1:Install PetaLinux
PetaLinux Tools Documentation: Reference Guide (UG1144)
Step 2:Prepare SD card for booting Linux
这可以通过Linux gparted轻松完成。在Ubuntu中,打开终端:
sudo gparted
如果没有安装:
sudo apt install gparted
使用SD卡读卡器将SD卡连接到PC,然后使用上面的命令启动gparted。按一下步骤准备SD卡。
- 在gparted选择SD
- 确定卸载并删除SD卡分区,以便在gparted中显示‘unallocated’。
- 右键单击未分配的空间,并使用以下设置创建新分区:
可用空间进程(Free Space Proceeding):4
新的大小(New Size):512
文件系统(File System):FAT32
标签(Label):BOOT
请勿更改其它设置,然后单击“添加(Add)完成。
- 右键单击剩余的未分配空间,并使用以下设置创建新分区:
Free Space Proceeding: 0
Free Space Following: 0
File System: ext4
Label: rootfs.
请勿更改其它设置,然后单击Add完成。
- 运用所有更改,创建分区。
Step 3:Create the Hardware Design
此步骤中,我们将使用最基本的硬件设计启动Linux。根据PetaLinux Workflow Tutorial,在ZYNQ-7000中运行Linux的硬件要求很少。如下:
- 至少一个三重定时计数器(Triple Timer Counter(TTC))
- 具有至少32MB内存的外部存储控制器
- UART用于串行控制台
- 可选:Non-volatile memory(QSPI Flash,SD/MMC)
- 可选:以太网(网络访问需要)
以下步骤创建基本硬件设计:
- 打开Vivado,创建一个新的ZYNQ-7 ZC702评估开发板RTL项目
- 在“Project Manager”窗口单击“Create Block Design”
- 在“Add IP”窗口添加“ZYNQ7 Processing System ” IP
- 连接“ZYNQ7 Processing System”上的FCLK_CLK0输出pin和M_AXI_GP0_ACLK输入pin,如下图:

- 在designer assistance中单击“Run Block Automation”,结果如下:

Note “Run Block Automation”将电路板的预设添加到设计中,通常会自动设置ZYNQ PS上运行Linux所需的所有功能。但是为了确保,我们将在下一步中检查这些功能。
- 双击“ZYNQ PS IP”,打开“Re-customize IP”窗口,然后选择“Peripheral I/O Pins” tab。然后使用下图检查配置。


- 确定配置后,单击“OK”关闭窗口。
- 右键单击“block design file”,如下图所示,然后选择“Create HDL Wrapper”。勾选“Let Vivado manage wrapper and auto-update”,然后单击“OK”。

- Synthesize the design,生成比特流。
- 生成比特流后,转到File->Export->Export Hardware, 勾选“Include bitstream”,然后单击“OK”。
根据上面的步骤,创建设计的硬件描述文件(.hdf)将保存在项目目录的"project_name.sdk"文件夹中。记住这一步骤,下一步需要。
注意 对于下一步,上面的“project_name.sdk”文件夹必须与您安装PetaLinux的操作系统位于同一操作系统中。如果在不同操作系统中完成上述步骤,只需要将该文件夹复制到相关的操作系统即可。
Step 4:Generating Kernel images for the designed hardware using PetaLinux
在安装PetaLinux的Linux中打开一个Terminal,然后转到要创建PetaLinux项目的目录。将PetaLinux项目命名为“test_boot”。
- 创建项目“test_boot”,然后进入“test_boot”目录
petalinux-create --type project --template zynq --name test_boot
cd test_boot
- 如果之前产生的*.hdf*文件在“/home/user/basic/basic.sdk/”目录:
petalinux-config --get-hw-description=/home/user/basic/basic.sdk/
petalinux-config
这将跳出一个窗口(如下图所示)来配置项目。在此窗口下,为了将内核指向自定义根文件系统,需要进行配置。

- 转到“Subsystem AUTO Hardware Settings” --> “Advanced bootable images storage Settings” --> “boot image settings”, 将“image storage media”选项设置为“primary sd”
- 转到“Subsystem AUTO Hardware Settings” --> “Advanced bootable images storage Settings” --> “kernel image settings”,将“image storage media”选项设置为“primary sd”
- 转到“Subsystem AUTO Hardware Settings” --> “Advanced bootable images storage Settings” --> “dtb image settings”, 将“image storage media”选项设为“primary sd”
- 转到“Image Packaging Configuration”,将“Root filesystem type”选项设为“SD card”
选择“Exit”,并保存新的配置。
- 运行以下命令,build the project,生成引导文件
petalinux-build
- 成功build the project后,运行以下命令生成BOOT.BIN文件(这是条单命令):
petalinux-package --boot --format BIN --fsbl ./images/linux/zynq_fsbl.elf --fpga ./images/linux/download.bit --u-boot
Note 以上命令中,使用“download.bit”作为文件名。根据自己的文件名更改命令。
Step 5:Downloading Ubuntu 16.04 LTS Root File System for ZYNQ
- Ubuntu 16.04 LTS
- Ubuntu 18.04 LTS
提取:
tar xf ubuntu...
如果SD卡的“rootfs”分区安装在“/media/rootfs”,执行下面命令解压Ubuntu root file system,并复制到“rootfs”分区,设置权限:
sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sync
sudo chown root:root /media/rootfs/
sudo chmod 755 /media/rootfs/
Step 6: Booting Linux on ZC702
将准备好的SD卡连接到PC,并将“/images/linux/”目录的文件复制到SD卡的BOOT分区
- 从Petalinux project 目录中,运行以下命令将kernel boot files复制到BOOT 分区(如果BOOT分区安装在/media/BOOT)
sudo cp ./images/linux/* /meida/BOOT/
- 复制完成后,从PC中弹出SD卡的两个分区并将其插入ZC702板。
- 将mini-USB连接到电路板的UART端口和PC
- 将ZC702的交换配置设置为从SD卡引导(如下图所示):

- 在PC(Minicom in Linux,putty in Windows)中设置串行端口运用程序,并打开电路板
- 如果所有的事情成功了,会在ZC702电路板上启动,默认用户名为Ubuntu,密码为temppwd
All done, Enjoy Ubuntu on ZYNQ