Setup for cross-platform development


We will be developing software for ARM systems from a Ubuntu Linux (virtual) machine.

Toolchain

In the first group of labs, we used GNU GCC and other binary utilities to develop and debug programs. These tools run in a 64-bit x86 Linux machine and produce/operate on binaries that work on a 64-bit x86 Linux machine. That is, the target and host machines are the same: 64-bit x86 Linux machines.

In the second group, we will produce and operate on binaries on the same 64-bit x86 Linux machine but these binaries work on a 32-bit ARM Linux machine. Because the target (32-bit ARM Linux machine) and host (64-bit xx86 Linux machine) are different, we will be doing cross-platform development. We need different versions of the GNU GCC and binary utilities: they run on the host but produce/operate on binaries that run the target.

So instead of using gcc or the likes, we will being using something like arm-linux-gnueabihf-gcc. The prefix arm-linux-gnueabihf warrants some explanation. The application binary interface part, i.e., gnueabihf, warrants further explanation.

We most likely use the following three packages. The first for baremetal programs. The second for kernel and user-space development.

$ sudo apt-get install gcc-arm-none-eabi
$ sudo apt-get install gcc-arm-linux-gnueabihf

GCC

GNU Binutils

Linker Script