第六章 QT和OPENCV交叉编译开发环境以及QT远程调试

第六章 QT和OPENCV交叉编译开发环境


之前linux启动后的文件系统中只有很少的功能和支持,缺少opencv和qt相关的库,一个方法是下载源码去交叉编译,另一个办法是通过petalinux去配置(本质上还是下载源码和交叉编译)。

根文件系统配置

配置命令

bash 复制代码
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后就得到了一个已经整合好的环境,比较方便。
bash 复制代码
petalinux-build --sdk

在"images/linux"下生成sdk.sh

安装命令:

bash 复制代码
./sdk.sh

安装好后会有一句提示,如何使用SDK环境。

bash 复制代码
source /opt/petalinux/2023.1/environment-setup-cortexa72-cortexa53-xilinx-linux

QTCreator 交叉编译环境设置

交叉编译配置

  1. "Tools->Options"里面Kits进行配置。

  2. 配置qmake。

  3. 配置GCC的C和C++。

  4. 配置gdb。

  5. 新增Kits。

  6. 创建工程的时候选择刚刚配置的Kit就可以使用了。

应用程序测试

直接新建一个工程,进行编译。可以看到编译成功且用的是交叉编译链。

将编译好的文件可以拷贝到板子上运行。

bash 复制代码
export DISPLAY=:0.0
./hello

QT远程调试

上一步编译出了能在板端执行的可执行文件,但是需要手动拷贝到板端。

通过Qt的部署功能(依赖SSH)可以将文件通过网络传输到板端,再加上gdbserver就可以通过Qt进行调试了。

远端设备配置

根据板子IP设置就行。

设置好后可以在Kits进行设备选择。

环境变量设置

如果系统里没有自动设置显示环境变量会运行不成功,在运行环境里可以设置,增加需要设置的环境变量。

命令行参数设置

如果需要命令行参数的话在运行设置里面修改。

实际效果

运行
调试运行

可成功停在断点处和显示相关信息。

问题记录

显示驱动加载失败

现象
bash 复制代码
[    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时钟,其他时钟还没有使用到,这里只添加一个。

更改后可成功加载驱动和输出图像。

bash 复制代码
&psgtr {
    clocks = <&video_clk>;
    clock-names = "ref2";
};

video_clk时钟是27M的参考时钟,和设计中对应。

QT远程上传文件失败

现象(ramdisk文件系统)

显示空间不够,但是是有的,改了上传路径也不行。

现象(SD卡文件系统)

改了SD文件系统时,部署过程是通过的。但是显示没有文件,实际上看也看不到。

排查过程
  1. 测试设备,测试设备也是成功连接的。这里有个报错信息,提示没找到rsync命令,会使用sftp。

  2. 查看部署步骤,路径设置也是正常的。

  3. 增加部署步骤,通过sftp上传文件,测试成功。

解决方法
  • 方案一(未验证)

    文件系统编译时增添rsync支持或者源码交叉编译加到系统里面。

    对于ramdisk可以尝试删掉检查磁盘空间的步骤。

  • 方案二

    部署步骤增添通过sftp上传文件步骤。

Mobaxterm串口敲指令卡顿(未解决)

现象

添加了QT等库后,Mobaxterm敲指令会时不时的卡一下,体验特别差。但是换串口调试助手又没有类似的问题。

相关推荐
DQI-king4 个月前
ZYNQ学习记录FPGA(二)Verilog语言
学习·fpga开发·zynq
辣个蓝人QEX4 个月前
【ZYNQ Linux开发】使用 boot.scr 启动 Linux 报错 Bad Linux ARM64 Image magic! 调试过程记录
linux·运维·fpga开发·zynq·petalinux·zynq mpsoc
萨文 摩尔杰5 个月前
Petalinux
zynq
南山维拉5 个月前
【AXI总线专题】AXI-FULL-Master
fpga开发·zynq·axi-full
矿渣渣5 个月前
ZYNQ处理器在发热后功耗增加的原因分析及解决方案
嵌入式硬件·fpga开发·zynq
南山维拉5 个月前
【AXI总线专题】-AXI-LITE总线解读
xilinx·zynq·axi-lite总线
mrchip5 个月前
ZYNQ PL端向PS端发出中断
zynq
XINVRY-FPGA6 个月前
赛灵思 XC7K325T-2FFG900I FPGA Xilinx Kintex‑7
人工智能·嵌入式硬件·ai·fpga开发·fpga·pcb工艺·zynq
辣个蓝人QEX6 个月前
【ZYNQ MP开发】Linux下使用bootgen命令生成BOOT.bin报错架构不对问题探究
linux·arm开发·xilinx·zynq·mpsoc·bootgen·u-boot移植