王彦为

聚沙成塔
  1. 首页
  2. 嵌入式
  3. 正文

玩转DragronBoard 410c系列之五:ARM交叉编译工具链介绍

2020-09-24 5796点热度 2人点赞 5条评论

交叉编译

交叉编译是在一个平台上生成另一个平台上的可执行代码,例如在x86 Windows上开发,运行在x86 Linux系统上,或者在x86 Linux上开发,运行在ARM Linux上。

工具链分类

从授权上,分为付费授权版和免费授权版,免费授权版目前有三大主流供应商提供
1、GNU(提供源码,自行编译制作)
2、Codesourcery
3、Linora (提供源码,和已经编译好的release binrary)
除了这三大主流供应商外,嵌入式板厂家也会提供自己的工具链,例如FriendlyARM、天嵌等。现在ARM平台上用的最广泛的工具链是Linaro发布的,所以就简单介绍下。
gcc 8之前的版本可以在linaro官网下载,gcc 8以后的版本只能在ARM官网下载,无论打开哪个网站,密密麻麻的那么多链接,不知道该如何选择,下面我来介绍下工具链的命名规则。

 工具链名称适用范围功能说明
1arm-linux-gnueabihf
arm-none-linux-gnueabihf
32-bit Armv7 Cortex-A, hard-float, little-endian编译ARM架构的boot、kernel、Application等
2armv8l-linux-gnueabihf32-bit Armv8 Cortex-A, hard-float, little-endian
3aarch64-linux-gnu
aarch64-none-linux-gnu
64-bit Armv8 Cortex-A, little-endian
4arm-eabi
arm-none-eabi
32-bit Armv7 Cortex-A, soft-float, little-endian
Cortex-R
Cortex-M
编译ARM架构的裸机系统(包括boot、kernel, 不适用编译Application)
5aarch64-elf
aarch64-none-elf
64-bit Armv8 Cortex-A, little-endian

这里对命名规则有个大致的概念,aarch64-linux-gnu是gcc 8之前版本的命名,aarch64-none-linux-gnu是gcc 8之后的命名,aarch64是针对64位的芯片,例如Cortex-A76。表格中还提到了Armv7和Armv8,这里指的是ARM芯片的架构,其中Armv8是2011年11月份推出来的,是目前最新的架构,接下来我们顺便介绍下ARM家族。

ARM公司简介

ARM公司在1991年成立于英国剑桥,主要出售芯片设计技术的授权。2016年7月被日本软银以约320亿美元收购,2020年9月份被美国英伟达公司收购(目前交易是否通过还不确定)。ARM公司只出售芯片技术的授权,不生产和销售芯片。华为、苹果、高通是它的客户,华为等厂商通过ARM的架构授权,设计芯片,然后交给台积电等制造商生产。举个例子,华为麒麟990芯片,是基于ARM Cortex-A76开发的,高通骁龙865是基于ARM Cortex-A77开发的,苹果的A14芯片虽然是自研的,未使用ARM公版的架构,但是仍然绕不开ARM,依然需要交专利费。

ARM芯片种类

ARM发展近30年,目前最新的架构是ARMv9。ARM为低功耗而生,过去30年,基于RISC指令集的ARM芯片在各个领域获得广泛的成功。尤其是移动设备领域,占据了95%的市场份额。但是ARM的野心不止于此,ARM芯片也已经悄悄渗透到PC领域和服务器领域,这些领域一直是Intel的天下。为了更精准的响应市场的需求,从ARMv7开始,ARM将其架构分为三个品类,分别是:

 说明体系架构家族
Cortex A系列针对Application,适用于追求高性能的场景,比如移动领域(手机)或者企业领域(服务器)Armv7-ACortex-A5、Cortex-A7、Cortex-A9、Cortex-A15、Cortex-A17
Armv8-ACortex-A32、Cortex-A34、Cortex-A35、Cortex-A53、Cortex-A55、Cortex-A57、Cortex-A65、Cortex-A65AE、Cortex-A72、Cortex-A73、Cortex-A75、Cortex-A76
Armv9-A
Cortex R系列针对Real-time,适用于车用以及工业控制领域Cortex-R4、Cortex-R5、Cortex-R7、 Cortex-R8、Cortex-R52
Cortex M系列针对Microcontroller,适用于微控制器领取Armv6-MCortex-M0、Cortex-M0+、Cortex-M1
Armv7-MCortex-M3、Cortex-M4、Cortex-M7
Armv8-MCortex-M23 、Cortex-M33、Cortex-M35P
Armv8.1-MCortex-M55

AArch32和AArch64

ARMv7架构是32位的,一经问世,就大受欢迎。随着科技的进步,32位已经不能满足市场的需求了。2011年11月,ARM公司发布了新一代处理器架构ARMv8的部分技术细节,这是ARM公司的首款支持64位指令集的处理器架构。由于基于32位ARMv7架构的Cortex系列大受欢迎,因此新架构(指ARMv8)不能推倒重来另起炉灶,必须兼容ARMv7架构中的主要特性。为了兼容32位程序,新架构将运行状态分成AArch64和AArch32两种状态。AArch64就是64位指令集的运行态,而AArch32是兼容Arm-v7a的状态,所有Arm-v7a以及更早的软件都可以在这个状态上正常运行。对于应用程序来说,由于EL0没有权限进行AArch64和AArch32状态切换的,因此只能一条道走到黑地用一种态。这也是AArch64与AArch32使用各自独立指令集的原因,两种状态下的指令集保持着井水不犯河水的“克制”。

标签: 暂无
最后更新:2022-03-31

王彦为

新生代农民工,十年医疗器械行业从业经验,现居苏州。爱生活,爱做梦。

打赏 点赞
< 上一篇
下一篇 >

文章评论

  • Diane2602

    <a href="https://shorturl.fm/FIJkD">https://shorturl.fm/FIJkD</a&gt;

    2025-05-25
    回复
  • Crystal1139

    <a href="https://shorturl.fm/FIJkD">https://shorturl.fm/FIJkD</a&gt;

    2025-05-25
    回复
  • Albert1673

    <a href="https://shorturl.fm/m8ueY">https://shorturl.fm/m8ueY</a&gt;

    2025-05-25
    回复
  • Adelyn4804

    <a href="https://shorturl.fm/TbTre">https://shorturl.fm/TbTre</a&gt;

    2025-05-25
    回复
  • Angelina2911

    Awesome <a href="https://shorturl.fm/5JO3e">https://shorturl.fm/5JO3e</a&gt;

    2025-05-24
    回复
  • 取消回复

    COPYRIGHT © 2022 王彦为. ALL RIGHTS RESERVED.

    苏ICP备16063331号-1

    苏公网安备32050702011313号