1. 为什么你需要这篇RV1109/RV1126 QT交叉编译指南?
如果你正在玩Rockchip RV1109或RV1126这块板子,想在上面跑一个自己写的QT图形界面程序,那你大概率已经搜过一圈教程了。网上的资料要么太老,要么语焉不详,或者就是直接丢给你一堆命令,中间哪个环节出错了,你根本不知道从哪查起。我当初接手一个RV1126上的可视化项目时,也是这么过来的,在环境搭建和编译上踩的坑,比写业务逻辑代码花的时间还多。
所以,这篇内容不是官方文档的复读机,而是我实打实从Windows环境折腾到Linux,从Buildroot集成摸索到独立交叉编译工具链,最后成功把QT应用跑在开发板上的完整复盘。我会把两种主流方法——Buildroot集成编译和独立交叉编译工具链编译——的优缺点、适用场景、详细步骤以及我踩过的每一个坑,都掰开揉碎了讲给你听。
简单来说,Buildroot集成法适合“部署”。如果你的应用逻辑相对稳定,主要目标是快速把QT程序打包进整个系统镜像里烧录,那这个方法流程简单,一键生成。而独立交叉编译工具链法适合“开发”。你需要频繁修改QT代码、调试,或者项目依赖复杂的第三方库(比如OpenSSL、SQLite),这个方法虽然前期配置繁琐,但一旦配好,后续的开发编译就像在PC上一样顺畅。
无论你是嵌入式新手,还是有一定经验但被交叉编译搞得头大的开发者,跟着这篇指南,你都能找到一条清晰的路径,把“在开发板上运行QT程序”这个目标,从“可能”变成“可以”。
2. 战前准备:理清思路与备好弹药
在动手之前,我们得先统一认识,避免走到岔路上去。RV1109/RV1126是Arm Cortex-A7/A5架构的芯片,而我们常用的开发电脑(x86_64)和它指令集不同。这就意味着,我们不能直接在电脑上编译出能在板子上运行的程序,必须通过一个“翻译官”——也就是交叉编译工具链。
核心思路就两条路:
- 路线A(Buildroot集成):利用官方或社区提供的SDK,这个SDK里已经包含了针对你板子配置好的Buildroot构建系统。你只需要把自己的QT项目“注册”到这个构建系统里,它就会在编译整个根文件系统时,顺带用正确的工具链把你的QT程序编译好,并打包进去。
- 路线B(独立工具链):我们不依赖完整的SDK构建系统,而是单独准备好针对目标板子的交叉编译器(gcc)、QT库以及项目可能需要的第三方库(如OpenSSL)。然后,在开发电脑上,用这套独立的工具链来编译你的QT项目。
你需要准备好的“弹药”如下:
- 硬件:RV1109或RV1126开发板、电源、串口调试工具、网线。
- 软件基础:
- Windows平台:用于QT应用开发的QT Creator。这是最友好的GUI开发环境。
- Linux环境:这是编译的大本营。强烈推荐使用WSL2(Windows Subsystem for Linux),我全程就是在WSL2(Ubuntu 20.04)下完成的。它完美兼顾了Windows下开发的便利和Linux下编译的纯粹,文件互通也极其方便。当然,纯物理机或虚拟机Linux也可以。
- 关键文件:
- 正确的SDK:这是路线A的基石,也是路线B的重要参考。务必从你的开发板供应商(如Firefly)官网获取完全对应你板型的SDK。不同板子(即使同是RV1126)的配置文件可能有细微差别,用错了会导致各种灵异问题。
- 交叉编译工具链:路线B的核心。可以从SDK的
prebuilts/gcc/linux-x86/arm/目录下找(通常是gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf这类),或者从Linaro官网下载。注意架构,RV11xx系列是armhf(硬浮点),别下成了aarch64的。 - QT源码:路线B需要。去QT官网存档下载QT 5.9.x或5.12.x等长期支持版本。我用的5.9.4,比较稳定。
- 第三方库源码:如OpenSSL、SQLite。如果你的QT程序需要网络加密或数据库功能,就需要它们。
把上述东西都找到并放好,我们接下来就分两条线,详细开干。
3. 方法一:使用Buildroot集成编译(适合快速部署)
这个方法的核心思想是“借力打力”。SDK里的Buildroot已经定义好了整个Linux系统的编译框架,包括内核、驱动、根文件系统、各种软件包。我们要做的,就是把自己的QT项目,变成Buildroot认知里的一个“软件包”。
3.1 创建你的项目“配方”
首先,进入SDK目录。假设你的SDK解压后路径是 /home/yourname/rv1126_sdk。
-
在Buildroot包目录创建项目定义: 进入
buildroot/package/rockchip/目录。这里存放着所有额外的软件包定义。我们新建一个文件夹,名字就用你的QT项目名,比如MyQtApp。cd /home/yourname/rv1126_sdk/build


89

被折叠的 条评论
为什么被折叠?



