Zephyr 提供了多种 debug 调试方式,支持 GDB 调试,本章节主要介绍如何基于J-Link 仿真器实现应用调试。通过本章节学习,开发者可以了解到:
本章节功能特性仅在 lisa zep 工具 1.6.2 及以上版本支持,您可通过执行
lisa info zephyr
检查本地的工具版本,并可通过lisa update zephyr
更新到最新工具版本。
J-Link
仿真器,并成功安装驱动。J-Link | 开发板 |
---|---|
SWCLK | PA00 |
SWDIO | PA01 |
RST | RST |
GND | GND |
由于使用 JLink 进行调试需使用到芯片的SWD接口,因此不要使用 DAPLink USB 接口对开发板进行供电,已避免板载调试芯片对 SWD 接口造成占用。
我们将通过以下步骤实现 J-Link 的 GDB 调试:
JLinkDevices
(详见后续步骤说明)。访问SEGGER的官方网站下载适用于 Linux 的 J-Link 驱动和 JLinkGDBServerExe 软件包。
下载好后,解压文件,然后在终端中进入解压后的目录,运行以下命令来安装驱动:
sudo dpkg -i <文件名>.deb
将烧录算法解压后JLinkDevices
(点击此处下载)放到~/.config/SEEGGER
目录下。
基于hello_world项目进行演示
hello_world
应用代码增加简单的代码逻辑void main(void)
{
printk("Hello World! %s\n", CONFIG_BOARD);
/*增加一个while循环计数*/
int count = 0;
while (1) {
k_msleep(1000);
count++;
printk("count = %d", count);
}
}
在hello_world
根目录下运行以下命令:
lisa zep build -b csk6_duomotai_devkit
编译成功后可以在 build/zephyr 目录下找到编译文件zephyr.elf
在终端命令行运行以下命令打开J-Link配置页:
JFlash
按照下列步骤进行配置:
确认接好 J-Link 仿真器,然后开发板上电
如果找不到 venus 芯片型号,请检查是否下载 JLinkDevices 并解压至~/.config/SEEGGER 目录下。
使用CSK_USB(非DAP_USB)对开发板供电。
点击target—>connect,看到连接成功说明J-Link配置成功,关闭窗口。
日志显示Connected successfully
下载 jflash.zip 并解压到自己的目录
在终端命令行运行以下命令打开JLinkGDBServerExe配置页:
JLinkGDBServerExe
按照下列步骤进行配置:
完成配置后弹出如下界面:
从界面中查看端口(GDB Server Listening port
)号,这里是 2331
另起一个命令行端口找到安装的编译器路径执行以下命令进入GDB终端:
/home/yuanbo/.listenai/lisa-zephyr/packages/node_modules/@binary/gcc-arm-none-eabi-9/binary/bin/arm-none-eabi-gdb
注意:地址修改为你的编译器路径,可参考上述路径查找。
如下图所示,已进入GDB终端
打开GDB终端时出现以下报错:
这是因为缺少 libncurses5
库
解决方案:
1、ubuntu为22.04或之前的版本:
命令行运行以下命令安装 libncurses5
库:
sudo apt-get install libncurses5
2、ubuntu为22.04之后版本,这里以24.04版本为例:
Ubuntu24.04没有 libncurses5
库,需要创建一个 libncurses5
到 libncurses6
的符号链接。
命令行运行以下命令导航到库文件所在目录:
cd /usr/lib/x86_64-linux-gnu
命令行运行以下命令创建符号链接:
sudo ln -s libncurses.so.6 libncurses.so.5
命令行运行以下命令查看是否创建;
ls -l libncurses.so.5
创建完成如下图所示:
命令行执行以下命令加载编译文件:
file /home/yuanbo/duomotai_ap/.sdk/zephyr/samples/hello_world/build/zephyr/zephyr.elf
编译文件
zephyr.elf
位置参考编译
步骤。
如下图所示,编译文件加载成功
命令行执行以下命令设置端口:
target remote localhost:2331
命令行执行以下命令加载应用程序:
load
如下图所示,应用程序加载成功:
可以使用以下命令对程序进行调试:
monitor reset //复位重启
load //加载程序
break main //设置断点
continue //开始执行并在断点处暂停
set disassemble-next-line on //设置自动反汇编功能
step //单步执行并查看源码及汇编指令