Over a million developers have joined DZone.

Batch Programming with GDB: Segger J-Link and P&E Multilink

DZone's Guide to

Batch Programming with GDB: Segger J-Link and P&E Multilink

Use the command line to do some efficient batch programming for your firmware boards

· IoT Zone ·
Free Resource

I need to program several boards with a firmware: a number too small for serious batch/factory programming, but a number too high for doing this with the debugger. I want this:

  1. Connect the board with the debug probe and power it
  2. Run a script to flash the program and run it
  3. Disconnect and restart step 1.

Need to program a few boards…


With “Command Line Programming and Debugging with GDB” I have pretty much everything in place. So I only need to combine things into a solution. Because it's different depending on if you're using the P&E Multilink or Segger J-Link, I have covered both methods. I’m using the Eclipse-based Kinetis Design Studio v3.0.0, but a command line gdb installation can be used too.

P&E Multilink

I’m using the following batch file to start the P&E GDB server, followed by starting the gdb client. Change paths accordingly:

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

The option -singlesession to the P&E server is a nice feature: it will terminate the server after the session is finished. I’m using the Freescale K64F in the above example, so make sure the -device option matches your target.

The gdb uses the option -x uses this gdb script file:

# gdbscript.txt: script for gdb. Run it with
# gdb -x <commandFile>

# disable confirmation messages (y or no):
set confirm off

# connect to P&E gdb server:
target remote localhost:7224

# reset target:
monitor reset

# load symbols for application (not necessary for flashing only):
# file MyProject/Debug/MyProject.elf

# load application:
load MyProject/Debug/MyProject.elf

# detach from target. As a side effect, this will start it:

# quit gdb:

Segger J-Link

With the Segger J-Link, I need to launch the GDB server first (make sure it's not already running):


SEGGER GDB Server running

In a separate cmd/shell window, I run this script:

c:\Freescale\KDS_3.0.0\toolchain\bin\arm-none-eabi-gdb.exe -x gdbscript.txt

Segger GDB Script

The script has the following content to load the file, run it and then disconnect:

# gdb script
target remote localhost:2331
monitor device MK64FN1M0xxx12
monitor reset
load ./Debug/FRDM-K64F_FreeRTOS_8.2.1.elf
# load symbols, not necessary for flashing only
# file ./Debug/FRDM-K64F_FreeRTOS_8.2.1.elf
monitor go

Make sure you update the device and target image/path settings.

The difference with the P&E version is that the Segger J-Link server keeps running. I have not found a way to make that part automated.


There is no IDE or complicated setup necessary to batch program a set of boards: all that you need are some gdb scripts, and I can program and run one board after each other in a series of boards.

gdb ,firmware ,boards

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}