文章目录
前言
本文以Xilinx ZCU106为例,从0开始搭建一个petalinux项目工程,目标是编译出来的镜像,最终烧写进开发板后的效果与烧写官方提供的镜像效果一致。
一、Petalinux是什么?
PetaLinux 是Xilinx公司推出的嵌入式Linux开发套件,直接构建在 Yocto 项目顶层的定制工具,用于实现与赛灵思平台的集成。
说人话就是可以利用petalinux建立一个工程文件,工程里可以配置生成u-boot、kernel、rootfs等镜像文件,再烧写到赛灵思平台,不用再到处找源码去配置移植,里面的工具都会帮你配好,只要配置好相关文件,其它的它都会帮你自动生成。
二、使用步骤
1.安装petalinux
这一步网上已经有很多教程,就不多废话了,就一点:要注意自己下载安装的版本,后面和Xilinx开发的版本尽量保持一致,否则容易出现些奇奇怪怪的问题,我这里选择安装的是petalinux 2022.2版本,ubuntu 18.04.2版本,VMware Workstation Pro 17版本,下载petalinux前需要注册一个AMD账号,不麻烦,后面很多资源都需要在官网上下载。
Xilinx官网下载链接: https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools/archive.html
安装完成后,在每次打开新终端时都要运行一遍命令配置环境,不然后面的步骤会有影响。
2.设计目标
官方提供的TRD(目标参考设计)目录如下:
rdf0428-zcu106-vcu-trd-2022-2
├── apu
│ └── vcu_petalinux_bsp
├── images
│ ├── vcu_audio
│ ├── vcu_llp2_hdmi_nv12
│ ├── vcu_llp2_hlg_sdi
│ ├── vcu_llp2_plddr_hdmi
│ ├── vcu_multistream_nv12
│ ├── vcu_plddrv1_hdr10_hdmi
│ ├── vcu_plddrv2_hdr10_hdmi
│ └── vcu_yuv444
├── pl
│ ├── constrs
│ ├── designs
│ ├── prebuild
│ ├── README.md
│ └── srcs
├── README.txt
└── zcu106_vcu_trd_sources_and_licenses.tar.gz
这里我们以Xilinx的
Zynq UltraScale+ MPSoC VCU TRD 2022.2 - Xilinx Low Latency PS DDR NV12 HDMI Audio Video Capture and Display版本为例,对应镜像文件在rdf0428-zcu106-vcu-trd-2022-2/images/vcu_llp2_hdmi_nv12中。
具体镜像对应的功能在官方Wiki中都有说明,附上链接:
Xilinx Wiki: https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/444006775/Zynq+UltraScale+MPSoC)
针对本次例子的说明如下:
3.建立工程
在开始前要准备好bsp文件和xsa文件,这两个文件在官方提供的TRD包中都能找到,bsp路径在rdf0428-zcu106-vcu-trd-2022-2\rdf0428-zcu106-vcu-trd-2022-2\apu\vcu_petalinux_bsp,xsa路径在rdf0428-zcu106-vcu-trd-2022-2\rdf0428-zcu106-vcu-trd-2022-2\pl\prebuild\zcu106_llp2_audio_nv12,准备好之后就可以正式开始搭建我们的工程了。
1.准备环境
在创建工程前,需要在petalinux安装路径下找到环境脚本执行,并把sh命令解释器修改为bash。
cd /opt/pkg/petalinux/2022.2/
source settings.sh
//验证方法:
echo $PETALINUX
ls -lh /bin/sh
2.创建petalinux工程
petalinux-create -t project -s ../hardware/zcu106_wiki_demo/xilinx-vcu-zcu106-v2022.2-final.bsp -n zcu106demo
-t --type的缩写,表示建立的类型为project。
-s 表示使用bsp文件来创建工程,也可以使用–template,表示用平台模版创建工程。
-n 表示建立的工程名
完成后当前目录下就有了名为zcu106demo的项目工程了。
3.配置petalinux工程
进入工程中,将准备好的xsa文件导入工程,这一步要稍等片刻,最后的路径只要包含到xsa目录就好。
cd zcu106demo/
petalinux-config --silentconfig --get-hw-description=../../hardware/zcu106_wiki_demo/xsa
4.配置设备树文件
这一步需要把官方提供的设备树文件配置到工程中,否则后面编译的时候会出现kernel编译错误,提示设备树缺少节点的情况。注意:如果第一步没有用官方bsp包建立工程,下面目录下是不会生成官方dtsi文件的。一般来说,没有特别需求的话,u-boot,kernel,rootfs的配置保持默认就好。
cd project-spec/meta-user/recipes-bsp/device-tree/files/
ln -sf vcu_llp2_psddr_hdmi.dtsi system-user.dtsi
接下来返回到工程目录页,修改编译配置,这里我是下载了官方的离线编译包,这样速度会快点,虽然离线包很大,但是以后编译会方便很多,不然像默认联网编的话耗费时间是很多的,没有下载离线包的友友可以跳过这一步。下载链接在第一步。
cd -
petalinux-config
/*
选择如下:
Yocto setting配置离线包
--->Local sstate feeds settings
--->aarch64解压目录
--->Add pre-mirror url
--->file://Downloads解压目录
[ ] Enable Network sstate feeds
[ ] Enable BB NO NETWORK 有些包在离线包中没有的,只能联网下载,所以不能使能
*/
5.编译petalinux工程
这一步时间比较久,可以去喝个水。
petalinux-build
6.打包、制作启动文件
上一步成功编译没有报错的话,离成功也就不远了,这一步的目的是把编译好的固件打包成指定镜像格式,方便烧写,分别是BOOT.BIN,system.dtb,Image, rootfs.cpio.gz,u-boot,boot.scr 这5个文件。
cd images/linux
petalinux-package --boot --fsbl zynqmp_fsbl.elf --u-boot u-boot.elf --pmufw pmufw.elf --fpga system.bit --force
cp BOOT.BIN system.dtb Image rootfs.cpio.gz.u-boot boot.scr <Path to Design images>
这一步可以设置打包什么文件进BOOT.BIN中,方便了解镜像结构,以及后期可以分开不同文件去单独开发烧录(主要是system.bit和system.dtb),提高效率。
至此,我们的petalinux工程就已经编译好了,接下来要做的就是把上述的5个镜像文件拷贝到SD卡,在开发板上启动,效果就和烧写官方镜像是一样的了。SD卡启动文件如下:
总结
以上就是今天要讲的内容,本文介绍了petalinux的使用,从0开始搭建了一个项目工程,生成了和官方效果一样的镜像文件,制作不易,多多包涵。