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 根据自定义硬件平台创建工程
对于绝大多数的非官方参考开发板,都需要根据设计好的硬件平台手动创建工程。
#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 | $ petalinux-config -c u-boot |
#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 | $ petalinux-build -c u-boot |
编译完成后的镜像文件位于:./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文件
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 | $ petalinux-boot --jtag --fpga --bitstream <BITSTREAM> |