当前位置: 首页 > news >正文

飞凌RK3568开发板Qt应用开发入门:从源码编译到‘Hello Qt’上板运行全记录

飞凌RK3568开发板Qt应用开发实战:从零构建到上板部署全流程

在嵌入式Linux开发领域,图形界面应用的需求日益增长。RK3568作为一款高性能处理器,搭配Qt框架能够为工业控制、智能终端等场景提供丰富的交互体验。本文将手把手带你完成从工具链配置到第一个Qt程序在开发板成功运行的全过程。

1. 开发环境准备与交叉编译器配置

1.1 基础开发环境搭建

工欲善其事,必先利其器。在开始Qt开发前,需要准备以下基础环境:

  • 主机系统:推荐使用Ubuntu 18.04/20.04 LTS
  • 磁盘空间:至少预留100GB可用空间
  • 内存配置:建议8GB以上(全编译时16GB更佳)

安装必要的构建工具和依赖库:

sudo apt update sudo apt install -y build-essential git repo python3 libssl-dev \ libncurses5-dev bison flex gawk gcc-multilib g++-multilib \ device-tree-compiler u-boot-tools lzop

1.2 获取交叉编译工具链

针对RK3568的ARM Cortex-A55架构,我们需要aarch64架构的交叉编译器。有两种获取方式:

方法一:独立工具链(适合纯C/C++开发)

wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz export PATH=$PWD/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH

方法二:全源码编译(推荐Qt开发)

# 从飞凌官方获取源码包 cat OK3568-linux-source.tar.bz2.* > OK3568-linux-source.tar.bz2 tar -xvf OK3568-linux-source.tar.bz2 cd OK3568-linux-source ./build.sh

提示:全编译过程耗时较长(约5-8小时),建议在性能较好的机器上执行

2. Qt开发环境配置

2.1 Qt工具链路径设置

全编译完成后,在output目录下会生成完整的工具链。设置Qt编译环境:

export PATH=$PWD/buildroot/output/OK3568/host/bin:$PATH export QT_HOST_PATH=/usr/local/Qt-5.12.9 # 根据实际安装路径调整

2.2 验证qmake可用性

检查Qt交叉编译工具是否正常工作:

qmake -v # 应输出类似:QMake version 3.1 Using Qt version 5.12.9 in /path/to/sysroot

2.3 开发板系统准备

确保开发板系统已正确烧写并配置网络:

adb connect 192.168.x.x # 连接开发板 adb shell mkdir -p /usr/local/qt5/lib adb push libQt5Core.so.5 /usr/local/qt5/lib # 推送必要的Qt库

3. 创建第一个Qt项目

3.1 项目结构设计

创建简单的窗口应用程序:

HelloQt/ ├── main.cpp ├── widget.cpp ├── widget.h └── HelloQt.pro

main.cpp示例

#include <QApplication> #include "widget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }

3.2 交叉编译配置

修改.pro文件添加交叉编译选项:

TARGET = HelloQt QT += widgets TEMPLATE = app # 交叉编译配置 target.path = /usr/local/qt5/bin INSTALLS += target

3.3 编译与部署

执行交叉编译:

qmake && make adb push HelloQt /usr/local/qt5/bin adb shell "export LD_LIBRARY_PATH=/usr/local/qt5/lib && /usr/local/qt5/bin/HelloQt"

4. 高级开发技巧与调试

4.1 常见问题解决

问题现象可能原因解决方案
运行时报找不到库库路径未设置设置LD_LIBRARY_PATH环境变量
界面显示异常显示驱动不匹配检查FB或Wayland后端配置
程序崩溃无输出缺少调试符号编译时添加-g选项

