第六章 QT和OPENCV交叉编译开发环境以及QT远程调试
第六章 QT和OPENCV交叉编译开发环境
之前linux启动后的文件系统中只有很少的功能和支持,缺少opencv和qt相关的库,一个方法是下载源码去交叉编译,另一个办法是通过petalinux去配置(本质上还是下载源码和交叉编译)。
根文件系统配置
配置命令
petalinux-config -c rootfs
选择相关的包
这里只写包名,在配置界面可以按"/"查找,查找后按数字键进入到对应的项目。
配置 | 说明 |
---|---|
gdb | 调试应用程序 |
gdbserver | 网络远程调试应用程序 |
packagegroup-petalinux-matchbox | 简易的Linux桌面管理系统 |
packagegroup-petalinux-opencv | opencv 库 |
packagegroup-petalinux-qt | qt 库 |
packagegroup-petalinux-v4lutils | v4l 工具,视频配置小工具 |
packagegroup-petalinux-x11 | x11 库 |
libmali-xlnx | GPU 库 |
生成SDK和安装
- 为什么要生成SDK?
虽然前面选择了相关的包,比如opencv和qt,这些包的环境已经编译到了文件系统中,但在电脑上编译的话也需要相关的头文件和库文件,生成SDK后就得到了一个已经整合好的环境,比较方便。
petalinux-build --sdk
在"images/linux"下生成sdk.sh。
安装命令:
./sdk.sh
安装好后会有一句提示,如何使用SDK环境。
source /opt/petalinux/2023.1/environment-setup-cortexa72-cortexa53-xilinx-linux
QTCreator 交叉编译环境设置
交叉编译配置
-
“Tools->Options”里面Kits进行配置。
-
配置qmake。
-
配置GCC的C和C++。
-
配置gdb。
-
新增Kits。
-
创建工程的时候选择刚刚配置的Kit就可以使用了。
应用程序测试
直接新建一个工程,进行编译。可以看到编译成功且用的是交叉编译链。
将编译好的文件可以拷贝到板子上运行。
export DISPLAY=:0.0
./hello
QT远程调试
上一步编译出了能在板端执行的可执行文件,但是需要手动拷贝到板端。
通过Qt的部署功能(依赖SSH)可以将文件通过网络传输到板端,再加上gdbserver就可以通过Qt进行调试了。
远端设备配置
根据板子IP设置就行。
设置好后可以在Kits进行设备选择。
如果需要命令行参数的话在运行设置里面修改。
问题记录
显示驱动加载失败
现象
[ 9.982154] xilinx-psgtr fd400000.phy: Invalid reference clock number 2
[ 9.988766] zynqmp-display fd4a0000.display: failed to get PHY lane 0
[ 9.995242] zynqmp-display: probe of fd4a0000.display failed with error -22
排查过程
错误位于linux-xlnx-xilinx-v2023.1\drivers\phy\xilinx\phy-zynqmp.c
打印显示的错误是时钟2,实际上有4个,没超出数组大小,说明时钟2为空。
查看初始化的地方,是在找类似的字段初始化"ref0"。
查看设备树,并没有类似的字段,但确实是使用的ref2参考时钟。
解决方法
在system-user.dtsi手动增加ref2时钟。因为整个设备树只用了这一个ref2时钟,其他时钟还没有使用到,这里只添加一个。
更改后可成功加载驱动和输出图像。
&psgtr {clocks = <&video_clk>;clock-names = "ref2";
};
video_clk时钟是27M的参考时钟,和设计中对应。
QT远程上传文件失败(未解决)
现象
显示空间不够,但是是有的,改了上传路径也不行。
Mobaxterm串口敲指令卡顿(未解决)
现象
添加了QT等库后,Mobaxterm敲指令会时不时的卡一下,体验特别差。