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

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

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

  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 脚本,我可以在一系列电路板中一个接一个地编程和运行一个电路板。

相关文章