Loading Application Files via UART Print


This note explains how to load files such as binary applications from Linux running on the target via UART. This is a useful procedure for those targets that do not provide an Ethernet link and have the serial console as the only communication channel.

On the host, activate the Cortex-M cross-development environment:

-bash-3.2$ pwd
-bash-3.2$ . ACTIVATE.sh

Create a simple "Hello, world" C application:

[host] $ cd /tmp
[host] $ vi test.c
#include <stdio.h>

int main(int argc, char *argv[])
printf("Hello, i.MX RT1060\n");
return 0;

Build the application for the Cortex-M target:

[host] $ arm-v7-linux-uclibceabi-gcc -o test test.c -I ${INSTALL_ROOT}/A2F/root/usr/include -mcpu=cortex-m3 -mthumb -static

If you have no uuencode installed in your system, then install it:

[host] $ sudo apt-get install sharutils

Encode the application binary into an ASCII-only presentation so that the file can be transmitted over a serial line:

[host] $ uuencode test < test > test.encoded

The uudecode application on the target (in order to convert the ASCII-only file back into the application binary) is provided with busybox by default in the rootfs project.

On the host, make sure that the serial port you use for the target console is configured for 115200 bps:

[host] $ stty -F /dev/ttyS0 115200 raw -echo -echoe -echoctl -echok

If you have no picocom installed in your system, the install it:

[host] $ sudo apt-get install picocom

Start the target console:

[host] $ picocom -b 115200 /dev/ttyUSB0

From the target, run the following to read a file from the serial console:

~ # cat > /test.encoded < /dev/ttyLP0

On the host, exit the target console (Ctrl-A and then Ctrl-X in picocom).

On the host, send the encoded ASCII file to the serial port used for the target console:

[host] $ cat /tmp/test.encoded > /dev/ttyUSB0

When the transfer command finishes, enter the target console again:

[host] $ picocom -b 115200 /dev/ttyUSB0

Type Ctrl-C to interrupt the cat command:

/ #

Run uudecode to convert the ASCII file back to the binary file:

~ # uudecode /test.encoded -o /test

Change mode to allow running the application binary:

~ # chmod a+x /test

Finally, run the application:

~ # /test
Hello, i.MX RT1060
~ #