• ARM工具链中的概念——EABI


    http://blog.csdn.net/flagyan/article/details/6166107

    EABI(Embedded Application Binary Interface),嵌入式应用程序二进制接口。

    ABI的定义

    ABI描述应用程序与操作系统、应用程序与库、应用程序的组成部分之间的低层接口。ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。

    EABI的具体定义

    Codesourcery上有一个这样的QA:

    https://support.codesourcery.com/GNUToolchain/kbentry32

    Question

    What is the ABI for the ARM Architecture? Is it the same as the ARM EABI?

    Answer

    The ABI for the ARM Architecture is a standard developed by ARM and its partners that explains how compilers, assemblers, linkers, and other similar tools should generate object files and executable files.

    Tools that correctly implement the ABI for the ARM Architecture can interoperate; i.e., object files built with one toolchain can be combined with object files built with another toolchain if both compilers use the ABI for the ARM Architecture and provided that the code compiled observes certain conventions.

    CodeSourcery was an active participant in the design of the ABI for the ARM Architecture. (In fact, the C++ ABI used by ARM is derived from the Itanium C++ ABI co-designed by CodeSourcery.) CodeSourcery continues to work with ARM, Ltd. to validate interoperability between Sourcery G++ and ARM's proprietary tools.

    The "ARM EABI" is an informal name for the ABI for the ARM Architecture.

    The "ARM EABI" is an informal name for the ABI for the ARM Architecture.

    这里提到了所谓的ARM EABI就是针对 ARM 体系结构的应用程序二进制接口的非正式名称

    在arm的infocenter可以找到ABI for the ARM architecture的相关文档:

    http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.subset.swdev.abi/index.html

      

    用于针对ARM体系结构的应用程序二进制接口(ABI)ARM文档集,这些接口包括ARM 过程调用标准(APCS)ARM ELFARM DWARF、基础平台ABI(BPABI)C++ ABI、异常处理ABI、运行时ABICABI 

    在文档的Terms and abbreviations中有:

    AEABI  (Embedded) ABI for the ARM architecture (this ABI…) 

    也证实了EABI就是Application Binary Interface for the ARM Architecture

    EABI的内容 

    ABI for the ARM architecture是很多规范的合集:

    AADWARF      DWARF for the ARM Architecture

    AAELF         ELF for the ARM Architecture

    AAPCS         Procedure Call Standard for the ARM Architecture

    ADDENDA      Addenda to, and errata in, the ABI for the ARM Architecture

    BPABI          Base Platform ABI for the ARM Architecture

    BSABI          ABI for the ARM Architecture (Base Standard)

    CLIBABI        C Library ABI for the ARM Architecture

    CPPABI         C++ ABI for the ARM Architecture

    EHABI          Exception Handling ABI for the ARM Architecture

    EHEGI          Exception handling component specimen implementations

    RTABI            Run-time ABI for the ARM Architecture

    EABI的作用

    EABI的目的是使不同的编译器编译出来的二进制文件可以互相使用(interoperability),比如Codesourcery, RVCT, RVDS这些编译器。符合EABI标准编译器编译出的库可以相互链接,这样软件开发人员就可以混合使用不同厂商提供的符合EABI标准的二进制库。

     

    下面内容来自http://www.arm.com/community/software-enablement/linux.php?language=zh

    ARM 有助于 GNU 编译器项目,该项目跟踪 ARM 体系结构的发展,并确保为 ARM 提供高质 GNU 工具链。

    该工具链支持目前的所有 ARM 体系结构和处理器(包括 Thumb-2 指令集和 ARM 体系结构第 7 版),并计划支持将来的处理器和体系结构。

    该工具链符合最新的 ARM 应用程序二进制接口,因此可与 ARM RealView Development Suite 或符合 ABI 的任何其他工具链交互工作。用户可以配合使用 ARM 提供的商用、专业工具链的已优化代码大小与性能以及使用开源工具生成的代码。

    可从 CodeSourcery 访问 GNU 编译器的源代码和预置版本,网址为:http://www.codesourcery.com/gnu_toolchains/arm

    当然,EABI相对于以前的ABI性能也会改善。

    EABI相对于以前的ABI的改进

    Differences between v1 and v2 of the ABI for the ARM Architecture列出了ABI for the ARM Architecture V1和V2两个版本的不同,这里的ABI for the ARM Architecture V2就是EABI,V1也被称作Old ABI 或者Lagacy ABI。EABI2005年推出的,新是相对于以前的而言,从时间上看其实已经很——所以很多这些所谓的改变,其实现在已经是标准做法了,例如Exception Handling ABI的改进使浮点数的性能的改善,堆栈的8字节对齐,structure packing的改变等等。

    GNU EABI 

    在很多地方有GNU EABI的说法,这是一个不同的ABI吗?

    还是Codesourcery上的QA:

    http://www.codesourcery.com/sgpp/lite/arm/portal/kbentry38

    Question

    Why is the configuration name for GNU/Linux arm-none-linux-gnueabi instead of just arm-none-linux-eabi? Is there a GNU variant of the EABI?

    Answer

    The Free Software Foundation prefers that configuration names for GNU/Linux contain both the string linux and the string gnu. The configuration arm-none-linux-gnu refers to the legacy ARM ABI for GNU/Linux. Some tools depend on the fact that configuration names have at most three hyphens, so gnu and eabi were combined into a single word.

    The ABI used on GNU/Linux is not a special GNU variant of the EABI; it is just the EABI.

    GNU EABI就是EABI,ABI for the ARM architecture。

    相关资料

    Debian Wiki: ArmEabiPort

    http://wiki.debian.org/ArmEabiPort/

    Codesourcery上的ARM架构FAQ

    http://www.codesourcery.com/sgpp/lite/arm/portal/target_arch?@action=faq&target_arch=arm

    Wikipedia上的ABI

    http://en.wikipedia.org/wiki/Application_binary_interface

    CSDN hongjiujing的总结:ABI/EABI/OABI

    http://blog.csdn.net/hongjiujing/archive/2008/07/21/2686556.aspx

    EABI对浮点数性能的改善:Why ARM's EABI Matters

    http://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Why-ARMs-EABI-matters/

  • 相关阅读:
    ubuntu studio
    BeanUtils包的学习
    java的GUI编程
    Mybatis之旅第三篇-SqlMapConfig.xml全局配置文件解析
    Mybatis之旅第二篇-Mapper动态代理方式
    Mybatis之旅第一篇-初识Mybatis
    Spring之旅第六篇-事务管理
    Spring之旅第五篇-AOP详解
    Spring之旅第三篇-Spring配置详解
    Spring之旅第二篇-Spring IOC概念及原理分析
  • 原文地址:https://www.cnblogs.com/androidme/p/2389566.html
Copyright © 2020-2023  润新知