C++学习(一七八)Android的arm64-v8a、armeabi-v7a、armeabi、x86

armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
x86: 平板、模拟器用得比较多。
x86_64: 64位的平板。

Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。

应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。在Android系统上,每一个CPU架构对应一个ABI:armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64。

ARMv8A分为A64及A32两个部分,A64顾名思义属于64bit的部份,主要存在于AARCH64的状态。而A32又称AARCH32状态,用作支持现有A32 ARM指令集。ARM并没有采用AMD x86-64及Intel EM64T扩充32bit指令做法,而是选择全新开发专用的64bit指令。据ARM方面表示,这一做法与省电的考虑有关,当运行64bit ISA时,ARMv7电路可处于闲置状态,节省功耗。同A64 ISA也移除了作用不大的LDM/STM(load/store multiple)指令,改为LD/ST ’P’指令,以降低复杂性及功耗,与此同时,32bit到64bit状态转换采用Inter-processing的做法,确保32bit到64bit指令皆可顺利执行。

armv8A架构又细分为armv8.2a、armv8.3a、armv8.4a、armv8.5a。

在今年的Computex上arm公布了2018年的Cortex-A旗舰CPU,Cortex-A76. 这个CPU的微构架做了彻底的重新设计,它重点提高了峰值性能,同时良好地保持了性能功耗比。Cortex-A76将arm CPU的性能推上了一个新高度。Cortex-A76还是armv8.2-a构架实现,与现有的处理兼容,还是使用DSU技术,到时微构架的重新设计使得它比Cortex-A75平均有35%的性能提升,且有40%的能耗比提升。对浮点数和机器学习运算任务提升最大。麒麟980用的性能核心就是公版Cortex-A76.

Cortex-A76是第一个开始逐渐去除32bit支持的CPU。A76还是支持aarch32,但是只是在最低特权级的EL0支持,而aarch64在EL0-EL3都支持-从OS到底层的固件。在将来某个时候,arm非常有可能完全只支持64 bit,这取决于arm生态系统的发展。

停留在arm-v7a一般为了减少安装包大小,因为如果加上arm64-v8a安装包会大很多。如果只用arm64-v8a则旧一点的手机用不了,但是因为能用arm64-v8a的手机也能用arm-v7a

Android 设备的CPU类型(通常称为”ABIs”)

Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。

ARM :
是嵌入式中的一种架构,全称为Advanced RISC Machine,可以理解为ARM处理器。

ABI(Application Binary Interface):
应用程序二进制接口 描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口。

EABI(Embedded application binary interface)

嵌入式应用二进制接口,是描述可连接目标代码,库目标代码,可执行文件影像,如何连接,执行和调试,以及目标代码生成过程,和c, c++语言接口的规范,是编译连接工具的基础规范,也是研究它们工作原理的基础

ABI和CPU关系:
大部分cpu都支持多于一种的ABI。

ABI目录(横向)和cpu(纵向)armeabiarmeabi-v7aarm64-v8amipsmips64x86x86_64
ARMv5支持
ARMv7支持支持
ARMv8支持支持支持
MIPS支持
MIPS64支持支持
x86支持支持支持
x86_64支持支持支持

x86设备上,选择ABI的优先级

  1. libs/x86目录中如果存在.so文件的话,会被安装。
  2. 如果不存在,则会选择armeabi-v7a中的.so文件。
  3. 如果也不存在,则选择armeabi目录中的.so文件。

arm设备上CPU 是armabi-v8a,ABI的优先级

  1. 如果手机CPU 是armabi-v8a,优先选择armabi-v8a中的.so文件。
  2. 如果不存在,则会选择armeabi-v7a中的.so文件。
  3. 如果也不存在,则选择armeabi目录中的.so文件。

arm设备上CPU 是armabi-v7a,ABI的优先级

  1. 如果手机CPU 是armabi-v7a,优先选择armabi-v7a中的.so文件。
  2. 如果不存在,则会选择armeabi中的.so文件。


版权声明:本文为hankern原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。