Petalinux 入门指南:第一个Petalinux工程

#1 Petalinux BSP

参考:
homepage: https://www.xilinx.com/products/design-tools/embedded-software/petalinux-sdk.html
ug1144: https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_3/ug1144-petalinux-tools-reference-guide.pdf

Petalinux 中的一个工程被称为一个BSP,BSP包含运行系统所需的所有文件,BSP的出现使得跨团队的开发变得更为便捷。自定义的Petalinux可以通过打包再交付给下一级的开发人员,使得其不需要重新配置就可以直接使用上级开发人员的产出。
Xilinx和二级开发板制造商可能会提供“参考BSP”,一个由供应商开发人员打包的完整BSP,可以做到即载即用,并且这些设计可以作为用户进行进一步开发的基础。
综上,有两种方法建立Petalinux工程:

  • 下载官方的参考BSP,并创建工程
  • 使用自行设计的硬件平台创建新的工程

#2 根据参考BSP创建工程

参考:
homepage: https://www.xilinx.com/products/design-tools/embedded-software/petalinux-sdk.html
ug977: https://www.xilinx.com/support/documentation/sw_manuals/petalinux2013_10/ug977-petalinux-getting-started.pdf

你只需找到对应开发板的参考BSP包,下载载入即可。参考BSP已经预先编译好了系统和Demo,无需用户再次编译,可以直接下载至开发板或会使用QEMU进行模拟。
首先请手动创建预期的工程目录,并将工作路径切换至目录中,随后加载Petalinux环境变量,然后根据BSP创建新的工程:

1
$ petalinux-create -t project -s /path/to/your/bspfile.bsp -n custom-project-name

请修改命令中的BSP文件路径至实际的路径。

随后可以尝试在QEMU虚拟机中启动预编译的系统镜像:

1
$ petalinux-boot --qemu --kernel

如果一切正常,你应该可以看见u-boot和kernel启动过程中的log输出,直至最后停留在登陆命令处,可以使用root账户(默认密码为”root”)登入。


#3 根据自定义硬件平台创建工程

参考:
ug1144: https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_3/ug1144-petalinux-tools-reference-guide.pdf

对于绝大多数的非官方参考开发板,都需要根据设计好的硬件平台手动创建工程。

#3.1 获取硬件平台设计文件

首先,你需要在Vivado中进行硬件设计,为了让Linux可以正常在zynq芯片的arm核上运行,你需要分配一定的硬件资源。根据ug1144,对于使用Petalinux的参考Linux,需要提供以下的资源:

  • TTC模块,作为系统时钟
  • 至少32MiB存储空间
  • UART模块(可选)用于输出控制台
  • NV存储器(可选)
  • 以太网接口(可选)

如果要使用Microblaze等其他处理器,请参考ug1144。

在Vivado中启用并预留好相应的硬件资源、设计实现PL部分,进行综合,实现,使用“Export Hardware”功能导出Petalinux需要的硬件平台设计文件,包括用于描述硬件配置的xsa文件和保存比特流的bit文件。

#3.2 创建Petalinux工程

将需要文件拷贝至期望的新Petalinux工程目录下,对于zynq芯片平台,执行如下命令:

1
$ petalinux-create --type project --template zynq --name custom-project-name

你应该可以在终端上看到成功创建工程的输出信息,若是其余硬件平台请修改”template”参数。

随后需要载入之前导出的硬件设计文件,使用如下命令,Petalinux会自动在当前目录中寻找可用的硬件设计文件:

1
$ petalinux-config --get-hw-description

因为是新的工程,Petalinux会自动进入配置界面,在里面我们可以配置一些系统参数,主要的配置包括:启动方式,启动存储器分区表,启动文件名称等等。请根据硬件平台的设计选择对应的u-boot和kernel启动方式,如果希望使用QEMU虚拟机进行仿真则无需修改启动选项,QEMU虚拟机将直接读取kernel镜像。
退出至配置根目录,使用左右方向键移动下方功能光标,选择“Save”保存配置文件,之后退出配置界面,Petalinux会自动根据配置文件配置当前工程。
配置过程需要进行文件复制,所需时间从10分钟至半小时不等,配置过程中不需要进行人工确认。

