DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Modernize your data layer. Learn how to design cloud-native database architectures to meet the evolving demands of AI and GenAI workloads.

Related

  • Unraveling Lombok's Code Design Pitfalls: Exploring Encapsulation Issues
  • Upgrade Your Hobbyist Arduino Firmware To Work With STM32 For Wider Applications
  • The Power of Refactoring: Extracting Interfaces for Flexible Code
  • Embedded System Design: Demystifying the Core of Smart Devices

Trending

  • Ensuring Configuration Consistency Across Global Data Centers
  • How Trustworthy Is Big Data?
  • Unit Testing Large Codebases: Principles, Practices, and C++ Examples
  • Integrating Model Context Protocol (MCP) With Microsoft Copilot Studio AI Agents
  1. DZone
  2. Software Design and Architecture
  3. Integration
  4. Batch Programming with GDB: Segger J-Link and P&E Multilink

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

By 
Erich Styger user avatar
Erich Styger
·
Aug. 31, 15 · Tutorial
Likes (1)
Comment
Save
Tweet
Share
3.5K Views

Join the DZone community and get the full member experience.

Join For Free

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…

Outline

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:
detach

# quit gdb:
quit

Segger J-Link

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

c:\Freescale\KDS_3.0.0\segger\JLinkGDBServerCL.exe

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
disconnect
quit

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.

Summary

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.

IT Design Debug (command) Session (web analytics) Firmware Command (computing) Integrated development environment

Published at DZone with permission of Erich Styger, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Unraveling Lombok's Code Design Pitfalls: Exploring Encapsulation Issues
  • Upgrade Your Hobbyist Arduino Firmware To Work With STM32 For Wider Applications
  • The Power of Refactoring: Extracting Interfaces for Flexible Code
  • Embedded System Design: Demystifying the Core of Smart Devices

Partner Resources

×

Comments

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends: