Using GDB with the S32K148EVB board via USB
The S32K148 development board provides several ways to flash and debug images, one of which is via the USB / OpenSDA interface. i.e. you can debug over a USB cable connected between the board and your computer. This interface is implemented on the board by P&E Micro along with a matching Eclipse plugin which contains their implementation of gdb server.
P&E Micro’s Eclipse plugin is included in NXP’s IDE for the board (S32 Design Studio). The instructions below set up the gdb server it contains to be used without S32 Design Studio. This opens up the option of using your preferred IDE to debug on the board via USB. For example see Using GDB with the S32K148EVB via USB from Visual Studio Code.
Note that P&E Micro’s implementation of gdb server must be used to debug the board via P&E Micro’s implementation of the USB / OpenSDA interface. P&E Micro provide three pre-built executables for three different host platforms - Linux, Windows and OS X. The instructions on this page are focused on setting this up on Linux hosts, including on WSL (Windows Subsystem for Linux).
Get P&E Micro’s gdb server from NXP’s S32 Design Studio installation
If you have already installed NXP’s S32 Design Studio for the S32K148EVB board then you already have P&E Micro’s Eclipse Plug-in. Check the subfolders of the S32 Design Studio installation for a folder named…
eclipse/plugins/com.pemicro.debug.gdbjtag.pne_[version]/
which contains …
lin/pegdbserver_console
win32/pegdbserver_console.exe
osx/pegdbserver_console
These are P&E Micro’s gdb server executables built for Linux, Windows and OS X.
Get P&E Micro’s gdb server from their website
If you have not installed NXP’s S32 Design Studio, (or if you want the latest version) the GDB Server Plug-In for Eclipse-based ARM IDEs is free to download (you just need to create an account).
The downloaded file will be named com.pemicro.debug.gdbjtag.pne.updatesite-[VERSION].zip
.
Unzip it…
unzip com.pemicro.debug.gdbjtag.pne.updatesite-[VERSION].zip
Once unzipped, in the plugins/
folder, find the file named com.pemicro.debug.gdbjtag.pne_[VERSION].jar
.
You can unpack this using jar
. If you do not have jar
, install it…
sudo apt install fastjar
Unpack the jar file…
jar -xf com.pemicro.debug.gdbjtag.pne_[VERSION].jar
This produces the directory tree containing the three versions of pegdbserver_console
for different host platforms, as shown above.
You will need to make pegdbserver_console
executable for your host platform. eg.
chmod a+x lin/pegdbserver_console
P&E Micro’s OpenSDA USB Driver
P&E Micro’s gdb server requires P&E Micro’s OpenSDA USB driver to be installed. If you have already installed NXP’s S32 Design Studio then you should already have this driver installed. If not, you can download it for free from P&E Micro OpenSDA Support.
Note that if you have installed NXP’s S32 Design Studio on Windows but wish to set up gdb server in
WSL (Windows Subsystem for Linux) then you will need to attach the OpenSDA USB device to WSL
using usbipd
as described in Add USB support to WSL
and install the Linux USB Driver for OpenSDA in WSL.
The downloaded OpenSDA driver for Linux will be in a file named pemicro-other-[VERSION].zip.tar.gz
.
Unpack this…
tar -xzf pemicro-other-[VERSION].zip.tar.gz
and follow the instructions in pemicro-other-[VERSION]/drivers/PemicroLinuxDriversReadme.pdf
.
Note from this issue
that you may need to copy libp64-0.1.so.4
to /usr/lib/
if the installation script put it in /usr/lib64/
.
Also note from this answer,
on some systems installing libusb-dev
satisfies the requirement to have the 32-bit version of libusb-0.1.so.4
.
On 64-bit Ubuntu 22.04
the following successfully installs P&E Micro’s OpenSDA USB driver…
sudo apt-get install libusb-dev
cd pemicro-other-20181128/drivers/libusb_64_32/libusb_64_32/
sudo ./setup.sh
Running gdb server
Assuming you have the S32K148EVB board connected to you computer via USB and have set up your computer as described above, you should be able to run the gdb server as follows…
sudo ./pegdbserver_console -startserver -device=NXP_S32K1xx_S32K148F2M0M11
and if it successfully connects to you board you should see output like this…
P&E GDB Server for Arm(R) devices, Version 9.45.00.00
Copyright 2018, P&E Microcomputer Systems Inc, All rights reserved
Loading library /home/username/temp/pemicro/com.pemicro.debug.gdbjtag.pne_5.7.8.202404031741/lin/gdi/unit_ngs_arm_internal.so ... Done.
Command line arguments: -startserver -device=NXP_S32K1xx_S32K148F2M0M11
Device selected is NXP_S32K1xx_S32K148F2M0M11
HW Auto-Selected : Interface=OPENSDA Port=9988CE09 ; USB1 : OpenSDA (9988CE09)
Connecting to target.
OpenSDA detected - Flash Version 1.21
Device is NXP_S32K1xx_S32K148F2M0M11.
Mode is In-Circuit Debug.
(C)opyright 2012, P&E Microcomputer Systems, Inc. (www.pemicro.com)
API version is 101
TARGET XML PATH is /home/username/temp/pemicro/com.pemicro.debug.gdbjtag.pne_5.7.8.202404031741/supportFiles_ARM/target_v7m_vfp.xml
Server 1 running on 127.0.0.1:7224
Server 2 running on 127.0.0.1:7226
Server 3 running on 127.0.0.1:7228
Server 4 running on 127.0.0.1:7230
Server 5 running on 127.0.0.1:7232
Server 6 running on 127.0.0.1:7234
Server 7 running on 127.0.0.1:7236
Server 8 running on 127.0.0.1:7238
Server 9 running on 127.0.0.1:7240
Server 10 running on 127.0.0.1:7242
All Servers Running
Note that by default it uses localhost (127.0.0.1
) and the ports listed (7224
, 7226
, … 7242
).
You can change this using the options -serverip
and -serverport
to make the gdb server available to other machines via ethernet.
Run pegdbserver_console -h
to see the full list of options.
Running gdb
arm-none-eabi-gdb
is the gdb client for ARM.
If you have already set up your environment to build for the s32k148
target
then you will have downloaded GCC for ARM toolchain and
added its bin
directory to your PATH
environment variable.
If so, then you should already have arm-none-eabi-gdb
on your PATH
.
To run arm-none-eabi-gdb
and connect to the board for a debugging session
check the following…
gdb server should be running as described above and successfully connecting to the board via USB
arm-none-eabi-gdb
depends on the shared librarylibncurses.so.5
so you may need to install that…sudo apt install libncurses5
You need to have built for the s32k148 target, such that the elf file is found at…
cmake-build-s32k148/application/app.referenceApp.elf
Then, in the root folder you can run the gdb client to start an interactive debug session…
arm-none-eabi-gdb -x tools/gdb/pegdbserver.gdb cmake-build-s32k148/application/app.referenceApp.elf
Flash the board on command-line
With the gdb server running as described above, instead of flashing the elf file via S32 Design Studio, it may be more convenient to flash it in a single command as follows…
arm-none-eabi-gdb -batch -x test/pyTest/flash.gdb cmake-build-s32k148/application/app.referenceApp.elf
Reset the board on command-line
You can reset the board in a single command as follows…
arm-none-eabi-gdb -batch -x test/pyTest/reset.gdb cmake-build-s32k148/application/app.referenceApp.elf