如果你需要配置kernel,比如加入硬件支持或者进行内核裁剪,请使用如下命令打开kernel配置界面:

1
$ petalinux-config -c kernel

与正常的kernel配置界面并无区别(实际上就是调用了menuconfig)。

此外,还有如下配置可以进行:

1
2
3
4
5
$ petalinux-config -c u-boot
#配置u-boot

$ petalinux-config -c rootfs
#配置rootfs

#3.3 设备树配置

Petalinux能够根据硬件描述文件自动地把IP外设添加至设备树中,但是对于其他的非IP外设则需要手动修改设备树以告知系统该硬件的存在。
设备树文件的目录为:./subsystems/linux/configs/device-tree
具体方法与常规的ARM Linux设备树修改无异,这里就不再赘述。

修改设备树后,可以使用如下命令编译设备树文件,而不进行全局编译:

1
$ petalinux-build -c device-tree

#3.4 编译

请确保电脑的供电稳定,能够顺利访问境外服务器,磁盘上有至少20GiB的剩余空间,以及4GiB的空闲内存

在工程目录下,执行如下命令:

1
$ petalinux-build

Petalinux将编译u-boot,kernel以及rootfs,编译过程可能需要联网下载文件,总耗时取决于电脑配置和境外网速,从30分钟至4小时不等。

自然,你可单独编译这三个部分,具体命令如下:

1
2
3
4
5
$ petalinux-build -c u-boot

$ petalinux-build -c kernel

$ petalinux-build -c rootfs

编译完成后的镜像文件位于:./images/linux
其中四个文件在接下来会被用到,

  • zynq_fsbl.elf (zynq引导文件)
  • image.ub (Linux系统镜像)
  • u-boot.elf (u-boot引导文件)
  • your-bitstream.bit (比特流文件)

这里可以顺便一提,zynq使用三阶段引导,分别是

  • rom boot loader,固化在rom中
  • fsbl,用于加载bitstream并启动下一阶段引导
  • u-boot或其他boot loader,负责arm核的初始化和系统镜像的引导。

#4 打包制作BOOT.BIN文件

参考:
ug1144: https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_3/ug1144-petalinux-tools-reference-guide.pdf

BOOT.BIN文件为zynq系列芯片的启动引导的标准名称,包含fsbl、uboot和比特流文件,使用sd卡或者u盘或者其他外部存储进行启动时,都需要先将引导打包成BOOT.BIN文件。

在Petalinux工程目录下,执行如下命令进行打包:

1
$ petalinux-package --boot --fsbl zynq_fsbl.elf --fpga your-bitstream.bit --u-boot u-boot.elf

请根据实际情况,修改比特流文件的名称。


#5 启动系统

参考:
ug1144: https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_3/ug1144-petalinux-tools-reference-guide.pdf
ug982: https://www.xilinx.com/support/documentation/sw_manuals/petalinux2013_10/ug982-petalinux-system-simulation.pdf

#5.1 从QEMU启动系统

QEMU虚拟机可以直接加载系统镜像,而不需要其他引导,具体命令如下:

1
$ petalinux-boot --qemu --kernel

root账户的默认密码为 root

如果想退出虚拟机,请按下 Ctrl+a*,然后按下 *x

#5.2 从jtag启动系统

连接至开发板串口,并将波特率设置为115200以正确读取输出,执行如下命令启动系:

1
$ petalinux-boot --jtag --prebuilt 3

–prebuilt 3 意味着linux kernel。
root账户的默认密码为 root

如果只需要将程序下载至开发板而不进行启动,可以执行如下命令:

