EABI vs OABI
Overview
OABI was the first application binary interface for the ARM series. OABI assumes that you will have a floating point unit processor. Unfortunatly this just isn't the case for many ARM devices. On devices without a hardware FPU, compilers will attempt to talk to an FPU that doesn't exist, throw a kernel exception, and then the kernel's exception hanlder would use its built in softFPU to correctly emulate the math which is returned to the original program which called for any floating point math. This implies a context switch every time you use a float which is incredibly inefficient.
EABI was created to fix these and other inefficiencies. Instead of having the softfpu in the Linux Kernel, the compiler builds in specific support for hardfloat or softfloat. This brings huge speed increases to boards using a softfpu, and a small increase for hardware floating point CPUs. Software floating point operations using this method are noted to be approximately 10x faster than OABI.
Debian Architectures
Debian has 3 architectures for Arm at this time.
Architecture | ABI | FPU | Releases |
---|---|---|---|
ARM | OABI | Not required, but very slow without | All debian releases upto and including Lenny were OABI. It has since been deprecated. |
ARMEL | EABI | Does not make use of FPU | Lenny and beyond |
ARMHF | EABI | FPU required. Specifically benefits from NEON architecture and VFP. | Wheezy and beyond |
EABI has no easy way for a binary distribution to have support for both softfpu and hardfpu, so Debian will support both. However, it is possible for your application to make use of the FPU without changing the rest of the system from OABI or EABI as long as you statically compile your binaries. EABI support will still require a kernel that is version 2.6.16 or above.