OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 591|回复: 0

《DFZU2EG_4EV MPSoC开发板之嵌入式Linux 驱动开发指南》 第十章 Petalinux构建Qt和OpenCV交叉编译开发环境(下)

[复制链接]

1070

主题

1081

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4443
金钱
4443
注册时间
2019-5-8
在线时间
1199 小时
发表于 2024-2-4 16:14:50 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2024-2-2 17:32 编辑

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

1)实验平台:正点原子 DFZU2EG_4EV MPSoC开发板

2) 章节摘自【正点原子】DFZU2EG_4EV MPSoC开发板之嵌入式Linux 驱动开发指南 V1.0

3)购买链接:https://detail.tmall.com/item.htm?id=692450874670

4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz-MPSOC.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)Linux技术交流QQ群:887820935

155537c2odj87vz1z9vj6l.jpg

155537nfqovl2gg9faaol9.png

1.4 SDK中的Qt和OpenCV库
安装完成之后,我们进入到安装目录/opt/petalinux/2019.2下,该目录下有一些文件和文件夹,如下所示:                              
image001.png
图 10.4.1 SDK安装目录下的文件
该目录下有一个环境变量配置文件environment-setup-aarch64-xilinx-linux,每次使用之前都需要使用source来运行这个配置文件,例如:
  1. source environment-setup-aarch64-xilinx-linux
复制代码
当SDK环境变量配置完成之后,我们可以在终端输入aarch,然后连按三次TAB键查看交叉编译相关的命令,如果配置成功则会显示如下信息,表示环境变量已经配置成功了:
image003.png
图10.4.2 查看交叉编译工具集
此时,我们就得到了linux交叉编译工具链,可以摆脱Petalinux,直接使用linux交叉编译工具链编译uboot、linux内核和linux应用。
文件夹sysroots/aarch64-xilinx-linux下存放的是我们本章构建的根文件系统,如下图所示:
image005.png
图 10.4.3 根文件系统
该根文件系统可直接用于我们的开发板。
在sysroots/aarch64-xilinx-linux/usr/lib目录下有很多的库文件,其中就包含了Qt相关的链接库以及OpenCV相关的链接库文件,如下所示:
image007.png
图 10.4.4 Qt 链接库文件
image009.png
图 10.4.5 OpenCV 链接库文件

1.5 设置SDK的工作环境
在正式使用SDK之前,需要先设置SDK的工作环境,在终端输入如下命令即可:
  1. . /opt/petalinux/2019.2/environment-setup-aarch64-xilinx-linux
复制代码
执行结果如下图所示:  
image011.png
图 10.5.1 设置SDK工作环境
设置完SDK的工作环境后,就可以获得linux交叉编译工具链,如图 10.4.2所示。不过使用的时候并不是直接使用交叉编译工具链,而是使用${CC}和${LD}两个环境变量(可以简写成$CC和$LD),如下图所示:
image013.png
图 10.5.2 CC和LD的环境变量定义
可以看到$CC环境变量是带参数的aarch64-xilinx-linux-gcc交叉编译工具链的定义,特别是其中的sysroot参数,没有该参数,直接使用aarch64-xilinx-linux-gcc编译C源文件会报错。这就是为何不能直接使用aarch64-xilinx-linux-gcc,而是需要使用$CC的原因,所以后面需要编译用于开发板上的C程序源码文件时,应使用如下方式编译:
  1. $CC  c源码文件
  2. #或者
  3. $CXX  c++源码文件
复制代码
$CXX环境变量是带参数的aarch64-xilinx-linux-g++交叉编译工具链的定义,可直接用于编译C++程序源码文件。
调试工具为aarch64-xilinx-linux-gdb,对应的环境变量为$GDB,这些交叉编译工具的路径可以通过whereis命令查看,如输入“whereis aarch64-xilinx-linux-gdb”,可查看aarch64-xilinx-linux-gdb的路径,如下图所示:
image015.png
图 10.5.3 查看交叉编译工具路径
注:每打开一个新的终端,需要重新设置SDK工作环境。当前终端中的设置只在当前终端有效。

