前言
本文档为 Linux 应用开发的指引文档,提供 Linux 应用开发环境、开发流程等说明,以及对平台关键技术及其支持情况进行简要介绍。
本文档介绍了 RK3562 单板机的 Linux 应用开发环境搭建流程,包括交叉编译工具链和 sysroot 的安装配置。同时详细讲解了 GDB 远程调试的使用方法,涵盖调试环境准备、演示程序编译、连接目标机及常用调试命令(list、break、continue、print 等)的操作步骤,帮助开发者快速定位程序问题。

本文档为 Linux 应用开发的指引文档,提供 Linux 应用开发环境、开发流程等说明,以及对平台关键技术及其支持情况进行简要介绍。
当前应用开发支持情况如下表所示。

在完成开发环境搭建后,可参考本文的'Linux 常用开发案例'章节熟悉基本的应用开发流程,然后可参考如下文档进行产品应用开发。
(1)图形界面开发:参考《图形用户界面 (GUI) 开发手册》,其中包含 Qt 和 LVGL 的开发指引;
(2)视频图像处理开发:参考《视频图像处理开发手册》;
(3)Docker 开发:参考《Docker 开发手册》,主要介绍 Docker 安装、构建镜像与下载镜像等;
(4)NPU 开发:参考《NPU 开发手册》;
(5)ROS2 开发:参考《ROS2 开发手册》,主要演示 ROS 系统(版本:ROS2 Humble)使用说明;
(6)Modbus 开发:参考《Modbus 开发手册》,主要介绍 Modbus 协议开发案例;
(7)EtherCAT 主站开发:参考《EtherCAT 开发手册》,主要演示 EtherCAT 主站的伺服电机实时控制。
Windows 开发环境:Windows10、Windows7 64bit

Linux 开发环境:VMware16.2.5、Ubuntu20.04.6 64bit
系统版本:Tronlong-Desktop 20.04、Linux-5.10.209、U-Boot-2017.09
sysroot:rk3562-Tronlong-Desktop-20.04-sysroot-[版本号].tar.gz
应用开发交叉编译工具:gcc-aarch64-linux-gnu_9.4.0.tar.gz
备注:本文基于 2GByte LPDDR4X、16GByte eMMC 配置单板机进行演示。
为便于阅读,下表对文档出现的关键术语进行解释;对于广泛认同释义的术语,在此不做注释。
无特殊说明情况下,本文默认从 eMMC 启动系统,使用 DEBUG 作为调试串口,使用欣瑞达的 XT070YTA23R_A6 LVDS 电阻屏作为显示输出。

图 1
本文主要提供适配应用开发的交叉编译工具链安装方式,包括网络安装、本地安装,请根据实际环境选择其中一种方式进行安装。
(1)通过网络安装
Host# sudo apt update
Host# sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

图 2

图 3
安装完成后,可执行如下命令查看交叉编译工具链版本号。
Host# aarch64-linux-gnu-gcc --version
Host# aarch64-linux-gnu-g++ --version

图 4
可以看到交叉编译工具版本为 9.4.0 及以上版本即为安装成功,同时交叉编译工具链默认安装在"/usr/bin/"目录下。
Host# ls /usr/bin/aarch64-linux-gnu-*

图 5
(2)本地安装
提供的交叉编译链压缩包位于产品资料'4-软件资料\Linux\Tools'目录下,请将其拷贝至上位机 Ubuntu 系统任意路径,执行如下命令进行安装。
Host# tar -zxf gcc-aarch64-linux-gnu_9.4.0.tar.gz
Host# sudo dpkg -i gcc-aarch64-linux-gnu_9.4.0/*.deb

图 6

图 7
安装完成后,可执行如下命令查看具体版本号。
Host# aarch64-linux-gnu-gcc --version
Host# aarch64-linux-gnu-g++ --version

图 8
可以看到交叉编译工具版本号为 9.4.0 及以上版本即为安装成功,同时应用交叉编译工具链默认安装在"/usr/bin/"目录下。
Host# ls /usr/bin/aarch64-linux-gnu-*

图 9
提供的 sysroot 压缩包主要包含应用开发时所需的库(常用开发库、Qt 库等),适用于 Linux 系统应用开发。
请将产品资料'4-软件资料\Linux\LinuxSDK'目录下的 sysroot 压缩包拷贝至上位机 Ubuntu 系统"/home/tronlong/RK3562/"目录。执行如下命令,将其解压,解压完成后会在当前目录下生成一个"sysroot"目录和 environment 文件,"sysroot"目录包含 sysroot 相关文件。
备注:sysroot 压缩包版本以实际情况为准。
Host# tar -zxf rk3562-Tronlong-Desktop-20.04-sysroot-v1.0.tar.gz

