CLI Usage
You can use the tools from the command line in the same way whether you are on a native host or in a container. Below are some examples of the most common tasks that a Development Environment needs to handle.
Building the software
To build the software, run the following command from the root directory of your project:
docker run --rm -v "$(pwd)":/work axemsolutions/make_gnu_arm make
Here's a breakdown of the command:
--rm
: Removes the container right after the build is finished.-v "$(pwd)":/work
: Mounts the root directory of your project to/work
in the container.axemsolutions/make_gnu_arm
: The tool image to run in the container.make
: The command to execute in the container.
Running the tests
To run the tests, use this command:
docker run --rm -v "$(pwd)":/work axemsolutions/cpputest /bin/sh -c "cd app/test; make"
Here's what each part of the command does:
--rm
: Removes the container right after the test cases have run.-v "$(pwd)":/work
: Mounts the root directory of your project to/work
in the container.axemsolutions/cpputest
: The tool image to run in the container./bin/sh -c "cd app/test; make"
: The command to execute in the container.
Deploying to target
First connect the Nucleo board to your PC. If the board is connected, run the following command:
docker run --privileged --rm -v "$(pwd)":/work axemsolutions/stlink_org /bin/sh -c "cd build;
st-flash write tutorial.bin 0x8000000"
Here's what each part of the command does:
--privileged
: Give access to the USB devices.
Only use this flag for testing purposes. The safe way is to only give access for the actual ST-Link USB device.
--rm
: Removes the container after writing to the flash.-v "$(pwd)":/work
: Mounts the root directory of you project to/work
in the container.axemsolutions/stlink_org
: The tool image to run in the container./bin/sh -c "cd build; st-flash write tutorial.bin 0x8000000"
: The command to execute in the container.
Debugging
GDB is based on a client-server architecture. The client is in the axemsolutions/make_gnu_arm image, and the server is in the axemsolutions/stlink_org image. Therefore, you need both containers running.
Since you have two separate containers, you need a way to let them communicate with each other. Normally, the GDB client and server communicate over TCP/IP, so you need to create a network for them.
To create a bridged network called gdb-net
, run the following command:
docker network create gdb-net
In the next step, you need to start the GDB server with access to this gdb-net.
Warning
The Nucleo board must be connected before starting the axemsolutions/stlink_org container.
Run this command:
docker run -it --privileged --rm --network=gdb-net axemsolutions/stlink_org
Here's what each part of the command does:
-it
: Starts an interactive shell, which is useful to see what's going on in the container.--privileged
: Give access to the USB devices.
Only use this flag for testing purposes. The safe way is to only give access for the actual ST-Link USB device.
--rm
: We can remove the container after the debug session.--network=gdb-net
: Connect to the gdb-net network.axemsolutions/stlink_org
: The tool image to run in the container.
Open another terminal and run the GDB client.
docker run -it --rm -v "$(pwd)":/work --network=gdb-net axemsolutions/make_gnu_arm
-it
: With an interactive shell. We would like to use the GDB as a CLI application from this terminal.--rm
: We can remove the container after the debug session.-v "$(pwd)":/work
: Mount the root directory of you project to/work
in the container.--network=gdb-net
: Connect to the gdb-net network.axemsolutions/make_gnu_arm
: The tool image to run in the container.
Now get back to the GDB server's terminal and get its IP address.
hostname -I
Start the server provided by stlink-org. If the command is successful, it will print Listening at
*:{port}
- note this port number.
st-util
For the GDB client, follow these steps:
-
Start the GDB client with the elf file as the parameter.
-
You should see GDB's own shell.
-
Connect to the server by providing its IP address and the noted port number for the GDB client.
-
Load the binary to the NUCLEO.
-
Now you should be able to debug.