1.6 配置Qt Creator
要想用QT Creator开发用于开发板的Qt demo需要配置QT Creator。在Ubuntu系统中打开QTCreator(如果没有安装QTCreator,请阅读本章扩展阅读部分的“安装Qt”)
image017.png
图 10.6.1 QT Creator
打开QT Creator后,QT Creator界面如下图所示:
image018.png
图 10.6.2 QT Creator界面
现在开始配置QT Creator。如图 10.6.3所示,点击QT Creator菜单栏的“工具(Tools)”菜单,在弹出的菜单中点击“选项(Options)…”以打开配置选项界面。
image020.png
图 10.6.3 打开配置选项
打开的配置选项界面如下图所示:
image022.png
图 10.6.4 选项界面
1、 配置编译器(Compilers)
配置编译器也就是配置linux交叉编译工具aarch64-xilinx-linux-gcc和aarch64-xilinx-linux-g++。
点击左侧栏中的“Kits”,然后点击右侧的“编译器”配置项,可以看到Qt Creator自动检测到系统中的C和C++编译器(Auto-detected选项下),如下图所示:
image024.png
图 10.6.5 Compilers 配置项
这个页面用于配置Qt Creator编译代码时所使用的编译工具。
从“Auto-detected”列举出来的编译工具信息可以知道GCC的路径都是在Ubuntu系统的/usr/bin目录中,且都是用于64位的x86架构的CPU,用这些编译工具编译出来的代码只能在Ubuntu虚拟机上运行。
上图中“Manual”选项下的编译工具需要手动添加,点击右边的添加,在下拉的菜单栏中依次选择GCC->C,如下图所示:
image026.png
图 10.6.6 手动添加编译工具
点击之后,在出现的属性栏中,修改编译器名称为zynqmp_GCC,编译器路径点击浏览,选择“/opt/petalinux/2019.2/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-gcc”,如下图所示。完成后同样的方法添加C++编译器,编译器名称修改为zynqmp_G++,路径为“/opt/petalinux/2019.2/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-g++”。
image028.png
图 10.6.7修改编译器名称和路径
从“Manual”选项下添加的编译工具信息可以知道“Manual”栏下的GCC都是用于64位的arm。我们展开“Manual”,可以看到更完整的信息,如下图所示:
image030.png
图 10.6.8交叉编译工具

