When you build a gcc toolchain there is the possibility to build it as arm-elf or as arm-none-eabi, but what is the difference?
I use the eabi today, but that is just since everyone else seem to do that... but since that is a really bad argument, it would be really nice to understand the difference.
Note: This toolchain will crosscompile code for Cortex-M3 based mcu:s like the stm32.
Thanks
Some links:
EABI:
ELF:
This is an ARM gcc toolchain for cortex M0 and M3. The configuration is optimal for ARM 7, 9, and Cortex processors running in an embedded mode (with no OS). The binaries include the following: Binary. Version.
arm-none-eabi is the toolchain we use in this class. This toolchain targets the ARM architecture, has no vendor, does not target an operating system (i.e. targets a “bare metal” system), and complies with the ARM EABI.
The default ARM tool chain application binary interface is the Embedded Application Binary Interface (EABI). It defines the conventions for files, data types, register mapping, stack frame and parameter passing rules. The EABI is commonly used on ARM and PowerPC CPUs.
Here is an excellent explanation.
Toolchains follow the loose naming convention: arch [-vendor] [-os] -eabi
arch refers to target architecture (which in our case is ARM)
vendor refers to toolchain supplier
os refers to the target operating system
eabi refers to Embedded Application Binary Interface
Some examples:
arm-none-eabi: This toolchain targets the ARM architecture, has no vendor, does not target any operating system, and complies with the ARM EABI.
arm-none-linux-gnueabi: This toolchain targets the ARM architecture, has no vendor, creates binaries that run on the Linux operating system, and uses the GNU EABI. It is used to target ARM-based Linux systems.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With