在Rockchip RV1126上跑通第一个QT程序:从Windows开发到板子运行的保姆级避坑记录

第一次在嵌入式平台上部署QT应用,就像在迷宫里摸索前行——每个转角都可能遇到意想不到的障碍。作为刚接触RV1126的开发者,我花了整整两周时间才让第一个QT界面在开发板上亮起来。本文将分享这段充满挫折与突破的实战历程,特别聚焦那些官方文档从未提及的"坑"与解决方案。

1. 开发环境搭建:从Windows到RV1126的桥梁

嵌入式开发最令人头疼的莫过于环境配置。我的工作流采用Windows主机+WSL2子系统作为开发环境,通过交叉编译生成RV1126可执行文件。这种组合既能利用Windows下QT Creator的友好界面,又能获得Linux环境的编译便利。

必备工具清单:

  • QT Creator 5.9.4(与RV1126 SDK版本匹配)
  • WSL2 Ubuntu 20.04 LTS
  • Rockchip RV1126 SDK(2022年3月后版本)
  • 交叉编译工具链(gcc-linaro-6.5.0)

安装过程中最关键的三个检查点:

  1. QT版本一致性 :开发环境QT版本必须与最终部署的库版本严格匹配。我曾因使用QT5.12开发而遭遇二进制不兼容问题。
  2. WSL磁盘权限 :将项目放在WSL的 /home 目录而非Windows挂载点,避免文件权限问题。
  3. SDK完整性验证 :运行 sdk-verify 脚本检查SDK是否完整,缺失文件会导致后续编译失败。

提示:RV1126的QT环境需要特别配置framebuffer驱动,提前在SDK中确认 linuxfb 插件是否可用

2. 两种编译路径的抉择与实战

RV1126上部署QT应用主要有两种方式,各有适用场景:

方法 优点 缺点 适用场景
Buildroot集成编译 一键自动化 调试周期长 最终产品发布
独立交叉编译 快速迭代 配置复杂 开发调试阶段

2.1 Buildroot集成方案详解

在SDK的 buildroot/package/rockchip/ 目录下创建项目包时, .mk 文件的配置尤为关键。以下是经过验证的模板:

TEXTEDITOR_VERSION = 1.0
TEXTEDITOR_SITE = $(TOPDIR)/../app/TextEditor
TEXTEDITOR_SITE_METHOD = local

define TEXTEDITOR_CONFIGURE_CMDS
    cd $(@D); $(TARGET_MAKE_ENV) \
    /absolute/path/to/qmake
endef

常见问题排查:

  • qmake路径错误 :使用绝对路径而非 $(HOST_DIR) 变量
  • 资源文件缺失 :确保 .pro 文件中 RESOURCES 项包含所有 .qrc 文件
  • 权限问题 :在 INSTALL_TARGET_CMDS 中添加执行权限设置

2.2 独立交叉编译全流程

交叉编译需要依次处理三个关键依赖:

  1. OpenSSL编译要点
./Configure linux-armv4 no-asm shared --prefix=/opt/openssl-arm
make CC=arm-linux-gnueabihf-gcc -j$(nproc)

必须修改Makefile中62行处的工具链路径,否则会导致QT编译时出现静默失败。

  1. SQLite配置技巧
./configure --host=arm-linux-gnueabihf \
    CC=arm-linux-gnueabihf-gcc \
    --prefix=/opt/sqlite-arm
  1. QT定制编译 : 创建 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 时,需要特别注意:
QMAKE_INCDIR += /opt/openssl-arm/include
QMAKE_LIBDIR += /opt/openssl-arm/lib
QT_QPA_DEFAULT_PLATFORM = linuxfb

3. 部署实战:那些开发板上的"幽灵问题"

将编译好的可执行文件通过 adb push 传输到开发板后,真正的挑战才开始。以下是典型问题及解决方案:

问题1:黑屏无输出

export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_FB_DRM=1

需要确认 /dev/fb0 设备存在,否则可能是内核配置问题。

问题2:字体显示异常 将Windows字体转换为嵌入式格式:

mkdir -p /usr/lib/fonts
cp *.ttf /usr/lib/fonts
export QT_QPA_FONTDIR=/usr/lib/fonts

问题3:触摸屏无响应 检查输入设备节点:

export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event1:rotate=0

可通过 evtest 工具验证哪个 event 节点对应触摸屏。

4. 效率提升:我的开发流水线优化

经过多次踩坑后,我总结出一套高效工作流:

  1. 自动化编译脚本
#!/bin/bash
qmake && make || exit 1
adb push TextEditor /tmp
adb shell "chmod +x /tmp/TextEditor && /tmp/TextEditor"
  1. 快速调试技巧
  • .pro 中添加:
DEFINES += QT_NO_DEBUG_OUTPUT
CONFIG += console
  • 通过 adb logcat 查看QT日志
  1. 资源管理方案
  • 将图片资源编译进QRC文件
  • 使用 rcc 工具生成二进制资源包
  • 动态加载路径设置为 :/ 前缀

嵌入式QT开发就像在钢丝上跳舞——需要精确平衡功能与资源消耗。通过本文的实战经验,希望能帮你避开我踩过的那些坑,快速实现从Windows开发到RV1126部署的完整闭环。当第一个QT界面终于在开发板上亮起时,所有的挫折都化为了宝贵的经验。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