陈工-创龙科技 发表于 2026-10-13 08:57:49

SBC‑TLT153 嵌入式 Linux 应用开发,交叉编译与 GDB 调试实践(上)

前言
本文档主要介绍基于单板机/工控机的Linux应用开发,包括Linux应用开发环境、开发流程,以及通用的Linux应用开发案例演示等。
备注:本文适用于SBC-TLT153单板机及EPC-TLT153工控机系列(由SBC-TLT153单板机搭配扩展板与外壳组成),文中所有演示均基于512MByte DDR3 + 512MByte NAND FLASH硬件配置的单板机开展。
当前应用开发支持情况如下表所示。
https://file1.elecfans.com/web3/M00/7E/40/wKgZPGrMSsmAa4-qAAArEhFDN2c929.png
在完成开发环境搭建后,可参考本文的“Linux常用开发案例”章节熟悉基本的应用开发流程,然后可参考用户手册文档进行产品应用开发。
开发环境
Windows开发环境:Windows10 64bitLinux开发环境:VMware16.2.5、Ubuntu22.04.4 64bitLinuxSDK开发包:LinuxSDK-[版本号](基于aiot-t153-linux-v1.0)单板机系统版本:Tronlong-Desktop 22.04(类Ubuntu)、U-Boot-2023.04-rc4、Linux-5.10.198交叉编译工具链:Rootfs开发、应用开发:arm-linux-gnueabihf-gcc(版本为11.4.0)U-Boot开发:gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi内核开发:gcc-linaro-11.3.1-2022.06-x86_64_arm-linux-gnueabihf
术语表
为便于阅读,下表对文档出现的关键术语进行解释;对于广泛认同释义的术语,在此不做注释。
https://file1.elecfans.com/web3/M00/7E/48/wKgZO2rMS9yABElDAABbQfsNuWM977.png
注意事项
(1)无特殊说明情况下,本文默认基于NAND FLASH配置单板机进行测试,通过NAND FLASH启动系统。默认使用DEBUG作为调试串口,使用LVDS显示屏作为显示输出。(2)我司提供的相关文件支持系统开发和应用开发,具体说明如下:
https://file1.elecfans.com/web3/M00/7E/41/wKgZPGrMS_OAaI4SAAA5Ta9PG8w819.png
1 开发环境搭建说明
1.1 安装应用交叉编译工具链
本文主要提供适配应用开发的交叉编译工具链安装方式,包括网络安装、本地安装,请根据实际环境选择其中一种方式进行安装。(1)通过网络安装Host# sudo apt updateHost# sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
https://file1.elecfans.com/web3/M00/7E/49/wKgZO2rMTBKAGOfoAALd9kHMMto112.png
https://file1.elecfans.com/web3/M00/7E/41/wKgZPGrMTAmABUmNAACkAy0uLiU646.png
https://file1.elecfans.com/web3/M00/7E/49/wKgZO2rMTA-AMTyvAAHfJsXEEy8713.png
安装完成后,可执行如下命令查看交叉编译工具链版本号。Host# arm-linux-gnueabihf-gcc --versionHost# arm-linux-gnueabihf-g++ --version
https://file1.elecfans.com/web3/M00/7E/41/wKgZPGrMTCyATplMAADXNilXkkk411.png
可以看到交叉编译工具版本为11.4.0及以上版本即为安装成功,同时交叉编译工具链默认安装在"/usr/bin/"目录下。Host# ls /usr/bin/arm-linux-gnueabihf-*
https://file1.elecfans.com/web3/M00/7E/41/wKgZPGrMTPmAc_4cAAGD9stCw70041.png
(2)本地安装我司提供的交叉编译链压缩包位于产品资料“4-软件资料\Linux\Tools\”目录下,请将其拷贝至上位机Ubuntu系统任意路径,执行如下命令进行安装。备注:离线安装前需清理apt缓存,确保安装环境干净。Host# sudo apt-get clean
https://file1.elecfans.com/web3/M00/7E/49/wKgZO2rMTRKALkflAAF6rdosxhk133.png
Host# tar -zxf gcc-arm-linux-gnueabihf-11.4.0-offline.tar.gzHost# sudo cp arm-gcc-offline/*.deb /var/cache/apt/archives/Host# cd /var/cache/apt/archivesHost# sudo apt install ./*.deb
https://file1.elecfans.com/web3/M00/7E/41/wKgZPGrMTSSAeSoOAAB7lrHQv2k759.png
https://file1.elecfans.com/web3/M00/7E/41/wKgZPGrMTSaAUl3pAAFsDel4YCE335.png
https://file1.elecfans.com/web3/M00/7E/49/wKgZO2rMTSaAL1hkAAEq4e72vvc851.png
安装完成后,可执行如下命令查看具体版本号。Host# arm-linux-gnueabihf-gcc --versionHost# arm-linux-gnueabihf-g++ --version
https://file1.elecfans.com/web3/M00/7E/49/wKgZO2rMTT2AYuC3AADPekNrc3E480.png
可以看到交叉编译工具版本为11.4.0及以上版本即为安装成功,同时交叉编译工具链默认安装在"/usr/bin/"目录下。Host# ls /usr/bin/arm-linux-gnueabihf-*
https://file1.elecfans.com/web3/M00/7E/49/wKgZO2rMTUuAbiwIAAD4V_HYC_8927.png
1.2 安装sysroot
我司提供的sysroot压缩包主要包含应用开发时所需的库(常用开发库、Qt库等),适用于Linux系统应用开发。请将产品资料“4-软件资料\Linux\LinuxSDK\”目录下的sysroot压缩包拷贝至上位机Ubuntu系统"/home/tronlong/T153/"目录。执行如下命令,将其解压,解压完成后会在当前目录下生成一个"sysroot"目录和environment文件,"sysroot"目录包含sysroot相关文件。备注:sysroot压缩包版本以实际情况为准。Host# tar -zxf t153-Tronlong-Desktop-22.04-sysroot-v1.0-nand.tar.gz
https://file1.elecfans.com/web3/M00/7E/41/wKgZPGrMTWOAOtAeAABohcrRPO4080.png
https://file1.elecfans.com/web3/M00/7E/49/wKgZO2rMTWOAA2xUAACOrXrKzKo117.png
2 GDB调试说明
GDB为GNU推出的经典命令行调试工具,在Linux系统下广泛使用。它功能强大,能让开发者单步执行程序、逐过程或逐语句调试,自由跳入或跳出函数,还能按条件设置断点,实时查看变量值,精准定位程序问题。
GDB支持多种语言,包括汇编、C/C++、D、Fortran、GO、Objective-C、OpenCL等。此外,它有远程调试模式,在嵌入式系统调试中优势明显。借助TCP/IP协议及专有通信协议,可让调试程序的主机与运行程序的目标机跨设备协作,高效完成调试任务。
2.1 调试环境搭建
执行如下命令安装gdb调试工具。Host# sudo apt install gdb-multiarch
https://file1.elecfans.com/web3/M00/7E/49/wKgZO2rMTXSAJaXoAAE7WjMVP50165.png
2.2 演示程序创建与编译
在T153目录下创建gdb-tool目录,在gdb-tool目录下执行如下命令,新建一个GDB调试演示程序。Host# mkdir gdb-tool
Host# cd gdb-tool/Host# vi test.cHost# cat test.c https://file1.elecfans.com/web3/M00/7E/42/wKgZPGrMTceACfLiAACbo1N7K0w231.png
演示程序代码如下:
#include
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/7E/49/wKgZO2rMTdiAcFbdAABqnf22YdE048.png
执行如下命令,进行程序编译,编译完成将会生成test可执行程序。备注:编译时需添加-g参数,生成的可执行文件才带有调试信息。Host# arm-linux-gnueabihf-gcc -g test.c -o test
https://file1.elecfans.com/web3/M00/7E/4A/wKgZO2rMTkWAbp2kAABT0xfyLlw489.png
请将单板机与PC机连接至同一个路由器,使用Type-C线将单板机的DEBUG调试串口连接至PC机,然后将单板机上电启动。将编译后的test可执行文件拷贝至单板机系统任意目录下。Target# ls test
https://file1.elecfans.com/web3/M00/7E/42/wKgZPGrMTlGAfx00AAAFOJRIACQ220.png
2.3 调试程序运行
执行如下命令,查看虚拟机的IP地址。
Host# ifconfig
https://file1.elecfans.com/web3/M00/7E/42/wKgZPGrMTmKAOo5WAAExPN8T8v4403.png
在单板机系统test文件所在路径下,执行如下命令运行gdbserver程序,开启监听。备注:192.168.12.59为虚拟机的IP地址;1234为连接的端口号(自行设置);test为将要进行调试的程序。Target# gdbserver 192.168.12.59:1234 test
https://file1.elecfans.com/web3/M00/7E/42/wKgZPGrMTm2AIFjHAAAOOu7ukjo649.png
在虚拟机test文件所在路径下,执行如下命令使用GDB调试工具进行程序调试。Host# gdb-multiarch test
https://file1.elecfans.com/web3/M00/7E/42/wKgZPGrMTnuARy3QAAERMJiDyaw691.png
执行如下命令,连接单板机。192.168.12.37为单板机的IP地址,请以实际情况为准。(gdb) target remote 192.168.12.37:1234
https://file1.elecfans.com/web3/M00/7E/4A/wKgZO2rMToqAXtj6ABUvZdCAP0w035.png
同时,单板机DEBUG调试串口打印连接成功的相关信息。
https://file1.elecfans.com/web3/M00/7E/4A/wKgZO2rMTpGALhj9AAAdpIBV4fI635.png
2.4 程序调试
本章节主要演示GDB调试的几个常用命令的使用方法。
2.4.1 list命令
用于列出源码,简写:l。
https://file1.elecfans.com/web3/M00/45/A3/wKgZO2lbeNaADCH8AABiyg4_q08562.png
2.4.2 break命令
用于设置断点,简写:b。分别在main函数和第10行设置断点。
https://file1.elecfans.com/web3/M00/7E/42/wKgZPGrMTrGAJmrMAAA1_CjVz6Y774.png
2.4.3 info breakpoints命令
用于显示断点的状态,简写:info b。
https://file1.elecfans.com/web3/M00/7E/4A/wKgZO2rMTruAZJYXAAAwdb8ce4o982.png
2.4.4 continue命令
用于恢复程序执行,简写:c。此命令使GDB恢复程序的执行,直至断点触发或程序结束。
https://file1.elecfans.com/web3/M00/7E/4A/wKgZO2rMTsWAFnQMAABrtwWL4Ac933.png
以上调试过程在第二个断点中,每输入一次c命令,将会依次打印arr[]数组的元素值,然后程序执行结束。同时,单板机DEBUG调试串口打印相关信息。
https://file1.elecfans.com/web3/M00/7E/42/wKgZPGrMTs6AMXscAAAskkaZ15k783.png
2.4.5 print命令
用于打印变量或者变量地址,简写:p。
设置断点后,可依次打印当前变量i的值。
https://file1.elecfans.com/web3/M00/7E/4A/wKgZO2rMTt-AcPf_ABIsDBAbT68668.png
以上调试过程在每处断点中,使用print命令打印变量i的值。同时,单板机DEBUG调试串口打印相关信息。
https://file1.elecfans.com/web3/M00/7E/42/wKgZPGrMTu-AEYNuAAAyXKTuslQ345.png
2.4.6 quit命令
退出GDB模式,简写:q。当程序调试完成后,使用quit命令退出GDB调试。
https://file1.elecfans.com/web3/M00/7E/4A/wKgZO2rMTvuAEv_AAACQ_swejsE281.png
同时,单板机DEBUG调试串口打印相关信息。
https://file1.elecfans.com/web3/M00/7E/42/wKgZPGrMTu-AEYNuAAAyXKTuslQ345.png

页: [1]
查看完整版本: SBC‑TLT153 嵌入式 Linux 应用开发,交叉编译与 GDB 调试实践(上)

Baidu
map