ABI 及 ARM EABI

  • 简单介绍
ABI : application binary interface
ABI : 是规范.
	各个架构,arm32/arm64/x86/x86_64/riscv 都有自己的ABI

arm32 的 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的文件格式, 内容, 以及装载/卸载程序的要求, 函数调用的参数传递规则, 寄存器, 堆栈的使用,以及系统调用时 syscall number 的放置



程序正常编译和运行需要考虑的事情
	在编译的时候
		一个应用程序,调用了.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

你可能感兴趣的:(杂七杂八总览,arm,arm开发,linux)