4.2 性能优化建议

  • 使用QML时启用硬件加速:

    import QtQuick 2.12 import QtQuick.Window 2.12 Window { visible: true flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint renderType: Item.NativeRendering // 启用原生渲染 }
  • 减少不必要的动态库加载:

    strip --strip-unneeded HelloQt # 去除调试符号

4.3 远程调试配置

在开发板上启动gdbserver:

adb shell gdbserver :1234 /usr/local/qt5/bin/HelloQt

在主机端连接调试:

aarch64-linux-gnu-gdb HelloQt (gdb) target remote 192.168.x.x:1234

5. 实战案例:摄像头应用开发

5.1 添加多媒体支持

修改.pro文件引入Qt多媒体模块:

QT += multimedia multimediawidgets

5.2 简易摄像头实现

#include <QCamera> #include <QCameraViewfinder> Widget::Widget(QWidget *parent) : QWidget(parent) { QCamera *camera = new QCamera; QCameraViewfinder *viewfinder = new QCameraViewfinder(this); camera->setViewfinder(viewfinder); camera->start(); }

5.3 部署与测试

# 推送多媒体相关库 adb push libQt5Multimedia.so* /usr/local/qt5/lib/ adb push libQt5MultimediaWidgets.so* /usr/local/qt5/lib/ # 设置必要的环境变量 adb shell "export QT_PLUGIN_PATH=/usr/local/qt5/plugins && \ export QML2_IMPORT_PATH=/usr/local/qt5/qml && \ /usr/local/qt5/bin/CameraApp"

在实际项目中,我们发现RK3568的VPU硬件加速能显著提升视频处理性能。通过修改Qt的底层实现,可以充分利用这块处理器的多媒体能力。

http://www.cnnetsun.cn/news/2927712.html

相关文章:

  • pandas多维聚合实战:从groupby到滚动窗口的工程化落地
  • Rust内存模型入门:所有权、借用与生命周期三权分立
  • 别再让Segmentation Fault折磨你:用GDB和Valgrind快速定位C/C++内存访问错误
  • 不只是Resize和Crop:用PyTorch transforms构建一个‘防呆’图像预处理流水线
  • VCSA 6.7证书过期别慌!手把手教你修改系统时间+续订证书(附STS证书修复脚本)
  • 别再让BrokenPipeError打断你的爬虫:requests和aiohttp库中的连接保持与异常处理实战
  • 别再只改后缀了!用Burp Suite实战iwebsec靶场03关,手把手教你Content-Type绕过(附四种MIME类型修改技巧)
  • 避开这些坑!Multisim仿真组合逻辑电路(编码器/译码器/数据选择器)的5个常见错误与调试指南
  • 云原生时代下的后端开发:技术趋势与最佳实践
  • VMvare 安装 Linux CentOS 7
  • Elasticsearch入门核心:倒排索引、文档映射与分片机制详解
  • 手把手教你:在老旧CentOS 7上为llama.cpp量化搞定GCC 9.3(附完整避坑清单)
  • ArcGIS生态学家的救星:手把手解决Linkage Mapper 3.0安装与运行中的20+常见报错
  • Gurobi激活了但Python还是找不到?一个‘python setup.py install’命令的两种正确打开方式
  • 保姆级教程:在全志A133P上为UART3/4/0配置RS485流控(附设备树修改与避坑指南)
  • Anthropic Constitutional AI原理与Claude 3工具调用实践
  • 面试官最爱问的C语言指针和内存问题,嵌入式工程师如何优雅回答?
  • AI研究问题筛选三原则:可解性、必要性与延展性
  • Python 高手编程系列三千零三:多进程
  • 别让GPU闲着!手把手教你用llama.cpp在Ubuntu 22.04上榨干RTX2060的AI算力
  • MPC8379E eLBC控制器:GPCM、FCM、UPM三种模式配置与嵌入式内存接口实战
  • 预训练语言模型不适用的任务:拼写纠错的原理与边界
  • 深入Arduino Wire库:I2C主从通信的底层逻辑与常见坑点排查指南
  • 專業阿拉伯文翻譯公司:跨越語言的信任之橋
  • 避坑指南:Doris中DELETE和DROP PARTITION删数据的正确姿势与性能影响
  • Python 项目架构深度解析:从混乱到清晰
  • 告别VSCode Remote-SSH连接卡死:一个隐藏的JSON设置项如何解决‘插件无限加载’和‘Server启动失败’
  • ML模型服务化实战:从Notebook到高稳定生产环境
  • HumanoidKick足球冠军级人形机器人 全部伺服调控、地形步态、故障防护、集群协同、仿真建模、加密权限类源码、物理参数、算法公式、通讯协议、权限规则均为足球冠军级人形机器人行业通用客观标准内
  • 爬虫实战:从零构建免费代理IP池——稳定采集数千可用代理的核心技术解析