OABI 和 EABI

1。什么是ABI
ABI,application binary interface (ABI),应用程序二进制接口。
既然是 接口,那就是某两种东西之间的沟通桥梁,此处有这些种情况:
A。应用程序 <-> 操作系统;
B。应用程序 <-> (应用程序所用到的)库
C 。应用程序各个组件之间

类似于API的作用是使得程序的代码间的兼容,ABI目的是使得程序的二进制(级别)的兼容。

2。什么是OABI 和 EABI
OABI中的O,表示“Old”,“Lagacy”,旧的,过时的,OABI就是旧的/老的ABI。
EABI中的E,表示“Embedded”,是一种新的ABI。
EABI有时候也叫做GNU EABI。
OABI和EABI都是专门针对ARM的CPU来说的。

3。EABI的好处 / 为何要用EABI
A。支持软件浮点和硬件实现浮点功能混用
B。系统调用的效率更高
C。后今后的工具更兼容
D。软件浮点的情况下,EABI的软件浮点的效率要比OABI高很多。

4。OABI和EABI的区别
两种ABI在如下方面有区别:
A。调用规则(包括参数如何传递及如何获得返回值)
B。系统调用的数目以及应用程序应该如何去做系统调用
C。目标文件的二进制格式,程序库等
D。结构体中的 填充(padding/packing)和对齐。
E。

 

application binary interface (ABI):

应用二进制接口,描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低层接口。ABI不同于应用程序接口(API),API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译,然而ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。

ABI掩盖了各种细节,例如:调用约定(控制着函数的参数如何传送以及如何接受返回值);系统调用的编码和一个应用如何向操作系统进行系统调用;以及在一个完整的操作系统ABI中,目标文件的二进制格式、程序库等等。一个完整的ABI,像Intel二进制兼容标准 (iBCS) ,允许支持它的操作系统上的程序不经修改在其他支持此ABI的操作体统上运行。其他的 ABI 标准化细节包括 C++ 名称修饰 和同一个平台上的编译器之间的调用约定,但是不包括跨平台的兼容性。

在Unix风格的操作系统中,存在很多运行在同一硬件平台上互相相关但是不兼容的操作系统(尤其是Intel 80386兼容系统)。有一些努力尝试标准化ABI,以减少销售商将程序移植到其他系统时所需的工作。然而,直到现在还没有很成功的例子,虽然Linux标准化工作组正在为Linux做这方面的努力。

 

 

http://www.eurotech-inc.com/embedded-eabi-linux.asp

What is EABI?

GNU EABI is a new application binary interface (ABI) for Linux. It is part of a new family of ABIs from ARM® Ltd. known in the ARM-Linux community as EABI (or sometimes Embedded ABI). Eurotech was the first to make available a port of Debian using this new ABI for ARM systems.

Why switch to EABI?

The new EABI:

  • Allows use of optimized hardfloat functions with the system's softfloat libraries
  • Uses a more efficient syscall convention
  • Will be more compatible with future tools

The ability to mix floating point code is the most important new feature. Like most root file systems for ARM computers, Debian has traditionally used hardfloat FPA instructions for floating point arithmetic. Very few ARM CPUs actually support FPA (a specific kind of floating point acceleration) but ARM-Linux kernels can emulate FPA instructions. They do this through illegal instruction faults which are rather inefficient. Emulating floating point instructions using softfloat (-msoftfloat) can be 4 to 10 times faster than kernel emulation. Prior to the introduction of EABI, the only way to use softfloat was to recompile the entire root file system with softfloat enabled. With EABI, softfloat instructions will be used by default and the root file system can have a mixture of softfloat and hardfloat executables. Now, if you have a system with floating point hardware -- it doesn't have to be FPA, it can be something else -- you can recompile critical software with the appropriate hardfloat instructions and run it on a system along with software that uses softfloat.

We have or will have systems that use VFP (Vector Floating Points), Maverick Crunch (Cirrus Logic), and iWMMXt (Intel) instructions. (The iWMMXt instructions are actually integer SIMD instructions but their opcodes overlap those for FPA.)

How do I use EABI?

To use EABI, you'll need to visit our support forums for installation details. The root file system includes an ARM-Linux-GNU EABI toolchain which you can use to recompile your own source code.

HOW CAN i USE eabi WITH vfp OPTIMIZATIONS?

Several of our systems support Vector Floating Point (VFP) instructions, which can be used to optimize software that makes intensive use of floating point math. We have benchmarked speed improvements of up to 400% for the libc math library, and 200% for the Mesa 3-D graphics library. We provide a page with instructions for using VFP with these libraries on EABI systems, as well as building your own software with VFP optimizations.

你可能感兴趣的:(OABI 和 EABI)