本帖最后由 lonerzf 于 2014-1-3 07:51 编辑
本文总结自以下几篇相关文献资料,如有出入,请以原文为准。
参考文章:
https://blogs.oracle.com/jtc/entry/is_it_armhf_or_armel
https://wiki.debian.org/ArmHardFloatPort
http://www.memetic.org/raspbian-benchmarking-armel-vs-armhf/
Beaglebone Black是使用了AM3359芯片,属于armv7架构,这个应该都清楚。
出于种种原因,如低功耗、封装限制等原因,之前ARM架构的一些处理器因为内部资源宝贵,加入浮点运算单元是十分奢侈的,额外的软件仿真是必需的。随着科技的进步,目前的高端ARM处理器具备了硬件执行浮点操作的能力,这两种架构之间的差异就产生了两个不同的嵌入式应用程序二进制接口——软浮点与矢量浮点(VFP)。但是软浮点(soft float)和硬浮点(hard float)之间有向前兼容却没有向后兼容的能力,也就是软浮点的二进制接口(EABI)仍然可以用于当前的高端ARM处理器。
之前EABI中,armel(低端ARM硬件,支持armv4以上版本),在执行浮点运算之前,浮点参数必须首先通过整数寄存器,然后传递到浮点运算单元。新的EABI ,也就是armhf,通过直接传递参数到浮点寄存器优化了浮点运算的调用约定。
相比我们熟悉的armel,armhf代表了另一种不兼容的二进制标准。在一些社区的支持下,armhf目前已经得到了很大的发展。像Ubuntu,已经计划在之后的发行版中放弃armel,转而支持armhf编译的版本。正如目前依然很火热的Raspberry Pi,由于ubuntu只支持armv7架构的编译,Raspberry Pi将不能直接安装ubuntu系统。而我们使用的BB Black则同时支持ubuntu的armel与armhf的编译。
以上就是armel与armhf的比较。相信大家也应该有个大概的了解了。在Ubuntu系统下,可根据不同需求分别实现两种交叉编译器的安装。
1) arm-linux-gnueabi的安装
- sudo apt-get install gcc-arm-linux-gnueabi #注意是ubuntu12.04版本的,如之前命令无效,试试 apt-get install gcc-4.6-arm-linux-gnueabi .
复制代码
按操作下载即可,没啥好说的。
2) arm-linux-gnueabihf的安装
这个也方便,linaro开源组织有相关的
交叉工具链下载。点击进入网页选择下载即可。也可以获取我已经下载好的
资源中心下载。
然后就是解压到自定义目录中,并添加bin环境变量。不清楚的参照我的另一帖子,
环境变量的设置。
有的人可能会问,怎么知道自己是要 arm-linux-gnueabihf还是 arm-linux-gnueabi呢?用这个楼主就不知道了,自己把握吧,一般咱们直接用arm-linux-gnueabihf就行啦。虽然我的机子上用arm-linux-gnueabi 编译略快一些。。。
好了,就到这里吧,祝论坛更红火,大家新年快乐!