ABI 及 ARM EABI
程序员文章站
2022-06-03 22:54:04
...
- 简单介绍
ABI : application binary interface
ABI : 是规范.
EABI : Embedded application binary interface
EABI : 是 arm 对于 ABI规范的比较新(2005年)的实现 // powerpc也有一个实现叫做EABI
OABI : Old application binary interface
OABI : 是 arm 对于 ABI规范的比较老的实现
资料获取
- 官方资料
- 专业书籍
专业嵌入式软件开发 全面走向高质高效编程 Chapter 10 abi/eabi 规范,缔造程序兼容合约
讲述的是x86
// https://www.veryarm.com/51150.html
// https://www.cnblogs.com/gccbuaa/p/6809006.html
// https://blog.csdn.net/emtribe/article/details/8598941
// https://blog.csdn.net/hongjiujing/article/details/2686556
// https://wiki.debian.org/ArmEabiPort
ABI是系统与应用之间的协议.
保证应用能运行在系统上(调用rootfs提供的LIB及调用进入系统调用的封装)
// 一个应用能运行在系统上要考虑很多要素...
一个BINARY(EXEC, LIB)必需符合ABI才能在相应的系统上运行.
比如我在PC上用不管什么样的COMPILER, 只要满足以下两个条件,就可以在一个linux机器上运行.
1.产生符合Linux的ELF文件 // 此处隐含有 ELF文件和Linux 两个要素,即 linux 要和ELF匹配, ELF 要和linux匹配,即每个因素都要因为匹配做出努力.
2.用相应的INSTRUCTION SET(比如x86,mips,ARM).
ABI 规范了 如何满足条件1 (产生符合Linux的ELF文件)
1.ABI定义了BINARY的文件格式, 内容, 以及装载/卸载程序的要求, 函数调用的参数传递规则, 寄存器, 堆栈的使用等.
程序正常编译和运行需要考虑的事情
在编译的时候
一个应用程序,调用了.so库中的函数或者系统调用,
如果它的编译器可以找到被调用函数或者系统调用的话,则编译可以同过
在运行时候
在调用库函数或者系统调用的时候,
1.应用要先要以库函数或者系统调用指定的方式和位置(内存或者寄存器)设置参数,
2.然后通过中断或者其他方式跳转到被调用代码的起始处进行执行,
3.被调用代码从指定位置去到参数,
4.处理完毕之后再将结果放到指定的位置,
5.最后应用再到指定的地方取回结果,调用完毕
ABI 与 程序正常编译和运行需要考虑的事情
ABI 规范了 编译 和 运行
编译时,
.so存放位置属于abi规定的范围,用于编译时连接
运行时
存放参数和结果的位置属于abi规定的范围,
被调用程序的跳转地址或者中断号码也是abi规定的范围。//如果存取参数、结果的位置没有明确的规范,或者调用、被调用双方没有遵照统一个规范,那么这个调用能够根本就不可能成功
ABI是一种标准,OABI 和EABI 分别是标准的不同实现(都是ARM相关的,OABI是老实现,EABI是新实现)
x86及其他架构也有对ABI的实现,甚至powerpc也实现了一个ABI,名字也叫做EABI(和ARM的EABI一点关系都没有)
EABI
Embedded application binary interface, 即嵌入式应用二进制接口,
是描述可连接目标代码,库目标代码,可执行文件影像,如何连接,执行和调试,以及目标代码生成过程的规范.
是c,c++语言接口的规范
是编译连接工具的基础规范
arm的EABI迄今为止没有完全订好。
EABI的组成部分
过程调用规范
可执行文件格式规范
c/c++ ABI规范
调试格式规范
What is EABI?
GNU EABI is a new application binary interface (ABI) for Linux. It is part of a new family of ABI's from ARM� Ltd. known in the arm-linux community as EABI (or sometimes Embedded ABI).
How do I use EABI?
To use EABI, you'll need:
A linux kernel that supports EABI. All BitsyG5 kernels and boards that run the latest 2.6 kernel are configured with EABI support enabled. You can boot these kernels from an ATA flash card or on-board flash just as you would our regular kernels.
An EABI root file system based on ADS' new Debian port which is available for download here.
You can install this root on an NFS server or harddrive, just as you would our regular full Debian distribution.
The root file system includes an arm-linux-gnueabi toolchain which you can use to recompile your own source code.
// https://developer.android.google.cn/ndk/guides/abis
// https://www.jianshu.com/p/59f7c41085d0
上一篇: 总结(一)
下一篇: 返璞归真:PHP中面向过程的装饰模式实现
推荐阅读
-
ARM创始人谈华为被禁:长期将伤害ARM、谷歌及美国工业
-
零基础入门篇之Linux及Arm-Linux程序开发笔记
-
Linux下编译ffmpeg-4.1,arm32, arm64, x86问题及解决方案
-
ARM-linux与Ubuntu开发工具NFS及流程
-
ARM汇编解决阶乘及大小写转换的问题
-
arm-none-eabi-gcc 报错 undefined reference to `_exit'解决方案
-
Android app开发中获取cpu arm架构信息及执行shell命令方法
-
交叉编译生成ARM汇编和反汇编二进制文件生成ARM汇编(指定ARM架构及cpu类型)...
-
嵌入式linux-ARM体系结构及接口技术,ARM中断机制,外部中断的配置,协处理器指令修改异常向量表起始地址,清中断标志
-
嵌入式linux-ARM体系结构及接口技术,ARM波形控制,PWM配置