image032.png
图 10.6.9交叉编译工具
从GCC的路径信息可以知道,安装路径来自/opt/petalinux/2019.2/,也就是SDK安装路径是我们本章构建的linux交叉编译工具aarch64-xilinx-linux-gcc和aarch64-xilinx-linux-g++。
2、 配置 Debuggers
配置Debuggers,也就是配置调试工具aarch64-xilinx-linux-gdb。
点击右边的Debuggers选项卡切换到该页面,如下所示:
image034.png
图 10.6.10 配置 Debuggers
该配置项用于配置Qt程序的调试工具,具体的调试方法笔者也未曾使用过,所以调试方法这里就不给大家介绍了。点击右边菜单Add添加新的debugger,如下所示:
image036.png
图 10.6.11 配置gdb交叉编译工具
在“Name”栏设置调试工具的名字,例如“zynqMP_gdb”,在“path”栏选择调试工具的路径,也就是配置aarch64-xilinx-linux-gdb工具的路径。配置SDK的工作环境后,可以通过whereis命令得到,路径为sdk安装目录/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-gdb ,例如笔者的sdk安装目录为/opt/petalinux/2019.2,所以路径为/opt/petalinux/2019.2/sysroots/x86_64-petalinux-linux/usr/bin/aarch64-xilinx-linux/aarch64-xilinx-linux-gdb。
配置完成之后点击“Apply”应用按钮。
3、配置 Qt Versions
点击左边的Qt Versions选项卡切换到该页面,如下所示:
image038.png
图 10.6.12 Qt Versions 配置界面
该配置界面用于配置qmake工具的路径,这里简单地介绍一下Qt程序的编译过程,大致可以分为以下三个步骤:
1. 使用qmake-project生成与平台无关的pro文件;
2. 利用pro文件生成与平台相关的 Makefile 文件。Makefile 文件关系到整个工程的编译规则,一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,文件之间的依赖关系,甚至于进行更复杂的功能。而在Qt Creator 中,使用qmake工具自动生成Makefile 文件。
3. 使用make命令完成自动编译,make就是通过解析Makefile文件的内容来执行编译工作的,会为每个源文件生成一个对应的.o文件,最后将目标文件链接生成最终的可执行文件。
点击右边“添加(Add)…”按钮添加一个qmake工具,配置其名字以及路径等信息。当我们点击Add按钮的时候就会弹出qmake路径配置对话框,使用到的qmake工具路径为sdk安装目录/sysroots/x86_64-petalinux-linux/usr/bin/qmake,如下所示:
image040.png
图 10.6.13 配置qmake
“Name”栏的“Qt%{Qt:Version}(System)”可以改为其他名字,也可以不改,此处笔者改为“Qt %{Qt:Version}(zynqMP)”,方便辨认。
从上图可以看到,Petalinux使用的Qt版本为5.11.3。
配置完成点击“Apply”应用按钮。
4、配置Kits
点击上边的 Kits 选项卡切换到该页面,如下所示:
image042.png
图 10.6.14Kits 配置界面
点击右边“添加(Add)”按钮添加一个Kit。Kit其实就是对前面的各个配置项进行打包,变成一个Kit套件,而当我们使用QtCreator创建Qt工程的时候会选择一个Kit套件,并基于它创建我们的工程。上图中的“Auto-detected”列表下已经存在一个配置好的Kit套件Desktop Qt 5.14.2 GCC 64bit,从名字可以知道,该Kit适用于创建在Ubuntu桌面系统上运行的Qt程序,所以不能用于创建一个能够在ZYNQ MPSoC开发板上运行的Qt程序,所以这里需要添加一个新的Kit。
点击右边“添加(Add)”按钮添加新的Kit,如下图所示:
image044.png
图 10.6.15 配置zynqMP Kit套件
在第一栏的Name栏为Kit套件命名,例如zynqMP。
Device type:选择设备的类型,这里有四个选择项,分别为Desktop(PC机)、Android Device(安卓设备)、Generic Linux Device(通用Linux设备)和 QNXDevice(QNX设备);对于ZYNQ MPSoC来说,选择Generic Linux Device。
Sysroot:系统镜像的根目录,为SDK安装路径下的sysroots/aarch64-xilinx-linux文件夹。
Compiler C:选择SDK安装路径下的linux交叉编译工具aarch64-xilinx-linux-gcc。
Compiler C++:选择SDK安装路径下的linux交叉编译工具aarch64-xilinx-linux-g++。
Debugger选择zynqMP_gdb,
Qt version选择 Qt 5.11.3(zynqMP)
配置完成之后点击“Apply”应用,可以看到上边zynqMP名字前面有一个黄色感叹号,这是一个警告信息,原因在于我们配置了Devicetype,而没有配置 Device,这个后面有用到的时候再跟大家讲。
点击“OK”按钮配置完成退出界面,至此我们的Qt Creator就配置完成了。下一节我们将对前面所做的配置工作进行测试。
1.7 搭建Qt测试工程
点击Qt Creator的菜单栏File -> New File or Project(或者直接使用快捷键 Ctrl + N)打开工程创建面板,如下所示:
image046.png
图 10.7.1 工程创建面板
左边选择工程类型,这里我们选择的是一个Application(Qt)应用程序,右边选择工程模板,这里我们选择Qt Widgets Application,点击“Choose...”按钮进入下一步。
设置qt工程名和路径,如下图所示:
image048.png
图 10.7.2 设置qt工程名和路径
在Name栏中设置qt工程名为“qt_test”,工程路径任意,此处选择/home/shang/workspace/qt,路径必须要存在,不然会报错。
设置完成之后点击“下一步(Next)”按钮进入下一步,如下图所示:
image050.png
图 10.7.3 选择构建工具
“Build system”默认为qmake,此处保持默认即可。点击“Next”按钮进入下一步,如下图所示:
image052.png
图 10.7.4 配置工程的类
保持默认配置,直接点击“Next”按钮进入下一步,如下图所示:
image054.png
图 10.7.5 选择语言
同样保持默认配置,直接点击“Next”按钮进入下一步,如下图所示:
image056.png
图 10.7.6选择 Kit
前面介绍过,在创建Qt应用程序的时候需要选择Kit,并基于该Kit创建我们的工程。由于本小节是测试之前配置的QT Creator能否正常工作,所以这里选择“zynqMP”。点击“下一步(Next)”按钮进入下一步,如下图所示:
image058.png
图 10.7.7 配置总结
直接点击“完成”按钮完成工程创建。工程创建完成之后,如下所示:
image060.png
图 10.7.8 工程界面
此时双击左边文件列表Forms中的mainwindow.ui文件,打开 QtCreator 的图形化编程界面,如下所示:
image062.png
图 10.7.9 Qt Design 图形化编程界面
这是Qt Creator中集成的Qt Design图形化编程工具,左边栏显示了Qt所支持的控件,中间显示GUI控件编程、布局界面,而右边界面显示了Qt控件所支持的各种属性,可以对其进行修改。
图10.7.10中笔者随便拖入几个控件,包括一个日历控件Calendar Widget、一个按钮控件Push Button 以及一个Label控件,并对它们进行了简单地布局、调整、修改了Label控件的显示的文字内容和大小(选中Label控件,可以在右下角列出的属性表中找到对应的设置项),如下图所示:
image064.png
图10.7.10 搭建qt界面
Qt工程编程完成后使用Ctrl+S快捷键进行保存,然后点击左下角的小锤子按钮编译工程,如下所示:
image066.png
图 10.7.11 编译工程
编译过程中可以点击下方的“编译输出(Compile Output)”按钮查看编译输出信息,如下所示:
image068.png
图 10.7.12 编译输出信息
从打印信息可以知道,当编译Qt程序的时候编译器会链接到相关的库文件,例如libQt5Widgets.so、libQt5Gui.so、libQt5Core.so等,没有任何的错误打印信息,但是有一个警告信息,编译成功。
警告信息不影响程序的运行。如果想解决警告信息,可以点击上图中2处的/opt/petalinux/2020.2/sysroots/aarch64-xilinx-linux/usr/include/features.h,点击后Qt Creator会自动打开该文件,可以看到警告信息是该文件的第382行输出的,解决的方法也很简单,在该文件的第380行下添加“# define  __OPTIMIZE__ 1”,如下图所示:
image070.png
图 10.7.13 解决警告
添加完成后保存该文件。
现在编译工程就不会出现警告信息了。由于之前已经编译过了,需要改动工程,才能重新编译,可以稍微改动图 10.7.10 的qt界面,然后重新编译。
编译成功之后不能直接点击Qt Creator右下角的绿色小三角按钮运行 Qt 程序,因为这个程序不能在Ubuntu系统下运行,我们需要将编译生成的可执行文件拷贝到开发板根文件系统目录中,然后在ZYNQ MPSoC开发板系统下运行。
打开Ubuntu终端,进入到Qt工程所在目录,如下:
image072.png
图 10.7.14 Qt 工程所在目录
qt_test就是笔者创建的工程,build-qt_test-zynqMP-Debug目录下存放的就是工程编译过程中所生成的文件,包括最终的可执行文件都在这个目录下,进入到该目录,如下图所示:
image073.png
图 10.7.15 编译生成的文件
其中qt_test是最终的可执行文件,可以使用file命令查看该文件的属性,如下图所示:
image075.png
图 10.7.16文件属性查看
由此可以知道该文件是一个ELF格式的可执行文件,可以运行在64位ARM架构的Linux 系统下,所以我们需要把该文件放置到开发板上运行。

