使用 GDB 进行批处理编程:Segger J-Link 和 P&E Multilink

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

我需要用一个固件对几块板进行编程:一个数字对于严肃的批处理/工厂编程来说太小了,但是对于使用调试器执行此操作来说数字太高了。我要这个:

  1. 将电路板与调试探针连接起来并为其供电
  2. 运行脚本来刷新程序并运行它
  3. 断开并重新启动步骤 1。

需要对一些电路板进行编程……

大纲

通过“ 使用 GDB 进行命令行编程和调试 ”,我几乎掌握了一切。所以我只需要将事情组合成一个解决方案。因为它会有所不同,具体取决于您使用的是 P&E Multilink 还是 Segger J-Link,所以我介绍了这两种方法。我使用的是基于 Eclipse 的 Kinetis Design Studio v3.0.0,但也可以使用命令行 gdb 安装。

P&E 多链路

我正在使用以下批处理文件启动 P&E GDB 服务器,然后启动 gdb 客户端。相应地更改路径:


 REM Start P&E GDB Server with single session
call "cmd /c start C:\Freescale\KDS_3.0.0\eclipse\plugins\com.pemicro.debug.gdbjtag.pne_2.0.8.201504092111\win32\pegdbserver_console.exe -startserver -singlesession -device=Freescale_K6x_K64FN1M0M12"

REM start gdb with script C:\Freescale\KDS_3.0.0\arm-none-eabi-gdb -x gdbScript.txt

P&E 服务器的选项 -singlesession 是一个很好的特性:它会在会话结束后终止服务器。我在上面的示例中使用的是 Freescale K64F,因此请确保 -device 选项与您的目标匹配。

gdb 使用选项 -x 使用此 gdb 脚本文件:


 REM Start P&E GDB Server with single session
call "cmd /c start C:\Freescale\KDS_3.0.0\eclipse\plugins\com.pemicro.debug.gdbjtag.pne_2.0.8.201504092111\win32\pegdbserver_console.exe -startserver -singlesession -device=Freescale_K6x_K64FN1M0M12"

REM start gdb with script C:\Freescale\KDS_3.0.0\arm-none-eabi-gdb -x gdbScript.txt

赛格 J-Link

使用 Segger J-Link,我需要先启动 GDB 服务器(确保它尚未运行):


 REM Start P&E GDB Server with single session
call "cmd /c start C:\Freescale\KDS_3.0.0\eclipse\plugins\com.pemicro.debug.gdbjtag.pne_2.0.8.201504092111\win32\pegdbserver_console.exe -startserver -singlesession -device=Freescale_K6x_K64FN1M0M12"

REM start gdb with script C:\Freescale\KDS_3.0.0\arm-none-eabi-gdb -x gdbScript.txt

SEGGER GDB 服务器正在运行

在一个单独的 cmd/shell 窗口中,我运行这个脚本:


 REM Start P&E GDB Server with single session
call "cmd /c start C:\Freescale\KDS_3.0.0\eclipse\plugins\com.pemicro.debug.gdbjtag.pne_2.0.8.201504092111\win32\pegdbserver_console.exe -startserver -singlesession -device=Freescale_K6x_K64FN1M0M12"

REM start gdb with script C:\Freescale\KDS_3.0.0\arm-none-eabi-gdb -x gdbScript.txt

Segger GDB 脚本

该脚本包含以下内容来加载文件、运行它然后断开连接:


 REM Start P&E GDB Server with single session
call "cmd /c start C:\Freescale\KDS_3.0.0\eclipse\plugins\com.pemicro.debug.gdbjtag.pne_2.0.8.201504092111\win32\pegdbserver_console.exe -startserver -singlesession -device=Freescale_K6x_K64FN1M0M12"

REM start gdb with script C:\Freescale\KDS_3.0.0\arm-none-eabi-gdb -x gdbScript.txt

确保更新设备和目标图像/路径设置。

与 P&E 版本的不同之处在于 Segger J-Link 服务器保持运行。我还没有找到使该部分自动化的方法。

概括

批处理一组电路板不需要 IDE 或复杂的设置:您只需要一些 gdb 脚本,我可以在一系列电路板中一个接一个地编程和运行一个电路板。