陈工-创龙科技 发表于 2026-2-24 14:29:06

RK3562 单板机 Linux 应用开发实战手册:LED/CAN/TCP/UART 案例与 Python 开发(一)

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

https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHZmAVunqAAAYv30-410946.png
在完成开发环境搭建后,可参考本文的“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
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHaGAErlnAABBKbI5b08097.pngLinux开发环境: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电阻屏作为显示输出。
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHbiAXPQgAAthB9zoGQQ118.png
图1
1开发环境搭建说明1.1安装应用开发交叉编译工具链本文主要提供适配应用开发的交叉编译工具链安装方式,包括网络安装、本地安装,请根据实际环境选择其中一种方式进行安装。
(1)通过网络安装
Host# sudo apt update
Host# sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHcaAHQ1cAAHMIERqL7s023.png
图2
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHcaADTP9AAHea19nTBg398.png
图3
安装完成后,可执行如下命令查看交叉编译工具链版本号。
Host# aarch64-linux-gnu-gcc --version
Host# aarch64-linux-gnu-g++ --version
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHeyAByg-AADa5K39204364.png
图4
可以看到交叉编译工具版本为9.4.0及以上版本即为安装成功,同时交叉编译工具链默认安装在"/usr/bin/"目录下。
Host# ls /usr/bin/aarch64-linux-gnu-*
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHfSABa2iAAF9oW3_R8U314.png
图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
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHgCASbsnAAIblMEzLeU742.png
图6
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHgCAKncUAADlO3quAlI891.png
图7
安装完成后,可执行如下命令查看具体版本号。
Host# aarch64-linux-gnu-gcc --version
Host# aarch64-linux-gnu-g++ --version
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHeyAByg-AADa5K39204364.png
图8
可以看到交叉编译工具版本号为9.4.0及以上版本即为安装成功,同时应用交叉编译工具链默认安装在"/usr/bin/"目录下。
Host# ls /usr/bin/aarch64-linux-gnu-*

https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHfSABa2iAAF9oW3_R8U314.png
图9
1.2安装sysroot我司提供的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
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHimAXSYlAABaoNr62pc009.png
图10
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHimANx7oAABS_HRr5uc587.png
图11
执行如下命令,设置交叉编译工具链和sysroot环境变量。
备注:由于Linux应用开发与Linux系统开发使用不同的交叉编译工具链,因此执行如下命令完成应用开发环境变量配置后,当前Terminal命令行终端将不再适用U-Boot、内核开发。如需进行U-Boot、内核开发,请另行打开一个Terminal命令行终端。
Host# source /home/tronlong/RK3562/environment
Host# export
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHjqAUiLpAAGU65JSGuE772.png
图12
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHjqAdyHDAADPl6ZeHEg615.png
图13
2 GDB调试说明GDB为GNU推出的经典命令行调试工具,在Linux系统下广泛使用。它功能强大,能让开发者单步执行程序、逐过程或逐语句调试,自由跳入或跳出函数,还能按条件设置断点,实时查看变量值,精准定位程序问题。
GDB支持多种语言,包括汇编、C/C++、D、Fortran、GO、Objective-C、OpenCL等。此外,它有远程调试模式,在嵌入式系统调试中优势明显。借助TCP/IP协议及专有通信协议,可让调试程序的主机与运行程序的目标机跨设备协作,高效完成调试任务。
2.1调试环境搭建在RK3562工作目录下执行如下命令,创建gdb-test目录并安装GDB调试工具。
Host# mkdir gdb-test
Host# sudo apt install gdb gdbserver gdb-multiarch -y
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHk6ATmeWAAG-2kFWxTQ578.png
图142.2演示程序创建与编译执行如下命令,进入gdb-test目录并新建一个GDB调试演示程序。
Host# cd gdb-test
Host# vi test.c
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHlaALhtHAAAqBWgL9O4950.png
图15
输入以下内容:

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

https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHmCAQCdyAABtjngPfr4736.png
图16
执行如下命令,进行程序编译,编译完成将会生成test可执行程序。
Host# aarch64-linux-gnu-gcc -g test.c -o test
备注:编译时需添加-g参数,生成的可执行文件才带有调试信息。
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHmiAJr4iAABIG8GDoxg928.png
图17
请将单板机与PC机连接至同一个路由器,使用Type-C线将单板机的DEBUG调试串口连接至PC机,然后将单板机上电启动。将编译后的test可执行文件拷贝至单板机系统任意目录下。
Target# ls
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHm-AE27hAAAFUGMO**841.png
图18
2.3调试程序运行执行如下命令,查看虚拟机的IP地址。
Host# ifconfig
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHnuAIQ7KAAGuFiNCgy4298.png
图19
在单板机系统test文件所在路径下,执行如下命令运行gdbserver程序,开启监听。
备注:192.168.13.50为虚拟机的IP地址;1234为连接的端口号(自行设置);test为将要进行调试的程序。
Target# gdbserver 192.168.13.50:1234 test
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHoOAYaF2AAAOWqhzGQY695.png
图20
在虚拟机系统test文件所在路径下,执行如下命令使用GDB调试工具进行调试。
Host# gdb-multiarch test
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHouADWVGAAEzh3oW9wg876.png
图21
执行如下命令,连接单板机。192.168.13.12为单板机的IP地址,请以实际情况为准。
(gdb) target remote 192.168.13.12:1234
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHpSAP0aUAAE06_hO2UQ486.png
图22
同时,单板机DEBUG调试串口打印连接成功的相关信息。
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHpuAWEl9AAAUlD02XUY509.png
图23
2.4程序调试本章节主要演示GDB调试的几个常用命令的使用方法。
2.4.1 list命令用于列出源码,简写:l。
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHqOAVlv8AABxajf-uBM402.png
图24
2.4.2 break命令用于设置断点,简写:b。
分别在main函数和第10行设置断点。
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHqyAI0RzAAAsvuaCzWk296.png
图25
2.4.3 info breakpoints命令用于显示断点的状态,简写:info b。
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHraAN_0uAAA5gWjGi1E226.png
图26
2.4.4 continue命令用于恢复程序执行,简写:c。此命令使GDB恢复程序的执行,直至断点触发或程序结束。
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHsGAI59PAAHQzFDCbB8113.png
图27
以上调试过程在第二个断点中,每输入一次c命令,将会依次打印arr[]数组的元素值,然后程序执行结束。同时,单板机DEBUG调试串口打印相关信息。
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHsuAFmBjAAAiMYDPh44442.png
图28
2.4.5 print命令用于打印变量或者变量地址,简写:p。
设置断点后,可依次打印当前变量i的值。
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHtaAYv8pAAGEwq5Dg8E534.png
图29
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHtaAaVMgAABvj22Yw-E544.png
图30
以上调试过程在每处断点中,使用print命令打印变量i的值。同时,单板机DEBUG调试串口打印相关信息。
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHsuAFmBjAAAiMYDPh44442.png
图31
2.4.6 quit命令退出GDB模式,简写:q。当程序调试完成后,使用quit命令退出GDB调试。
https://file1.elecfans.com/web3/M00/4B/E1/wKgZO2mdHvGAPhQYAAAf0kKOHrc675.png
图32

同时,单板机DEBUG调试串口打印相关信息。
https://file1.elecfans.com/web3/M00/4B/E0/wKgZPGmdHsuAFmBjAAAiMYDPh44442.png
图33

页: [1]
查看完整版本: RK3562 单板机 Linux 应用开发实战手册:LED/CAN/TCP/UART 案例与 Python 开发(一)