Petalinux 构建 Qt 和 OpenCV 交叉编译开发环境

事先声明,该随笔是根据原子 Linux 开发指南实操后记录,省去了大部分不重要的内容,不过还是建议完整的读完所有的内容后,再看省略后的内容,内容上只是crtl+CV的结果,建议看正点原子P15的完整内容。

定制根文件系统 rootfs

前言:这里应该是需要先创建好一个工程,然后在工程里配置根文件系统,建议联网,不联网的话在编译根文件系统的时候需要做一些设置来避免报错。

  设置好环境变量后,在petalinux 工程目录,输入petalinux-config命令配置根文件系统,配置“Image Packaging Configuration ---> Root filesystem type”类型为“EXT4”,将根文件系统放到 SD 卡第二个分区,保存退出。

  输入petalinux-config -c rootfs命令配置根文件系统。

  进行以下操作添加QT,Petalinux Package Groups --->packagegroup-petalinux-qt --->packagegroup-petalinux-qt(Y)和populate_sdk_qt5(Y)

  进行以下操作添加OpenCV,Petalinux Package Groups --->packagegroup-petalinux-opencv --->packagegroup-petalinux-opencv(Y)

  进行以下操作添加Python,Petalinux Package Groups --->packagegroup-petalinux-python-modules --->packagegroup-petalinux-python-modules(Y)

  配置完成后,保存配置并退出。使用petalinux-build -c rootfs命令编译刚才定制的根文件系统,实测编译时间挺长的,需要耐心等待。
  输入petalinux-build --sdk命令构建 SDK,成功构建的 SDK 文件在工程的 images/linux 目录下,名为 sdk.sh,如果是自定义SDK环境的话,直接安装这个sdk.sh就行,我是用的原子的包。

  注:如果不配置根文件系统直接使用原子的sdk.sh(包含Qt和OpenCV)来构建交叉编译开发环境,理论上是可以的,但这里我没有实际操作过。

构建Qt和OpenCV交叉编译开发环境

前言:这里是使用的正点原子构建好的sdk.sh安装包进行的SDK环境安装

  使用正点原子网盘提供的 sdk.sh 文件,需要先将其拷贝到 Ubuntu 系统中,然后执行sdk.sh 进行安装。
  安装路径默认在/opt/petalinux/2020.2 目录下,如果想安装在其他目录下,可以输入相应的路径,这里保持默认,按回车键继续,接下来提示确认路径,按回车键确认。注意:这里运行脚本的时候前面加 sudo。
  安 装 完 成 后 提 示 在 一 个 新 终 端 中 使 用 SDK 前 需 要 先 执 行 ./opt/petalinux/2020.2/environment-setup-aarch64-xilinx-linux以设置相应的环境变量,其中的“.”和 source 具有相同含义。

  在终端输入如下命令:echo '. /opt/petalinux/2020.2/environment-setup-aarch64-xilinx-linux' | tee -a ~/.bashrc,输出结果:. /opt/petalinux/2020.2/ environment-setup-aarch64-xilinx-linux,这样将设置 SDK 环境变量的命令写入到.bashrc 中,当每打开一个终端,都会先运行.bashrc 中的命令,所以我们不需要单独运行设置 SDK 工作环境的命令(. /opt/petalinux/2020.2/environment-setup-aarch64-xilinx-linux)就可以获得 linux 交叉编译工具链。
  或者在终端输入vim ~/.bashrc,打开.bashrc文件,在末尾输入以下内容. /opt/petalinux/2020.2/environment-setup-aarch64-xilinx-linux来达成和上面相同的目的。
  另外两行代码是取消了打开终端时配置petalinux的开发环境并保留输入sptl来手动配置petalinux开发环境的途径。

  当 SDK 环境变量配置完成之后,我们可以在终端输入 aarch,然后按三次 TAB 键查看交叉编译相关的命令,如果配置成功则会显示如下信息,表示环境变量已经配置成功了。
  此时,我们就得到了 linux 交叉编译工具链,可以摆脱 Petalinux,直接使用 linux 交叉编译工具链编译 uboot、linux 内核和 linux 应用。

  sysroots 目录下有三个文件夹,其中 aarch64-xilinx-linux 文件下是我们构建的用于 arm64开发板的根文件系统。在 aarch64-xilinx-linux/usr/lib 目录下有很多库文件,其中就包含了 Qt 和OpenCV 相关的链接库文件。输入ls libQt*命令,查看 Qt 相关链接库文件。

  输入ls libopencv*命令,查看 OpenCV 相关链接库文件。

  使用的时候并不是直接使用交叉编译工具链,而是使用${CC}和${CXX}两个环境变量(可以简写成$CC 和$CXX)

  可以看到$CC 环境变量是带参数的 aarch64-xilinx-linux -gcc 交叉编译工具链的定义,特别是其中的 sysroot 参数,没有该参数,直接使用 aarch64-xilinx-linux -gcc 编译 C 源文件会报错。
  这就是为何不能直接使用 aarch64-xilinx-linux-gcc,而是需要使用$CC 的原因,所以后面需要编译用于开发板上的 C 程序源码文件时,应使用如下方式编译

点击查看代码
$CC c 源码文件
#或者
$CXX c++源码文件

安装QT

前言①:QT的安装是需要账号的,建议先去官网注册好,建议使用梯子,不然不太好进去。
前言②:QT的安装包来自于原子百度网盘里的安装包。

  下载完成后,将安装包放到共享文件夹中,然后运行sudo ./ qt-opensource-linux-x64-5.14.2.run命令开始安装,后面没有什么特别说明的,一直点击next,同意协议,安装路径默认,登录账号,组件选择这三个,最后一直确认就行。

配置QT

  点击 QT Creator 菜单栏的工具(Tools)菜单,在弹出的菜单中点击选项(Options)…以打开选项配置界面。

  点击左侧分类栏中Kits,然后在右侧点击编译器选项,点击添加按钮,在下拉选项中选择GCC,然后再选择 GCC 子项中C,点击之后,在出现的属性栏中,修改编译器名称为 zynqmp_GCC,然后点击浏览,设置编译器路径为/opt/petalinux/2020.2/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-gcc

  同样的方法添加 G++编译器。再次点击添加,在下拉选项中选择GCC,然后选择GCC子项中C++,点击之后,在出现的属性栏中,修改编译器名称为 zynqmp_G++,然后点击浏览,设置编译器路径为/opt/etalinux/2020.2/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-g++

  将配置选项切换到Debuggers标签页,然后点击Add,弹出配置列表后,将调试工具名称修改为zynqMP_Debugger,然后点击浏览,添加调试工具路径,为/opt/petalinux/2020.2/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-gdb

  切换到Qt Versions标签页,点击右边添加(Add)…按钮添加一个 qmake 工具,工具路径为/opt/petalinux/2020.2/sysroots/x86-64-petalinux-linux/usr/bin/qmake版本名称栏的Qt %{Qt:Version}(系统)可以自由修改,配置完成后点击Apply

  切换到构建套件(Kit)标签页,按照下图修改即可。