ARM工具鏈選擇參考


 

ARM相關工具鏈發布主要有ARM、Linaro、Codesourcery。

1. 命名規則

交叉編譯工具鏈的命名規則為:arch [-vendor] [-os] [-(gnu)eabi]

  • arch - 體系架構,如arm、aarch64
  • vendor - 工具鏈提供商,none。
  • os - 目標操作系統,linux適用於Linux OS。
  • eabi - 嵌入式應用二進制接口(Embedded Application Binary Interface);gnu表示使用glibc

1.1 abi和eabi

ABI:二進制應用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在計算機中,應用二進制接口描述了應用程序(或者其他類

型)和操作系統之間或其他應用程序的低級接口。

EABI:嵌入式ABI。嵌入式應用二進制接口指定了文件格式、數據類型、寄存器使用、堆積組織優化和在一個嵌入式軟件中的參數的標准約定。開發

者使用自己的匯編語言也可以使用 EABI 作為與兼容的編譯器生成的匯編語言的接口。

兩者主要區別是,ABI是計算機上的,EABI是嵌入式平台上(如ARM,MIPS等)。

1.2 gnueabi和gnueabihf

在debian源里這兩個交叉編譯器的定義如下:

gcc-arm-linux-gnueabi – The GNU C compiler for armel architecture

gcc-arm-linux-gnueabihf – The GNU C compiler for armhf architecture

可見這兩個交叉編譯器適用於armel和armhf兩個不同的架構, armel和armhf這兩種架構在對待浮點運算采取了不同的策略(有fpu的arm才能支持這兩種浮點運算策略)

其實這兩個交叉編譯器只不過是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. 實例

arm-linux-gnueabihf-:ARM32架構;編譯目標運行於Linux上;嵌入式,默認支持armhf,使用glibc。

arm-none-linux-gnueabihf-:ARM架構;沒有特定廠商;編譯目標運行在Linux操作系統上,linux kernel、linux app、uboot等;基於gcc使用glibc庫,嵌入式平台;默認支持armhf。

aarch64-linux-gnu-:ARM64架構;編譯目標運行於Linux上;使用glibc。

arm-none-uclinuxeabi-:ARM架構;沒有特定廠商;用於UCLinux操作系統;使用glibc。

aarch64-linux-gnu-:ARM64架構;編譯目標運行在Linux操作系統上;使用glibc。

aarch64-none-linux-gnu-:ARM64架構;不特定廠商;運行在Linux操作系統上;使用glibc。

aarch64-none-elf-:ARM64架構,不特定廠商;偏向裸驅系統。

arm-none-eabi-:arm架構;沒有特定廠商;沒有目標操作系統,一般不支持跟操作系統密切相關的函數,比如Cortex-R、Cortex-M。

3. 下載地址

arm-linux-gnueabihf 32-bit Armv7 Cortex-A, hard-float, little-endian Release-Notes Binaries Source
armv8l-linux-gnueabihf 32-bit Armv8 Cortex-A, hard-float, little-endian Release-Notes Binaries Source
aarch64-linux-gnu 64-bit Armv8 Cortex-A, little-endian Release-Notes Binaries Source
    • Latest Bare-Metal Targeted Binary Toolchain Releases 
arm-eabi 32-bit Armv7 Cortex-A, soft-float, little-endian Release-Notes Binaries Source
aarch64-elf 64-bit Armv8 Cortex-A, little-endian Release-Notes Binaries Source


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM