1. 环境准备:搭建开发基础
在开始RK3568的Qt交叉编译之前,我们需要先准备好开发环境。这个过程就像盖房子前要打地基一样重要,地基打好了,后面的工作才能顺利进行。
首先,我们需要一台运行Ubuntu的宿主机。推荐使用Ubuntu 18.04或20.04 LTS版本,这两个版本在嵌入式开发中经过广泛验证,稳定性有保障。我自己的开发机就是Ubuntu 20.04,用了两年多一直很稳定。
安装好Ubuntu后,我们需要更新系统并安装一些必要的开发工具。打开终端,执行以下命令:
sudo apt update sudo apt upgrade -y sudo apt install -y build-essential git cmake python3 python3-pip这些基础工具安装完成后,我们还需要安装一些特定的依赖库:
sudo apt install -y libncurses5-dev libssl-dev liblz4-tool \ bison flex gawk texinfo chrpath diffstat binfmt-support \ qemu-user-static live-build fakeroot cmake gcc-multilib \ g++-multilib unzip device-tree-compiler这些依赖库中,有些是编译工具链必需的,有些是Qt开发需要的。我建议一次性全部安装好,避免后面因为缺少某个库而中断编译过程。
2. 安装Qt开发环境
2.1 下载Qt安装包
Qt官方提供了多种安装方式,对于RK3568开发,我们需要两个版本的Qt:
- 桌面版Qt:用于在宿主机上开发和调试
- 交叉编译版Qt:用于生成目标板的可执行文件
首先下载桌面版Qt。访问Qt官网下载页面,选择Qt 5.14.2版本。这个版本是经过RK3568验证的稳定版本,建议不要随意更换其他版本。
下载完成后,给安装文件添加执行权限:
chmod +x qt-opensource-linux-x64-5.14.2.run2.2 安装Qt Creator
运行安装程序时有个小技巧:建议先断开网络连接。这是因为Qt安装程序会强制要求登录账号,断网安装可以跳过这一步。
./qt-opensource-linux-x64-5.14.2.run安装过程中,选择"Desktop gcc"组件,这是我们在宿主机上开发需要的。安装完成后,可以在应用菜单中找到Qt Creator。
我第一次安装时没注意,把所有组件都装上了,结果占用了大量磁盘空间。后来发现其实只需要安装必要的组件就够了,这样可以节省不少空间。
3. 配置交叉编译工具链
3.1 获取RK3568工具链
RK3568使用的是ARM Cortex-A55架构,我们需要对应的交叉编译工具链。可以从Linaro官网下载:
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=$PATH:/path/to/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin为了方便,可以把这行命令添加到~/.bashrc文件中,这样每次打开终端都会自动设置好环境变量。
3.2 验证工具链
安装完成后,我们可以验证一下工具链是否正常工作:
aarch64-linux-gnu-gcc --version如果看到类似下面的输出,说明工具链安装成功:
aarch64-linux-gnu-gcc (Linaro GCC 7.5-2019.12) 7.5.0 Copyright (C) 2017 Free Software Foundation, Inc.4. 配置Qt交叉编译环境
4.1 获取RK3568的Qt库
RK3568官方提供了预编译的Qt库,我们需要下载并解压:
wget http://repo.rock-chips.com/rk3568/qt5.14.2-buildroot.tar.gz tar -xzvf qt5.14.2-buildroot.tar.gz解压后会得到一个包含Qt库和工具的目录,我们需要在Qt Creator中配置这些路径。
4.2 配置Qt Creator
打开Qt Creator,按照以下步骤配置:
- 进入"工具"->"选项"->"Kits"
- 添加新的Qt版本,选择解压目录中的qmake
- 添加新的编译器,选择我们之前安装的aarch64-linux-gnu-g++
- 创建新的Kit,将Qt版本和编译器关联起来
配置完成后,我们的开发环境就具备了交叉编译的能力。我建议在配置完成后先编译一个简单的Hello World程序测试一下,确保一切正常。
5. 创建和编译Qt项目
5.1 创建新项目
在Qt Creator中新建一个Qt Widgets Application项目。创建时需要注意:
- 项目名称不要包含中文或特殊字符
- 选择我们之前配置的交叉编译Kit
- 使用默认的构建目录
我通常会创建一个简单的界面,包含一个按钮和一个标签,用来测试基本功能是否正常。
5.2 配置项目文件
在.pro文件中,我们需要添加一些特定的配置:
# 指定目标平台 target.path = /usr/bin INSTALLS += target # 链接特定的库 LIBS += -lQt5Widgets -lQt5Gui -lQt5Core这些配置确保我们的程序能够正确链接到目标板上的Qt库。
5.3 交叉编译项目
点击Qt Creator的"构建"按钮,程序就会开始交叉编译。编译完成后,会在构建目录下生成可执行文件。
我们可以使用file命令查看生成的文件类型:
file demo_app应该看到类似这样的输出:
demo_app: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=..., not stripped这表明我们成功生成了ARM架构的可执行文件。
6. 部署和测试
6.1 传输程序到开发板
有多种方式可以将程序传输到RK3568开发板:
- 使用scp命令:
scp demo_app user@rk3568-ip:/home/user/- 使用U盘拷贝
- 通过NFS共享目录
我个人最喜欢用scp,简单直接。如果开发板还没有开启ssh服务,可以先通过串口登录,然后安装openssh-server:
sudo apt install openssh-server6.2 设置运行环境
在开发板上运行Qt程序前,需要确保Qt库已经正确安装。如果使用官方镜像,通常已经包含了必要的库。如果没有,需要手动安装或拷贝Qt库到开发板。
设置库路径:
export LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu/qt56.3 运行测试
在开发板上运行程序:
./demo_app如果一切正常,应该能看到程序界面显示出来。我在第一次测试时遇到了缺少库的问题,后来发现是因为没有正确设置LD_LIBRARY_PATH。这个经验告诉我,环境变量的设置非常重要。
7. 常见问题解决
在实际开发中,难免会遇到各种问题。这里分享几个我遇到过的典型问题及解决方法:
程序运行时报错找不到库: 检查LD_LIBRARY_PATH是否设置正确,确认开发板上确实存在所需的库文件。
界面显示异常: 可能是主题或字体问题,尝试设置QT_QPA_PLATFORM环境变量:
export QT_QPA_PLATFORM=linuxfb触摸屏不响应: 检查是否加载了正确的触摸驱动,可能需要设置QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS。
程序崩溃无提示: 在开发板上使用gdb调试:
gdb ./demo_app
每次遇到问题都是学习的机会,建议养成记录问题的习惯,这样下次遇到类似情况就能快速解决。