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

51,593

Solution 1

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.

Solution 2

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.

Solution 3

As I know:

arm-elf toolchain generates obj code for some OS which support executing elf format (example linux ABI). OS will control executing of your program.

arm-none-eabi toolchain generates obj code for micro-controllers or microprocessors (for bare metal, this will be EABI - embedded ABI). This code are downloaded to clean flash of MC and core of MC start executing it after power-on. No OS, extended command set, no possibility for linking with shared modules.

Solution 4

The ARM EABI is a standard created by ARM that allows different toolchains to create compatible objects. For instance, so that one toolchain can link objects created by another toolchain.

Share:
51,593
Johan
Author by

Johan

Make sure you edit your ignore list to something like this, otherwise there is to much noise.... c# .net asp.net dotnet dotnetnuke matlab rails oracle vb.net visualstudio visualstudio2008 visualstudio2005 delphi flash sharepoint sharepoint2007 iis6 asp.net-2.0 javascript visio exchange exchange-server office-2007 msoffice asp.net-ajax asp.net-1.1 asp.net-mvc asp.net-mvc-beta1 vista vista64 ms-access sqlserver2005 sqlserver excel iphone ruby vb6 vc++ .net3.5 windows .net3.5sp1 visualstudio2008express c#.net game-development vs2008 silverlight silverlight-2.0 silverlight-3.0 silverlight-2-rc0 msvcrt msi win32 windowsserver2008 windowsserver2003 microsoft vs2005 sqlserver2000 vbscript iis iis7 iis5 visual-studio visual-studio-2008 visual-studio-2005 msword sql-server windows-mobile c#4.0 sql-server-2008 .net-4.0 vc6 sql-server-2005 vb visual-studio-2010 ms-access-2007 actionscript-3 flex ie adobe-air visual wcf-performance msbuild dllexport exchange2007 exchange-2003 visual-c++ visual-basic microsoft.visualbasic ie6 microsoft-ecsp actionscript wcf ie7 ie7.js ms ado.net visual-studio-team-system iis-7.5 asp.net-mvc-2 tsql c#3.0 asp-classic ie8 ie8-developer-tools etc etc etc Ctrl+Alt+Delete

Updated on July 19, 2022

Comments