当前位置:   article > 正文

arm交叉编译器

arm交叉编译器

1 编译器选择

arm交叉编译器选择请参考:https://www.cnblogs.com/solo666/p/16405064.html
  • 1

2 编译器

2.1 编译链出处

	免费版目前有三大主流工具商提供,第一是GNU,第二是 Codesourcery ,第三是Linaro。
收费版有ARM原厂提供的armcc,IAR(编译MCU的综合编译环境)提供的编译器等等,这些往往收费较贵。像IAR这类集成工具可以下载破解版使用。
  • 1
  • 2

2.2 命名规则

交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]

  • arch - 体系架构,如ARM,MIPS
  • vendor - 工具链提供商
  • os - 目标操作系统
  • eabi - 嵌入式应用二进制接口(Embedded Application Binary Interface)

根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如
arm-none-eabi:这个是没有操作系统的,自然不可能支持那些跟操作系统关系密切的函数,比如fork(2)。他使用的是newlib这个专用于嵌入式系统的C库,主要是编译不带linux的u-boot等裸机
arm-none-linux-eabi:用于Linux的,使用Glibc

区别无外乎几个:大端 or 小端、ARMv7 or ARMv8、32位 or 64位、裸机 or 嵌入式Linux

2.3 LINARO 下载地址

https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/在这里插入图片描述
适用情况总结如下:
(1)、一般给ARMv8架构的处理器用:
ARM64、小端、裸机工程: aarch64-elf -
ARM64、小端、Linux工程: aarch64-linux-gnu -
ARM64、大端、裸机工程: aarch64_be-elf -
ARM64、大端、Linux工程: aarch64_be-linux-gnu -
特殊版本、ARMv8架构、Linux工程: armv8l-linux-gnueabihf -
(2)、一般给ARMv7架构的处理器用:
ARM32、小端、裸机工程: arm-eabi -
ARM32、小端、Linux工程: arm-linux-gnueabi -
ARM32、小端、Linux工程: arm-linux-gnueabihf -
ARM32、大端、裸机工程: armeb-eabi -
ARM32、大端、Linux工程: armeb-linux-gnueabi -
ARM32、大端、Linux工程: armeb-linux-gnueabihf -

ps: gnueabi和gnueabihf的区别(硬浮点、软浮点):
gcc-arm-linux-gnueabi – The GNU C compiler for armel architecture
gcc-arm-linux-gnueabihf – The GNU C compiler for armhf architecture
可见这两个交叉编译器适用于arm-el和arm-hf两个不同的架构, 在对待浮点运算采取了不同的策略,
其实这两个交叉编译器只不过是gcc的选项-mfloat-abi的默认值不同. gcc的选项-mfloat-abi有三种值soft,softfp,hard
(其中后两者都要求arm里有fpu浮点运算单元,soft与后两者是兼容的,但softfp和hard两种模式互不兼容):
soft : 不用fpu进行浮点计算,即使有fpu浮点运算单元也不用,而是使用软件模式。
softfp : armel架构(对应的编译器为gcc-arm-linux-gnueabi)采用的默认值,用fpu计算,但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。
hard : armhf架构(对应的编译器为gcc-arm-linux-gnueabihf)采用的默认值,用fpu计算,传参数也用fpu中的浮点寄存器传,省去了转换, 性能最好,但是中断负荷高。

2.4 ARM 出品的编译链

2.4.1下载地址
2022版本:
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads
2022之前的版本:
https://developer.arm.com/downloads/-/gnu-a#panel4a
  • 1
  • 2
  • 3
  • 4
2.4.2 下载选项及解释

ARM编译链区别:https://www.jianshu.com/p/40791ed11467
ARM32、小端、裸机工程: arm-none-eabi
ARM32、小端、Linux工程: arm-none-linux-gnueabihf
ARM64、小端、裸机工程: aarch64-none-elf
ARM64、小端、Linux工程: aarch64-none-linux-gnu
ARM64、大端、Linux工程: aarch64_be-none-linux-gnu
以2022版本示例:
(1) WINDOWS
(1.1)适用32位和64位Windows下的 ARM32、小端、裸机工程:
AArch32 bare-metal target (arm-none-eabi)
gcc-arm-11.2-2022.02-mingw-w64-i686-arm-none-eabi.exe

(1.2)适用32位和64位Windows下的 ARM32、小端、Linux工程:
AArch32 GNU/Linux target with hard float (arm-none-linux-gnueabihf)
gcc-arm-11.2-2022.02-mingw-w64-i686-arm-none-linux-gnueabihf.exe

