Difference Between Arm-None-Eabi and Arm-Linux-Gnueabi

Difference between arm-eabi arm-gnueabi and gnueabi-hf compilers

I'm not completely sure:

  • the eabi stands for the compilation of code which will run on bare metal arm core.
  • the gnueabi stands for the compilation of code for linux

For the gnueabi/gnueabi-hf part, I found an answer here.

gcc-arm-linux-gnueabi is the cross-toolchain package for the armel architecture. This toolchain implies the EABI generated by gcc's -mfloat-abi=soft or -mfloat-abi=softfp options.

gcc-arm-linux-gnueabihf is the cross-toolchain package for the armhf architecture. This toolchain implies the EABI generated by the gcc -mfloat-abi=hard option.

'hf' means hard-float which indicates that the compiler and its underlying libraries are using hardware floating point instructions rather than a software implementation of floating point such as fixed point software implementations.
The 'eabi' refers to what the underlying binary is going to look like.
It can be argued that these can be achieved with flags to gcc but the issue is that of bare metal pre-compiled libraries. Unless you are recompiling everything from source, it may not be feasible to use gcc with flags alone. Even in that case you might have to carefully configure each package or library with the appropriate compile options.

arm gcc toolchain as arm-elf or arm-none-eabi, what is the difference?

Each architecture or architecture/os couple has an ABI. The ABI (Application binary Interface) describes how functions should be called, syscalls numbers, arguments passed, which registers can be used ...

The abi describes how the compiler should generate the assembly.

If you use only assembler you don't need to care about the ABI.

arm-elf and arm-none-eabi just use two versions of the Arm ABI. The eabi toolchain uses a newer revision, but could also be called arm-elf-eabi, as it generates elf too.

GNU Arm Embedded Toolchain | arm-none-eabi-gcc options: What is a difference between Thumb (-mthumb) and Arm (-marm) state?

I would suggest to read those two articles, one from Arm, Instruction Set Architecture (-marm means that GCC will generate arm32/A32 code, -mthumb means that it will generate thumb/T32 one), and this research paper, Profile Guided Selection of ARM and ThumbInstructions.

Basically, the two instruction sets differ in the set of instructions available as well as their encoding. You should therefore get a smaller and faster executable by using thumb/T32 than by using arm/A32.

This is the reason why most of the tutorials recommend to use the thumb/T32 instruction set.



Related Topics



Leave a reply



Submit