文档章节

armel和armhf

v
 vnexus
发布于 2015/06/15 14:32
字数 1012
阅读 3
收藏 0

出于低功耗、封装限制等种种原因,之前的一些ARM架构处理器因为内部资源宝贵,加入浮点运算单元是十分奢侈的,因为需要额外的软件实现。随着技术发展,目前高端的ARM处理器已经具备了硬件执行浮点操作的能力。这样新旧两种架构之间的差异,就产生了两个不同的嵌入式应用程序二进制接口(EABI)——软浮点与矢量浮点(VFP)。但是软浮点(soft float)和硬浮点(hard float)之间有向前兼容却没有向后兼容的能力,也就是软浮点的二进制接口(EABI)仍然可以用于当前的高端ARM处理器

fpu单元

在ARM体系架构内核中,有些有浮点运算单元(fpu),有些没有。对于没有fpu内核,是不能使用armel和armhf的。在有fpu的情况下,就可以通过gcc的选项-mfloat-abi来指定使用哪种,有如下三种值:

  • soft:不用fpu计算,即使有fpu浮点运算单元也不用。

  • armel:也即softfp,用fpu计算,但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。

  • armhf:也即hard,用fpu计算,传参数用fpu中的浮点寄存器传,省去了转换性能最好,但是中断负荷高。

kernel、rootfs和app编译的时候,指定的必须保持一致才行。

使用softfp模式,会存在不必要的浮点到整数、整数到浮点的转换。而使用hard模式,在每次浮点相关函数调用时,平均能节省20个CPU周期。对ARM这样每个周期都很重要的体系结构来说,这样的提升无疑是巨大的。

在完全不改变源码和配置的情况下,在一些应用程序上,虽然armhf比armel硬件要求(确切的是指fpu硬件)高一点,但是armhf能得到20-25%的性能提升。对一些严重依赖于浮点运算的程序,更是可以达到300%的性能提升。

armel与armhf

之前EABI中,armel(低端ARM硬件,支持armv4以上版本),在执行浮点运算之前,浮点参数必须首先通过整数寄存器,然后传递到浮点运算单元。新的EABI ,也就是armhf,通过直接传递参数到浮点寄存器优化了浮点运算的调用约定。

相比我们熟悉的armel,armhf代表了另一种不兼容的二进制标准。在一些社区的支持下,armhf目前已经得到了很大的发展。像Ubuntu,已经计划在之后的发行版中放弃armel,转而支持armhf编译的版本。正如目前依然很火热的Raspberry Pi(ARM11),由于ubuntu只支持armv7架构的编译,Raspberry Pi将不能直接安装ubuntu系统。而BB Black(Cortex-A8)和Cubietruct(Cortex-A7)则同时支持ubuntu的armel与armhf的编译。

安装armel和armhf

以上就是armel与armhf的比较。相信大家也应该有个大概的了解了。在Ubuntu系统下,如何根据需求分别实现两种交叉编译器的安装呢?

arm-linux-gnueabi的安装

sudo apt-get install gcc-arm-linux-gnueabi

按操作下载即可,没啥好说的。

 arm-linux-gnueabihf的安装

两种方法,

  1. linaro开源组织有相关的交叉工具链下载,点击进入网页选择下载即可,地址:https://launchpad.net/linaro-toolchain-binaries

  2. 或者:http://www.veryarm.com/arm-linux-gnueabihf-gcc

然后就是解压到自定义目录中,并添加bin环境变量。

armhf 使用

armhf的开启需要硬件的支持,在Debian的wiki上要求ARMv7 CPU、Thumb-2指令集以及VFP3D16浮点处理器。

在gcc的编译参数上,使用-mfloat-abi=hard -mfpu=vfp即可。

在工具上,CodeSourcery最早支持hard模式。或者,也可已自己编译工具链。

 

文章来自VeryARM:http://www.veryarm.com/872.html


本文转载自:http://www.veryarm.com/872.html

v
粉丝 1
博文 6
码字总数 136
作品 0
新余
私信 提问
在Debian中建立Beaglebone black的应用开发环境之三:cross-toolchain的安装

接着说第二个方面,安装cross-toolchain,注意,我前面说过,我不会说使用SDK来安装,我从头讲自己怎么建立一个cross-toolchain。以下都基于此。 一、cross-toolchain有哪几种? 适用用BBB的...

robeermy_cn
2014/03/13
1K
2
交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别

自己之前一直没搞清楚这两个交叉编译器到底有什么问题,特意google一番,总结如下,希望能帮到道上和我有同样困惑的兄弟..... 原文链接http://www.hi-beiyu.com/archives/312 一. 什么是ABI和E...

cubieboard
2014/08/10
751
0
分享Kali Linux 2016.2第48周镜像文件

分享Kali Linux 2016.2第48周镜像文件 Kali Linux官方于11月27日发布Kali Linux 2016.2的第48周镜像。这次延续以往规律,仍然是11个镜像文件。默认的Gnome桌面的4个镜像,E17、KDE、LXDE、M...

大学霸
2016/11/28
26
0
分享Kali Linux 2016.2第47周镜像

分享Kali Linux 2016.2第47周镜像 Kali Linux官方于11月20日发布Kali Linux 2016.2的第47周镜像。这次发布仍然包含11个镜像文件。其中,不仅包含Gnome桌面的32位和64位的四个镜像,还包括E17...

大学霸
2016/11/21
36
0
Debian Installer 8.0 Jessie Beta 1 发布

Debian 8.0 Jessie 发布 Beta 1。2014-08-14.这是8.0第二个开发版。上个版本是 2014-03-20 的 Alpha1,正式版将在2015年发布。(7.0 wheezy是2013-05-05发布的。一般2年一个版本)。遗留版本...

fei
2014/08/18
2.6K
3

没有更多内容

加载失败,请刷新页面

加载更多

深入理解表单脚本系列第二篇——表单字段

本文转载于:专业的前端网站➜深入理解表单脚本系列第二篇——表单字段 前面的话   表单字段又叫表单元素,表示表单所包含控件,如<input>、<select>等。本文将详细介绍表单字段的内容 访问...

前端老手
10分钟前
1
0
前端技术之:常用webpack插件

1、html-webpack-plugin Simplifies creation of HTML files to serve your webpack bundles. 主页地址: https://github.com/jantimon/html-webpack-plugin 安装方法: npm i --save-dev h......

popgis
15分钟前
4
0
IT兄弟连 HTML5教程 HTML5表单 多样的输入类型1

HTML5拥有多个新的表单输入类型,这些新特性提供了更好的输入控制和验证。并不是所有的主浏览器都支持新的input类型,不过我们可以在所有的主浏览器中使用它们,即使不被支持,仍然可以显示为...

老码农的一亩三分地
16分钟前
2
0
规则引擎

解决问题 版本迭代速度更不上业务变化,但是若多个业务同时变化,除了为每个业务设计专属配置项也不利于操作。就想服务接口单纯化,将复杂多变的业务逻辑交给规则引擎,让用户在web端或cs端自...

无极之岚
54分钟前
7
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
今天
601
10

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部