1
2
3
$ petalinux-boot --jtag --fpga --bitstream <BITSTREAM>
$ petalinux-boot --jtag --u-boot
$ petalinux-boot --jtag --kernel

遇到问题请优先考虑ug1144,善用目录和查找功能。

Petalinux 入门指南:Petalinux的介绍与安装

#1 序

Xilinx的文档一向以“烂”著称,而Petalinux有关的文档则是集大成者,如果你发现某处出现了magic command,那很可能只是在某文档的小字里面淡淡描述过。
该文章系列一共有三部分,分别是Petalinux的介绍与安装,你的第一个Petalinux工程,以及Petalinux的应用开发,有关IP核的开发和设备树等涉及硬件的开发这个系列不涉及,不过可能有番外篇来讲述一下QEMU的网络配置。如果安装过程中出现某些奇怪的报错内容,还请google一下。
考虑到Xilinx的服务器全部位于海外,如果你正在看着这篇文章,并试图去跟着完成Petalinux的开发,那么请现在就去开始下载。注意,下载与你所使用的硬件开发工具(如Vivado)大版本号相同的Petalinux
Petalinux本身并不复杂,许多功能也不magic,只是你不知道,Xilinx也不告诉你,我会试图分析并解释这些功能。考虑到部分内容也只是我的经验之谈,如有错误还请指正。


#2 Petalinux 101

参考:
homepage: https://www.xilinx.com/products/design-tools/embedded-software/petalinux-sdk.html
ug1144: https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_3/ug1144-petalinux-tools-reference-guide.pdf

按照较为商业的说法,Petalinux是一个“解决方案”,而非Linux发行版,Petalinux为用户提供从定制内核和rootfs,编译内核和rootfs以及打包启动镜像并部署至开发板的全套功能。同时为了提升效率,Petalinux可以与类似Vivado之类的“Xilinx 硬件开发工具”配合使用,比如可以导入Vivado导出的硬件描述文件和bitstream文件构建一个PS+PL的项目。
Petalinux是随着zynq等arm+fpga这类组合芯片的出现而诞生的,解决了在这类arm+fpga芯片上移植linux等等琐事。如果不使用Petalinux,用户需要手动编译kernel和u-boot,然后将编译得到的镜像在Vivado等工具中,与FSBL、bitstream手动打包成启动镜像,然后拷贝至sd卡进行启动,Petalinux则将这所有工作集中到一套sdk中,同时提供独立的qemu虚拟机便于测试应用程序能否在fpga板上正确运行。

Petalinux本身主要由两大部分组成:

  • 一个配置、编译、开发工具包 (PetaLinux Tools)
  • 一个Xilinx开发的Linux发行版 (Reference Linux Distribution)

接下来我们一一介绍这两个部分。

PetaLinux Tools (host)

Petalinux Tools是一个大的“软件合集”,包括如Petalinux的cli,应用、驱动的模板,系统镜像打包工具,QEMU模拟器以及GCC工具链等等工具,提供从创建文件夹到在开发板运行系统的一条龙服务。
开发人员可以使用这些工具来自定义引导加载程序,Linux内核或Linux应用程序。他们可以通过QEMU进行仿真,或网络和JTAG在物理硬件上运行系统内核,添加设备驱动程序,应用程序,库以及启动和测试软件。
根据其功能,这些工具主要被分为三类,分别是:

  • 自定义板机支持包生成工具:
    可以通过“Xilinx 硬件开发工具”导出的文件自动生成一个定制的Linux Board Support Package,其中包括内核和引导加载程序的配置,以及IP核驱动程序。
  • Linux配置工具:
    用于自定义引导加载程序,Linux内核,文件系统,库和系统参数的工具。与普通kernel的配置工具不同,这些配置工具将“完全知晓Xilinx硬件开发工具,并且可以读取自定义硬件有关的文件”。
    换句话说,这些工具能够配置一些fpga特有的功能,同时可以读取你开发的PL部分(如IP,或者什么其他的Verilog代码),并进行正确的配置(如获取正确的GPIO寄存器地址)。
  • 软件开发工具:
    用于开发驱动程序、应用程序以及函数库。能够创建相应的工程模板,并能够编译、打包和分发软件组件(software components),使开发人员不需要过多关心编译相关的底层问题,并能够轻松的在开发板上安装和使用自己开发的程序。