(1.3)适用32位和64位Windows下的 ARM64、小端、裸机工程:
AArch64 bare-metal target (aarch64-none-elf)
gcc-arm-11.2-2022.02-mingw-w64-i686-aarch64-none-elf.exe

(1.4)适用32位和64位Windows下的 ARM32、小端、Linux工程:
AArch64 GNU/Linux target (aarch64-none-linux-gnu)
gcc-arm-11.2-2022.02-mingw-w64-i686-aarch64-none-linux-gnu.exe

(2) LINUX
(2.1) 适用x86-64位Linux下的 ARM32、小端、裸机工程:
AArch32 bare-metal target (arm-none-eabi)
gcc-arm-11.2-2022.02-x86_64-arm-none-eabi.tar.xz
ps:Linux的架构可以通过arch指令查看
在这里插入图片描述
(2.2) 适用x86-64位Linux下的 ARM32、小端、Linux工程:
AArch32 GNU/Linux target with hard float (arm-none-linux-gnueabihf)
gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz

(2.3) 适用x86-64位Linux下的 ARM64、小端、裸机工程:
AArch64 bare-metal target (aarch64-none-elf)
gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar.xz

(2.4) 适用x86-64位Linux下的 ARM64、小端、Linux工程:
AArch64 GNU/Linux target (aarch64-none-linux-gnu)
gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz

(2.5) 适用x86-64位Linux下的 ARM64、大端、Linux工程:
AArch64 GNU/Linux big-endian target (aarch64_be-none-linux-gnu)
gcc-arm-11.2-2022.02-x86_64-aarch64_be-none-linux-gnu.tar.xz

(2.6) 适用AArch64 Linux下的 ARM32、小端、裸机工程:
AArch32 bare-metal target (arm-none-eabi)
gcc-arm-11.2-2022.02-aarch64-arm-none-eabi.tar.xz

(2.7) 适用AArch64 Linux下的 ARM32、小端、Linux工程:
AArch32 GNU/Linux target with hard float (arm-none-linux-gnueabihf)
gcc-arm-11.2-2022.02-aarch64-arm-none-linux-gnueabihf.tar.xz

(2.8) 适用AArch64 Linux下的 ARM64、小端、裸机工程:
AArch64 ELF bare-metal target (aarch64-none-elf)
gcc-arm-11.2-2022.02-aarch64-aarch64-none-elf.tar.xz

(3) macOS
(3.1) 适用macOS (x86_64)下的 ARM32、小端、裸机工程:
AArch32 bare-metal target (arm-none-eabi)
gcc-arm-11.2-2022.02-darwin-x86_64-arm-none-eabi.tar.xz

(3.2) 适用macOS (x86_64)下的 ARM64、小端、裸机工程:
AArch64 bare-metal target (aarch64-none-elf)
gcc-arm-11.2-2022.02-darwin-x86_64-aarch64-none-elf.tar.xz

2.5 工具链选择

  • 在Linux上编译ARM32裸机程序
    Linaro:gcc-linaro-7.5.0-2019.12-x86_64_arm-eabi.tar.xz
    ARM:gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
  • 在Linux上编译ARM32 Linux程序
    Linaro:gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
    ARM:gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz
  • 在Linux上编译ARM64裸机程序
    Linaro:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-elf.tar.xz
    ARM:gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar.xz
  • 在Linux上编译ARM64 Linux程序
    Linaro:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
    ARM:gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz
  • 在Windows上编译ARM32裸机程序
    Linaro:gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-eabi.tar.xz
    ARM:gcc-arm-none-eabi-10.3-2021.10-win32.exe
  • 在Windows上编译ARM32 Linux程序
    Linaro:gcc-linaro-7.5.0-2019.12-i686-mingw32_arm-linux-gnueabihf.tar.xz
    ARM:gcc-arm-11.2-2022.02-mingw-w64-i686-arm-none-linux-gnueabihf.zip
  • 在Windows上编译ARM64裸机程序
    Linaro:gcc-linaro-7.5.0-2019.12-i686-mingw32_aarch64-elf.tar.xz
    ARM:gcc-arm-11.2-2022.02-mingw-w64-i686-aarch64-none-elf.zip
  • 在Windows上编译ARM64 Linux程序
    Linaro:gcc-linaro-7.5.0-2019.12-i686-mingw32_aarch64-linux-gnu.tar.xz
    ARM:gcc-arm-11.2-2022.02-mingw-w64-i686-aarch64-none-linux-gnu.zip

3 ARM架构 与 ARM处理器 对应表

https://infogalactic.com/info/List_of_ARM_microarchitectures
https://wikimili.com/en/List_of_ARM_microarchitectures
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/282346
推荐阅读
相关标签
  

闽ICP备14008679号