本文译至:https://blogs.oracle.com/jtc/entry/is_it_armhf_or_armel

ARM处理器有各种品牌和规格,其中一部分的原因涉及到市场问题,成本,大小和功耗的要求是非常宝贵的。在这个前提下,甚至包含一个浮点单元也被认为是不必要的奢侈品。为了在这些处理器上执行浮点运算,软件模拟是必需的。 

更高端的ARM处理器都捆绑浮点运算硬件的附加功能。这两种架构之间的差异产生了针对ARM的两个不同的EABI(嵌入式应用程序二进制接口):软浮点和VFP(向量浮点)。虽然在软硬浮点之间具备前向兼容性,但不存在后向兼容性。事实上,当为ARM嵌入式Java SE提供二进制文件时,Oracle提供了两个独立的选择:一个软浮点二进制和一个VFP二进制。在Linux社区,基于这两个EABI的发布均称为是基于armel发布的。 

进入armhf后,虽然在性能上迈出了一大步,但VFP EABI在浮点运算时使用了非最优的参数传递方式。在这种情况下,浮点参数在浮点运算单元执行之前必须首先通过整数寄存器传递。新EABI,指的是armhf优化了调用约定,将参数直接传递到浮点寄存器浮点运算。它还包括一个更有效的系统调用约定。最终的结果是用armhf标准编译的程序在一些情况下表现出一定的性能改善,而在浮点密集型应用程序上表现出显著的改进。

同时,armhf代表了另一种二进制不兼容的标准,但是在社区已经获得了相当的牵引力。虽然还相对较早,但从armel到armhf的过渡正在进行中。事实上,Ubuntu已经已经宣布,未来的版本将只构建在armhf标准之上,并有效地淘汰armel。正如Henrik Stahl的博客提到的,Java SE Embedded的一个armhf版本正在进行中,我们已经完成了以基于armhf的JDK8 JavaFX 开发者预览版。 

在此期间,我们将不得不面对armel和armhf之间的不兼容问题。最近,我们已经看到了一些轻率的错误尝试,他们试图在基于armhf 的Linux发行版上运行的ARMv7 VFP的Java SE Embedded。 在诊断过程中,问题就变成了,我怎么能确定我的Linux发行版是基于armel或是armhf?原来这不是像人们想象的那样简单。除了经验和传闻,来确定你是否在armel或armhf运行的一种可能的方式是运行以下晦涩的命令:

pi@raspberrypi:~$ readelf -A /proc/self/exe | grep Tag_ABI_VFP_args

Tag_ABI_VFP_args: VFP registers

如果找到Tag_ABI_VFP_args标签,那么你是在一个armhf系统上运行。如果没有返回,那么它是armel。

为了向你展示一个例子,这里有一个运行Raspbian发行版的树莓派上的结果: 

pi@raspberrypi:~$ readelf -A /proc/self/exe | grep Tag_ABI_VFP_args
  Tag_ABI_VFP_args: VFP registers

这表示是一个armhf发行版,这实际上就是Raspbian。

在原有的,软浮点Debian Wheezy 发行版上,结果如下:

pi@raspberrypi:~$ readelf -A /proc/self/exe | grep Tag_ABI_VFP_args
没有返回表明这的确是armel。 

参考链接:http://blog.csdn.net/robertsong2004/article/details/38776457