1.8 上板测试
按照9.5节制作BOOT.BIN启动文件并复制到SD卡,然后按照9.6节拷贝根文件系统到SD卡的ext4分区。需要注意的是在拷贝本章的根文件系统到SD卡的ext4分区之前,要先删除SD的ext4分区的内容,否则可能会出问题,删除命令要加sudo,如
  1. sudo rm -rf/media/cx/rootfs/*
复制代码
拷贝本章的根文件系统到SD卡的ext4分区完成后,将上一节编译得到的qt_test复制到SD卡ext4分区的home/root目录中。
启动开发板后进入linux系统。设置Qt运行环境变量,(如果没有配置X11,环境变量使用export QT_QPA_PLATFORM=linuxfb)
  1. exportDISPLAY=:0.0
复制代码
运行qt_test程序,如下图所示:
image077.png
与开发板miniDP接口连接的显示器显示的内容如下图所示:
image079.png
图 10.8.1 显示的qt界面
Qt界面是在上一章搭建的Matchbox桌面上显示的。在串口终端按Ctrl + C快捷键可结束程序运行。

1.9 扩展阅读:
1.9.1 安装Qt
为了防止有些读者没有找到好的Qt安装教程,此处推荐B站用户“他是个小白”的一个qt安装的视频:
注:不要安装Qt6版本,因为Qt6不支持Ubuntu18版本。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 12:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表