图 10

图 11
执行如下命令,设置交叉编译工具链和 sysroot 环境变量。
备注:由于 Linux 应用开发与 Linux 系统开发使用不同的交叉编译工具链,因此执行如下命令完成应用开发环境变量配置后,当前 Terminal 命令行终端将不再适用 U-Boot、内核开发。如需进行 U-Boot、内核开发,请另行打开一个 Terminal 命令行终端。
Host# source /home/tronlong/RK3562/environment
Host# export

图 12

图 13
GDB 为 GNU 推出的经典命令行调试工具,在 Linux 系统下广泛使用。它功能强大,能让开发者单步执行程序、逐过程或逐语句调试,自由跳入或跳出函数,还能按条件设置断点,实时查看变量值,精准定位程序问题。
GDB 支持多种语言,包括汇编、C/C++、D、Fortran、GO、Objective-C、OpenCL 等。此外,它有远程调试模式,在嵌入式系统调试中优势明显。借助 TCP/IP 协议及专有通信协议,可让调试程序的主机与运行程序的目标机跨设备协作,高效完成调试任务。
在 RK3562 工作目录下执行如下命令,创建 gdb-test 目录并安装 GDB 调试工具。
Host# mkdir gdb-test
Host# sudo apt install gdb gdbserver gdb-multiarch -y

图 14
执行如下命令,进入 gdb-test 目录并新建一个 GDB 调试演示程序。
Host# cd gdb-test
Host# vi test.c

图 15
输入以下内容:
#include <stdio.h>
void show() {
printf("show\n");
}
int main(int argc, char *argv[]) {
int arr[4] = {1, 2, 3, 4};
int i = 0;
for (i = 0; i < 4; i++) {
printf("arr[%d]: %d\n", i, arr[i]);
}
show();
return 0;
}

图 16
执行如下命令,进行程序编译,编译完成将会生成 test 可执行程序。
Host# aarch64-linux-gnu-gcc -g test.c -o test
备注:编译时需添加-g 参数,生成的可执行文件才带有调试信息。

图 17
请将单板机与 PC 机连接至同一个路由器,使用 Type-C 线将单板机的 DEBUG 调试串口连接至 PC 机,然后将单板机上电启动。将编译后的 test 可执行文件拷贝至单板机系统任意目录下。
Target# ls

图 18
执行如下命令,查看虚拟机的 IP 地址。
Host# ifconfig

图 19
在单板机系统 test 文件所在路径下,执行如下命令运行 gdbserver 程序,开启监听。
备注:192.168.13.50 为虚拟机的 IP 地址;1234 为连接的端口号(自行设置);test 为将要进行调试的程序。
Target# gdbserver 192.168.13.50:1234 test

图 20
在虚拟机系统 test 文件所在路径下,执行如下命令使用 GDB 调试工具进行调试。
Host# gdb-multiarch test

图 21
执行如下命令,连接单板机。192.168.13.12 为单板机的 IP 地址,请以实际情况为准。
(gdb) target remote 192.168.13.12:1234

图 22
同时,单板机 DEBUG 调试串口打印连接成功的相关信息。

图 23
本章节主要演示 GDB 调试的几个常用命令的使用方法。
用于列出源码,简写:l。

图 24
用于设置断点,简写:b。
分别在 main 函数和第 10 行设置断点。

图 25
用于显示断点的状态,简写:info b。

图 26
用于恢复程序执行,简写:c。此命令使 GDB 恢复程序的执行,直至断点触发或程序结束。

图 27
以上调试过程在第二个断点中,每输入一次 c 命令,将会依次打印 arr[]数组的元素值,然后程序执行结束。同时,单板机 DEBUG 调试串口打印相关信息。

图 28
用于打印变量或者变量地址,简写:p。
设置断点后,可依次打印当前变量 i 的值。

图 29

图 30
以上调试过程在每处断点中,使用 print 命令打印变量 i 的值。同时,单板机 DEBUG 调试串口打印相关信息。

图 31
退出 GDB 模式,简写:q。当程序调试完成后,使用 quit 命令退出 GDB 调试。

图 32
同时,单板机 DEBUG 调试串口打印相关信息。

图 33

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online