赞
踩
arm交叉编译器选择请参考:https://www.cnblogs.com/solo666/p/16405064.html
免费版目前有三大主流工具商提供,第一是GNU,第二是 Codesourcery ,第三是Linaro。
收费版有ARM原厂提供的armcc,IAR(编译MCU的综合编译环境)提供的编译器等等,这些往往收费较贵。像IAR这类集成工具可以下载破解版使用。
交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]
根据对操作系统的支持与否,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
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中的浮点寄存器传,省去了转换, 性能最好,但是中断负荷高。
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
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
https://infogalactic.com/info/List_of_ARM_microarchitectures
https://wikimili.com/en/List_of_ARM_microarchitectures
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。