ZYNQ7000 #0 - petalinux的使用与工程建立(都9102年了,就用用便利的工具吧)

目录

 

0 - 前言

1 - 建立petalinux工程

2 - petalinux读取 *.sdk 文件夹硬件信息

3 - 设置SD根文件系统从SD卡载入

3.1 - 使用外部的linux源码进行编译

4 - 配置Linux内核

5 - 编译

6 - 生成BOOT.BIN及image.ub文件

7 - TF卡制作备用

8 - 在板上运行

X - 附录(一些可能碰到的问题)


0 - 前言

手头有块黑金AX7010的板子,这个板子附带的资料里面带有的kernel和uboot(黑金针对自己的开发板修改过的)版本实在太老,全是2017年的版本,在学习按照给的PDF里的流程,利用其提供的kernel和uboot进行编译的时候各种报错。9102年了,如果还要我去想办法去换开发环境兼容老东西来进行学习实在是太头疼了,于是转而使用xilinx官方的petalinux进行zynq7000上的linux环境搭建。

petalinux是xilinx官方推出的一个快速便利的搭建zynq系列fpga片上ps(processing system)端的linux环境搭建的软件,在官网上可以免费的下载安装(https://china.xilinx.com/support/download/index.html/content/xilinx/zh/downloadNav/embedded-design-tools.html)。这篇博文将介绍一下如何使用petalinux进行工程建立(不会介绍如何进行petalinux的安装)。环境的搭建和一些必要的资源如下所示:

  • ubuntu 16.04.4         (安装在vmplayer虚拟机中,petalinux对系统版本有严格要求
  • petalinux 2018.3      (安装在/opt/pkg/petalinux文件夹下)
  • UG1144 - PetaLinux Tools Documentation: Reference Guide (v2018.3)   (参考文档,可以下载下来备用)
  • linux_rtc.sdk               (vivado工程生成比特流文件,并导出硬件【export hardware】生成的*.sdk文件夹,在本文中依此建立后面的petalinux)

安装完petalinux后的磁盘占用

1 - 建立petalinux工程

载入petalinux环境

$ source /opt/pkg/petalinux/settings.sh

建立petalinux工程,命名为lee_linux

$ petalinux-create --type project --template zynq --name lee_petalinux

完毕后,工程目录如下所示

2 - petalinux读取 *.sdk 文件夹硬件信息

进入lee_linux目录,让petalinux读取 *.sdk 文件夹,自动载入硬件信息,这里 *.sdk 文件夹就在上一级目录

$ cd lee_petalinux/
$ petalinux-config --get-hw-description=/home/sements/Desktop/developArea/FPGA/workspace/linux_rtc.sdk

3 - 设置SD根文件系统从SD卡载入

执行上面命令后,会自动打开配置窗口,在 Image Packaging Configuration --> Root filesystem type 选项中选择 SD card,把根文件系统放在 SD 卡中,方向键选择下方保存,然后退出。

注意,这里保存不要修改其默认文件名

3.1 - 使用外部的linux源码进行编译

除了让petalinux自动联网到xilinx的github上下载linux源码,我们也可以指定一个linux源码。但是注意,目前版本的petalinux对于下载的linux源码版本检测十分严格,请在下载时根据petalinx的版本下载对应的linux源码(在xilinx的linux-xlnx的github页面,选择tag,选择你需要的版本。或者使用git)

解压linux源码,普通用户

$ unzip -o linux-xlnx-xlnx_rebase_v4.14_2018.3.zip -d /home/sements/Desktop/developArea/FPGA/xilinx-official/

在petalinux-config中进行配置,选用外部linux源码进行编译,

Linux Components Selection -> linux-kernel选择ext-local-src。

新增的External linux-kernel local source settings选项内填入你的linux源码完整路径

 

4 - 配置Linux内核

执行指令,配置linux内核

$ petalinux-config -c kernel
  • 配置CH340、CP210X串口驱动

- Device Drivers → USB support → USB Serial Converter support按y,回车进入。在CP210x和ch341前面按y。

  • 配置USB摄像头驱动

- 选项 Device Drivers ---> Multimedia support ---> Media USB Adapters ---> 中使能 USB Video Class (UVC)

保存退出

注意,这里保存不要修改默认的 .config 文件名

5 - 编译

$ petalinux-build

 

6 - 生成BOOT.BIN及image.ub文件

$ petalinux-package --boot --fsbl --fpga --u-boot --force

petalinux-package --boot  用于打包生成BOOT.BIN文件

--fsbl  指令指定加入FSBL(First Store Block Load)文件,其默认指定文件路径是 images/linux/zynq_fsbl.elf,这个文件是petalinux执行编译命令后自动生成的

--fpga  指令指定加入FPGA比特流文件(bitstream image),其默认指定文件路径是 images/linux/*.bit , 这个文件是前面vivado编译生成比特流文件并在导出硬件时一同导入到 *.sdk 文件夹中的 *.bit 文件。在petalinux-config --get-hw-description时会从 *.sdk 文件夹中复制到默认路径并重命名为system.bit

--u-boot 指令指定将u-boot文件打包到BOOT.BIN中,其默认指定文件路径是 images/linux/u-boot.elf 这个文件是petalinux执行编译命令后自动生成的

--force  指令指定允许覆盖之前已生成过的BOOT.BIN文件

更多的介绍可以通过 petalinux-package --boot --help查看

执行后我们可以在 images/linux文件夹下看到BOOT.BIN和image.ub文件了。

7 - TF卡制作备用

我的AX7010开发板能插入TF卡,并且在 linux_rtc.sdk的vivado工程中已经将tf卡连接到PS内核。

插入TF卡到开发机,在虚拟机上挂载TF卡

运行gparted工具,将全卡格式化。然后新建一个FAT32格式分区,命名为FAT,大小约1000M即可,用于存放BOOT.BIN及image.ub文件。再在FAT分区后新建EXT4格式分区,命名为EXT,大小占用剩余TF卡上空间,用于存放文件系统。

将BOOT.BIN文件和image.ub文件放到FAT分区中。

将根文件系统放入EXT分区中,这里我使用之前制作好的给IMX6用的ubuntu根文件系统(https://blog.csdn.net/sements/article/details/88086468

卸载TF卡

注意,这里卸载的时候会提示暂时无法弹出TF卡,因为从开发机复制文件到TF卡并没有实际写入TF卡上,而是直接写在磁盘缓存上,在卸载的时候会将这些磁盘缓存真正的写入TF卡上,这很耗时,具体时长取决于你自己放入TF卡的根文件系统大小

8 - 在板上运行

将TF卡插入FPGA开发板,插上调试串口(这里我vivado工程也已经连接好到PS核了),上电即可从tty调试窗口看到linux启动信息

X - 附录(一些可能碰到的问题)

  • petalinux-build时报错 set KERNEL_VERSION_SANITY_SKIP="1" in your recipe.。

这是由于petalinux版本与用户指定编译用的linux版本不匹配造成的(在本博文的流程中不会这样,因为按照的是默认设置,其会从网络上下载合乎版本的linux,这里是我安装petalinux 2018版本,指定用黑金提供的2017版本的linux源码时出现的问题)

解决方法有两种:

第一种,

在工程目录/project-spec/meta-plnx-generated/recipes-kernel/linux/ linux-xlnx_%.bbappend文件内加入KERNEL_VERSION_SANITY_SKIP="1"

参考https://github.com/Xilinx/meta-xilinx/blob/master/meta-xilinx-bsp/recipes-kernel/linux/linux-xlnx-dev.bb

第二种,其实应该是真正的根源解决,第一种方法中的/project-spec/meta-plnx-generated/recipes-kernel/linux/ linux-xlnx_%.bbappend文件是petalinux-build时生成的,其是根据/ project-spec/meta-user/recipes-kernel/linux/ linux-xlnx_%.bbappend文件生成的,所以只要在编译前在/ project-spec/meta-user/recipes-kernel/linux/ linux-xlnx_%.bbappend文件内加入KERNEL_VERSION_SANITY_SKIP="1"即可

  • do_populate_lic: QA Issue: linux-xlnx: The LIC_FILES_CHKSUM does not match

这也是由于petalinux版本与用户使用的linux版本不一致造成的,这里我是从xilinx的官方github下载的linux源码(https://github.com/Xilinx/linux-xlnx),可是我安装的petalinux是2018.3版本的,而我使用git clone直接获取到的源码版本并不是,所以需要对linux源码版本进行切换

git checkout xlnx_rebase_v4.14_2018.3
git pull  https://github.com/Xilinx/linux-xlnx.git xlnx_rebase_v4.14_2018.3

不通过git clone下载也可以,直接在github上先选择版本与你petalinux版本对应的linux branch,然后下载压缩包再到虚拟机中解压即可。

可以参考以下两个回答:https://forums.xilinx.com/t5/Embedded-Linux/Petalinux-build-errors/m-p/956182#M32590

https://forums.xilinx.com/t5/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6%E5%BC%80%E5%8F%91-MPSoC-Zynq-7000/HDMI-FrameBuffer%E5%AE%9E%E4%BE%8B%E8%AE%BE%E8%AE%A1%E6%8A%A5%E9%94%99/m-p/945439?advanced=false&collapse_discussion=true&filter=location&location=category:Chinese&q=LIC_FILES_CHKSUM&search_type=thread

发布了38 篇原创文章 · 获赞 23 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u013662665/article/details/88921275
今日推荐