Reference Linux Distribution

PetaLinux提供一个完整的参考Linux发行版,该发行版已针对Xilinx的FPGA设备进行了集成和测试。
这个发行版包含以下内容:

  • Boot loader
  • 优化过的kernel
  • 基本的Linux软件和运行库
  • Debug工具
  • 对多线程和FPU计算的支持
  • 集成式web服务器

当然,你可以使用其他的Linux发行版作为rootfs,比如ubuntu minimal等等,但是一般来说使用Petalinux自带的参考Linux发行版就足够了。

自此,我们完整的介绍了Petalinux,所以Petalinux是什么?工具包+Linux发行版。


#3 安装Petalinux

参考:
ug976: https://www.xilinx.com/support/documentation/sw_manuals/petalinux2013_10/ug976-petalinux-installation.pdf

大体上用户只需要执行安装包即可,但是Petalinux的安装脚本仅仅适配了REHL系发行版,这意味在其他发行版可能存在环境问题,需要我们手动配置环境。
注意:请确保安装Petalinux的磁盘有至少50GiB的空闲容量,推荐至少有100GiB的空闲容量

step 1 下载安装包

考虑到Petalinux的“安装包”实际上是一个“脚本”,并且在安装过程中需要进行解压操作,如果压缩部分出现少量错误,极有可能耗费数个小时但无功而返,因此请务必在下载完成后检查下载文件的hash值是否一致,若不一致还请重新下载。
此外,请尽可能保证Petalinux和硬件开发工具的大版本号一致(如”2019.2”中的”2019”),以确保硬件描述文件等等是通用、可接受的。

step 2 配置运行环境

参见ug976 11页表格,请根据你的发行版安装所需要的软件包。
如果你使用的是Debian/Ubuntu发行版,那么可以尝试以下指令:

1
sudo apt install tofrodos iproute gawk make net-tools libncurses5-dev tftpd zlib1g:i386 libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential screen pax gzip

如果报错,请查看报错的软件包是否因为版本更新而改用其他名称

step 3 安装

执行petalinux-vxxxx.xx-final-installer.run,即你下载的安装包,它会默认安装至当前工作目录,即你执行安装包的目录。

  1. 安装过程需要解压缩,安装总耗时取决于磁盘性能,从半小时到数小时不等。
  2. 安装中途需要进行数次手动确认,因此请时不时看一下安装进度。
  3. 如果提示“tftp server”未运行,请暂时忽视,这并不会影响Petalinux的安装。
  4. 使用systemctl或者init.d启动tftp server即可,可能需要手动创建tftp用于收发文件的目录,根据错误提示手动创建目录即可。
  5. 运行安装包请勿使用root权限,如果报出权限错误,请检查该安装包是否未被赋予可执行权限

step 4 验证安装

安装完成后,进入安装目录
如果你是bash/zsh用户,请source setting.sh:

1
$ source ./setting.sh

如果你还仍然坚持使用c shell,请source setting.csh:

1
$ source ./setting.csh

你应该在终端上看见类似如下所示的输出:

1
2
3
4
5
6
PetaLinux environment set to ’/opt/petalinux-v2019.1-final’
INFO: Finalising PetaLinux installation
INFO: Checking free disk space
INFO: Checking installed tools
INFO: Checking installed development libraries
INFO: Checking network and other services

随后,请检查工作目录环境变量是否配置正确:

1
2
$ echo $PETALINUX
/opt/petalinux-v2019.1-final

该环境变量的值应该指向Petalinux的安装目录。