Hello World

This guide will walkthrough the creation and cross-compilation of a Hello World executable intended to run on the phyCORE-i.MX8X.

Note

In order to follow this guide, you must first :ref: installSDK-8X and source the cross compilation environment.

Let’s make a project directory to contain the Hello World source code:

Host (Ubuntu)
mkdir ~/helloworld-project
cd ~/helloworld-project

Create the main Hello World application source code file using your favorite text editor:

Host (Ubuntu)
vim helloworld.c

Edit the contents of the file to reflect the following and remember to save your changes when you are done!

helloworld.c
#include <stdio.h>

int main()
{
      printf("Hello World!\n");
}

Cross-Compile the Hello World project:

Host (Ubuntu)
$CC -O helloworld.c -o helloworld

You should now see an executable of the name “helloworld” in the current working directory. Remember that this file was cross-compiled so it won’t work as expected if you try to execute it on your Ubuntu Host Machine. We can confirm the target architecture of the binary like this:

Example Output
user@ubuntu:~/helloworld-project$ file helloworld
helloworld: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=565c9da2e79cc69861115a358f21c4e8c01ba9fa, for GNU/Linux 3.14.0, not stripped

Now, transfer the executable to the phyCORE-i.MX8X while it is booted into Linux. Check out the guide, :ref: cpyfiletodevice-8X, for a bunch of options on how to do this. I recommend just quickly copying the “hello” file to a USB thumb drive to transfer files to the running target or, if you have time, setting up a network file sharing for long term development.

Once the file is transferred to the phyCORE-i.MX8X, navigate to the directory containing it using the target console and run the binary:

Target (Linux)
./helloworld
Exmaple Output
root@imx8x-phycore-kit:~# ./helloworld
Hello World!