Write and compile "Hello World!"
Let's start with a simple C program, and use the armclang and armlink tools to compile and generate an executable image.
-
In your command-line terminal, use your favorite editor, for example, vi, to create a new file called
hello_world.c
with the following contents:#include <stdio.h> int main(void) { printf("Hello World\n"); return 0; }
-
Compile the C code to object code with armclang:
$ armclang -c -g --target=aarch64-arm-none-eabi hello_world.c
This command tells the armclang compiler to compile
hello_world.c
for the Armv8-A architecture and generate an ELF object filehello_world.o.
The options used in this command are:
-c
tells the compiler to stop after compiling to object code. We will perform the link step to create the final executable in the next step.-g
tells the compiler to include debug information in the image.--target=aarch64-arm-none-eabi
tells the compiler to target the Armv8-A AArch64 ABI.
-
Create an executable image by linking the object using armlink. This generates an ELF image file named
__image.axf:
$ armlink hello_world.o
Because we have not specified an entry point, when you run this image the entry point defaults to __main()
in the Arm libraries. These libraries perform a number of setup activities, including:
- Copying all the code and data from the image into memory.
- Setting up an area of memory for the application stack and heap.
- Branching to the
main()
function to run the application.
This diagram illustrates the code startup sequence that shows how control passes from the C library to your code: