ZYNQ FPGA PetaLinux构建操作系统
版本:2019.1
开发板:ZCU102
PetaLinux是一套嵌入式Linux软件开发包,针对的是Xilinx的基于FPGA的SoC设计。PetaLinux工具包括:
- Yocoto Extensible SDK (eSDK)
- Minimal downloads
- XSCT and toolchains
- PetaLinux Command Line Interface(CLI) tools
Xilinx软件开发包(XSDK)是用于在Xilinx微处理器上创建嵌入式应用程序的IDE;PetaLinux SDK是Xilinx的一套开发工具,包含构建、开发、测试和部署嵌入式Linux系统所需的一切。
安装PetaLinux
(见文档 [ug1144]: PetaLinux Tools Documentation )
-
在Linux主机上为PetaLinux安装其所需的标准开发工具和库文件
-
PetaLinux工具需要主机的/bin/sh为bash,Ubuntu默认为dash,运行
sudo dpkg-reconfigure dash
将其修改为bash -
PetaLinux需要一些标准的开发工具和依赖库。对于Ubuntu系统,执行以下命令安装依赖库
$ sudo apt-get install -y gcc git make net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev libglib2.0-dev zlib1g:i386 screen pax gzip
-
执行以下命令安装PetaLinux
$ mkdir -p /opt/pkg/petalinux/2019.1 $ sudo chown -R xxm:xxm /opt/pkg/petalinux #递归地修改petalinux目录下所有文件的属主及组 $ ./petalinux-v2018.3-final-installer.run /opt/pkg/petalinux/2019.1
- 因PetaLinux不能安装在root用户下,而创建的/opt/pkg/petalinux/2018.3目录默认只有属主具有写权限,而属主是root,通过将属主修改为普通用户,就可以在该目录下以普通用户的身份安装PetaLinux了。
- 安装完成后,不能移动或拷贝已安装的目录,因为在Yocto e-SDK环境文件中已存储了工具的全路径。
- 安装过程中,会显示license信息,要先输入‘q’退出后,才能输入y同意license
-
设置PetaLinux的工作环境
$ source /opt/pkg/petalinux/2019.1/settings.sh
-
检验工作环境
echo $PETALINUX
-
补充: 若安装过程中出现
awk: read error (Bad address)
错误,请确保*/usr/bin/awk指向的是/usr/bin/gawk*,而不是/usr/bin/mawk
,若没有gwak,则需要安装gawk,运行sudo apt install gawk
设计流程
Design Flow Step | Tool /Workflow |
---|---|
Hardware Platform Creation (for custom hardware only) | Vivado |
Create PetaLinux Project | petalinux-create -t project |
Initialize PetaLinux Project (for custom hardware only) | petalinux-config --get-hw-description |
Configure System-Level Options | petalinux-config |
Create User Components | petalinux-create -t COMPONENT |
Configure the Linux Kernel | petalinux-config -c kernel |
Configure the Root Filesystem | petalinux-config -c rootfs |
Build the System | petalinux-build |
Package for Deploying the System | petalinux-package |
Boot the System for Testing | petalinux-boot |
基于BSP
-
PetaLiux BSPs:板级支持包是对所支持开发板的参考设计,可以用作自己创建的工程的基线,它包含了所有必需的设计和配置文件、pre-built和已测试的硬件、软件映像,可以直接下载到开发板中,或者在QEMU仿真环境中启动。
-
从PetaLinux Downloads下载BSPs,此处下载ZCU102 ZU9 ES2 Rev 1.0 BSP并将其移到*/opt/pkg/petalinux/2019.1/bsp*目录中。
-
执行以下命令创建工程
$ cd ~ $ petalinux-create -t project -s /opt/pkg/petalinux/2019.1/bsp/xilinx-zcu102-v2019.1-final.bsp
从头开始
-
使用Vivado创建自己的硬件平台。以下是Zynq UltraScale+ MPSoC启动Linux的硬件需求:
- 至少有64MB的外部存储器(必需)
- 用作serial console的UART(必需)
- 非易失性存储器(可选),如QSPI Flash和SD/MMC
- 以太网(可选)
- 若soft IP或外部PHY设备使用了中断,要确保中断信号被连接到PS
-
导出硬件平台:在配置完硬件工程并构建硬件bitstream之后,PetaLinux工程需要一个硬件描述文件(.hdf/.dsa文件),可以通过Vivado中的
Export Hardware
得到。在工程初始化(或更新)期间,PetaLinux会基于该硬件描述文件生成一个设备树源文件、U-Boot配置头文件并使能Linux内核驱动。对于Zynq UltraScale+ MPSoC平台,启动还需要PMU固件和ATF启动,参考附录C构建PMU和ATF。 -
创建PetaLinux工程:
petalinux-create --type project --template <PLATFORM> --name <PROJECT_NAME>
- PLATFORM可以是zynqMP(用于UltraScale+ MPSoC)、zynq(用于Zynq-7000)、microblaze(用于MicroBlaze CPUs)
- 该命令会从一个默认的模板创建一个新的PetaLinux工程文件夹
配置并构建
-
进入自己的工程目录:
cd <plnx-proj-root>
-
导入硬件描述文件(若DSA和HDF文件同时存在,DSA(Device Support Archive)文件优先):
petalinux-config --get-hw-description=<path-to-hdf/dsa-directory>
-*- ZYNQMP Configuration
Linux Components Selection --->
Auto Config Settings --->
-*- Subsystem AUTO Hardware Settings --->
DTG Settings --->
ARM Trusted Firmware Compilation Configuration --->
PMU FIRMWARE Configuration --->
FPGA Manager --->
u-boot Configuration --->
Image Packaging Configuration --->
Firmware Version Configuration --->
Yocto Settings --->
-
确保Subsystem AUTO Hardware Settings被选择,该菜单允许定制系统范围的硬件设置,进入该菜单:
Subsystem AUTO Hardware Settings System Processor (psu_cortexa53_0) ---> Memory Settings ---> Serial Settings ---> Ethernet Settings ---> Flash Settings ---> SD/SDIO Settings ---> RTC Settings ---> [*]Advanced bootable images storage Settings --->
这一步中工具会分析硬件描述文件,得到所需要的硬件描述信息来更新设备树、PetaLinux U-Boot配置文件、内核配置文件,基于“Auto Config Settings”和“Subsystem AUTO Hardware Settings”设置。例如,当ps7_ethernet_0被选作Primary Ethernet时,并且对kernel config和U-Boot config开启了自动更新时,工具会自动使能其内核驱动并更新U-Boot配置头文件以使用选择的以太网控制器。
-
选择“Exit”后,工具开始执行构建过程
经测试,硬件描述文件真的只需要hdf文件即可,测试时使用
petalinux-create
创建的工程,将基于BSP创建的工程xilinx-zcu102-v2019.1中的硬件描述文件xilinx-zcu102-v2019.1.hdf拷贝到自己创建的工程的hardware目录中,并在自己创建的工程的根目录执行:petalinux-config --get-hw-description=./hardware
此步生成的文件在project-spec/meta-plnx-generated目录下
-
构建PetaLinux系统映像
petalinux-build
生成文件在images/linux目录中,其中image.ub是FIT映像、Image是包含了RootFS的内核映像
-
生成uImage
petalinux-package --image -c kernel --format uImage
-
生成启动映像BOOT.BIN,它常包括FSBL、FPGA bitstream(可选)、PMU固件、ATF和U-boot
petalinux-package --boot --format BIN --fsbl images/linux/zynqmp_fsbl.elf --u-boot images/linux/u-boot.elf --pmufw images/linux/pmufw.elf --fpga images/linux/*.bit --force
--format
: 要生成的映像文件的格式--force
: 覆盖已存在的文件
–atf: 用于指定ATF固件的位置,此处使用了默认值*/images/linux/bl31.elf*
Booting and Packaging
本节描述如何将新建的映像打包到一个prebuilt目录中,当需要将项目以BSP方式发布给其他用户时,通常会执行该步骤。
petalinux-package --prebuilt --fpga images/linux/system.bit
在QEMU上引导PetaLinux映像
petalinux-boot --qemu --prebuilt 3
- 为了成功运行该指令,通过
petalinux-package
得到的pre-built/linux/images目录中还差2个文件:pmufw.elf和pmu_rom_qemu_sha3.elf,前者在当前工程的images/linux目录中拷贝,后者在xilinx-zcu102-v2019.1/pre-built/linux/images目录(基于BSP创建的工程)中拷贝 - 因主机OS使用的不是英语,需要在执行上述该指令前,执行
LANG=C
将环境变量LANG
设置为C
,否则会报qemu-system-aarch64: Unable to get size, of device tree file '/tmp/tmp.cA9TX5ccQ0'
的错误 - 登入PetaLinux的用户名和密码均为
root
;退出QEMU,先按下Ctrl+A,再按下X
在硬件上使用SD卡引导PetaLinux映像
- 将SD卡挂载到主机上
- 将pre-built/linux/images目录下的BOOT.BIN和image.ub拷贝到SD卡(FAT32格式)的第一个分区的根目录
- 在主机上连接板子上的串口
- 在主机上打开一个控制台并启动串口通信程序(如kermit、minicom、gtkterm),波特率设置为115200
- 将板子断电
- 将板子的启动模式设置为SD卡启动
- 将SD卡插到板子上
- 给板子上电
- 通过串口控制台观察启动消息
BSP打包
定制的PetaLinux工程可以通过BSPs分发给下一级团队或外部客户。
petalinux-package --bsp -p `pwd` --output MY.BSP
-
以上是在工程根目录下执行该命令,也可以在其他地方执行该命令,
-p
的参数为工程根目录。 -
若要将硬件相关的文件也打包到BSP中,可以通过增加
--hwsource
选项实现petalinux-package --bsp -p <plnx-proj-root> --hwsource <hw-projectroot> --output MY.BSP
-
也可以将外部源添加到BSP包中,需要将外部源拷贝到component/ext_sources目录下