是armhf,还是armel?的更多相关文章

  1. armel和armhf区别

    出于低功耗.封装限制等种种原因,之前的一些ARM架构处理器因为内部资源宝贵,加入浮点运算单元是十分奢侈的,因为需要额外的软件实现.之前的ARM处理器架构是什么样的?(http://www.cnblog ...

  2. 0x00-Kali Linux 系列入门篇

    Kali Linux介绍篇 Kali Linux 官网:https://www.kali.org/ Kali Linux 前身是著名渗透测试系统BackTrack ,是一个基于 Debian 的 Li ...

  3. 【转帖】ARM的两种不同的CPU docker 应该也是支持arm的

    armel和armhf区别选择 知识经验  3年前 (2014-11-07)  20603浏览  1评论 目录 fpu单元 armel与armhf 安装armel和armhf arm-linux-gn ...

  4. Docker inside Docker 基于 Alpine Linux

    Study From https://hub.docker.com/_/docker/ 感慨一句 这些人真牛B .. 简单测试 拉取镜像 docker pull docker:dind 运行镜像 do ...

  5. Kali Linux介绍篇

    Kali Linux 官网:https://www.kali.org/ Kali Linux 前身是著名渗透测试系统BackTrack ,是一个基于 Debian 的 Linux 发行版,包含很多安全 ...

  6. armel、armhf和arm64

    1 这些名词是什么的缩写 1.1 armel 是arm eabi little endian的缩写.eabi是软浮点二进制接口,这里的e是embeded,是对于嵌入式设备而言. 1.2 armhf 是 ...

  7. [转帖]armel、armhf和arm64

    armel.armhf和arm64 转帖 1 这些名词是什么的缩写 1.1 armel 是arm eabi little endian的缩写.eabi是软浮点二进制接口,这里的e是embeded,是对 ...

  8. 瞎折腾实录:构建 Armel 版本的 .NET Core 教程和资料资源

    目录 首先我要说明,我失败了~ 我把我的进度和经验放出来,希望能够帮助别人完成编译工作~ 背景:最近接手一个华为某型号的嵌入式设备,需要在上面搭建 .NET Core 环境. 设备是 Armel 架构 ...

  9. qemu ubuntu for zynq(armhf)

    apt-get install qemu-user-static qemu-system mkdir qemu-ubuntu qemu-debootstrap --arch=armhf trusty ...

随机推荐

  1. initializer_list 列表初始化

    initializer_list 列表初始化 用花括号初始化器列表初始化一个对象,其中对应构造函数接受一个 std::initializer_list 参数. #include <iostrea ...

  2. Golang入门教程(四)变量声明

    Go 语言变量名由字母.数字.下划线组成,其中首个字母不能为数字. 一.Go的语言结构 1.Go的语言基础部分由这几个部分组成 包声明 引入包 函数 变量 语句&表达式 注释 比如下面这个简单 ...

  3. ajax、fetch、axios — 请求数据

    jquery ajax jq 的ajax是对原生XHR的封装,除此以外还增添了对JSONP的支持.用起来非常方便 用法: $.ajax({ url:发送请求的地址, data:数据的拼接,//发送到服 ...

  4. C#利用Guid实现真随机数

    C#中的随机数可以利用Random类很简单地生成随机数,代码如下: Random rdmNum=new Random();//生成随机数对象 int ans=rdmNum.Next(a,b);//生成 ...

  5. WeUI0.6.0有一个Calendar在浏览器下无法直接打开问题

    主要原因是判断浏览器不支持导致.修改isPopover相关部分代码即可.

  6. 十一、移植优化---CONFIG 优化进 menuconfig(2)

    11.3 jz2440.h 中的剩余宏移植 11.3.1 CONFIG_SYS_TEXT_BASE CONFIG_SYS_TEXT_BASE:设置系统代码段的基地址,设为 0x0:menuconfig ...

  7. ubuntu18.04中安装和卸载cuDNN

    udnn安装注意点: cudnn的安装其实很简单,关键点是一定要安装cuda对应的cudnn包,本机中安装的cuda7.5所以对应的cudnn为v5.1这很重要,我就是安装错了版本,导致后面caffe ...

  8. Windows代替touch命令

    Windows 代替Linux中的touch命令: echo >

  9. 4-13 object类,继承和派生( super) ,钻石继承方法

    1,object 类 object class A: ''' 这是一个类 ''' pass a = A() print(A.__dict__) # 双下方法 魔术方法 创建一个空对象 调用init方法 ...

  10. Expression知识

    http://www.cnblogs.com/Ninputer/archive/2009/08/28/expression_tree1.html#!comments