armシリーズのクロスコンパイラのバージョン間の違い

クロス コンパイラの命名規則

クロス コンパイラの命名規則: arch [-vendor] [-os] [-(gnu)eabi] [-language]

  • arch - arm (ARM-32bit)、aarch64 (ARM-64bit)、x86 などのアーキテクチャ。
  • vendor - ツールチェーン プロバイダー。多くの場合、省略されるか、なしに置き換えられます。
  • os - Linux などのターゲット オペレーティング システム。特定の OS がない場合は、代わりに none を使用します。また、代わりに none を使用するベンダーや OS はありません。
  • eabi - 組み込みアプリケーション バイナリ インターフェイス
  • language - gcc、g++ などのコンパイル済み言語

特定のコンパイラの例

crosstool-ng クロス コンパイル ツールのサンプル

クロスコンパイル ツールチェーンを作成するcrosstool-ngの公式 Web サイトには、上記の命名規則に従って名前が付けられたクロスコンパイル ツールのサンプルが多数リストされています。

aarch64-ol7u9-linux-gnu
aarch64-ol8u6-linux-gnu
aarch64-ol8u7-linux-gnu
aarch64-rpi3-linux-gnu
aarch64-rpi4-linux-gnu
aarch64-unknown-linux-gnu
aarch64-unknown-linux-uclibc
arm-bare_newlib_cortex_m3_nommu-eabi
arm-cortex_a15-linux-gnueabihf
arm-cortexa5-linux-uclibcgnueabihf
arm-cortex_a8-linux-gnueabi
arm-cortexa9_neon-linux-gnueabihf
arm-multilib-linux-uclibcgnueabi
arm-nano-eabi
arm-none-eabi
arm-ol7u9-linux-gnueabi
arm-ol7u9-linux-gnueabihf
arm-picolibc-eabi
arm-unknown-eabi
arm-unknown-linux-gnueabi
arm-unknown-linux-musleabi
arm-unknown-linux-uclibcgnueabi
arm-unknown-linux-uclibcgnueabihf
x86_64-centos7-linux-gnu
x86_64-multilib-linux-gnu
x86_64-multilib-linux-musl
x86_64-multilib-linux-uclibc
x86_64-multilib-linux-uclibc,moxie-unknown-moxiebox
x86_64-multilib-linux-uclibc,powerpc-unknown-elf
x86_64-ol8u6-linux-gnu
x86_64-ol8u7-linux-gnu
x86_64-pc-linux-gnu,arm-picolibc-eabi
x86_64-ubuntu14.04-linux-gnu
x86_64-ubuntu16.04-linux-gnu
x86_64-unknown-linux-gnu
x86_64-unknown-linux-uclibc
x86_64-w64-mingw32
x86_64-w64-mingw32,arm-cortexa9_neon-linux-gnueabihf
x86_64-w64-mingw32,x86_64-pc-linux-gnu

arm クロスコンパイラの例

  • アーム-なし-eabi-gcc

ARM アーキテクチャ、ベンダーなし、オペレーティング システムをターゲットにしない、ARM EABI(ARM 程序インターフェース)に準拠

ARMアーキテクチャのベアメタルシステム(ARM Linuxブートとカーネルを含む、Linuxアプリケーションのコンパイルには適していません)をコンパイルするために使用され、ARM7、Cortex-M、Cortex-RなどのARM MCUシリーズチップに一般的に使用されます。オペレーティング システム、サポートなし オペレーティング システムに密接に関連するこれらの関数は、組み込みシステム専用の C ライブラリである newlib をインストール方法として使用します。

sudo apt-get install gcc-arm-none-eabi
  • arm-linux-gnueabi-gcc

ARM アーキテクチャ、Linux オペレーティング システムで実行されるバイナリを作成し、GNU EABI (GUN 程序インターフェース) を使用します。

arm-none-linux-gnueabi-gcc とも呼ばれ、当初は発行元がなかったため、現在は Linaro から発行されており、Linux オペレーティング システムを搭載した ARM9、ARM11、Arm Cortex-A シリーズのチップに一般的に使用されています。前者は 32 ビット チップ用で、後者は glibc ライブラリを使用した 64 ビット チップ用です。ベアメタル プログラム、u-boot、Linux カーネル、ファイルシステム、アプリ アプリケーションなど、ARM システム内のすべてのリンクのコードをクロスコンパイルするために使用できます。

sudo apt-get install gcc-arm-linux-gnueabi
  • アーム-linux-gnueabihf-gcc

arm-linux-gnueabi-gcc との違いは、gcc オプション -mfloat-abi のデフォルト値が異なること、つまり浮動小数点数の処理が異なることです。詳しくは下記の回答を参照してください。
• aarch64-none-linux-gnu-gcc

これは、arm-linux-gnueabi-gcc および arm-linux-gnueabihf-gcc の ARM-64bit バージョンです。

  • アーム eabi gcc

Android ARM コンパイラ。

  • アーム-なし-uclinuxeabi-gcc

uCLinux の場合は、glibc を使用します。

  • アーム-なし-symbianelf-gcc

シンビアン用。

いくつかの概念

ABI与EABI

ABI: アプリケーション バイナリ インターフェイス (アプリケーション バイナリ インターフェイス)。コンピューティングでは、アプリケーション バイナリ インターフェイスは、アプリケーション (またはその他のタイプ) とオペレーティング システムまたはその他のアプリケーションとの間の低レベル インターフェイスを表します。

EABI: Embedded ABI、組み込みシステムに適用されるバイナリ アプリケーション プログラム インターフェイス (Embeded Application Binary Interface)。

この 2 つの主な違いは、ABI がコンピューター上にあり、EABI が組み込みプラットフォーム (ARM、MIPS など) 上にあることです。

gnueabi と gnueabihf

gcc-arm-linux-gnueabi – armel アーキテクチャ用の GNU C コンパイラ
gcc-arm-linux-gnueabihf – armhf アーキテクチャ用の GNU C コンパイラ

これら 2 つのクロスコンパイラは、armel と armhf の 2 つの異なるアーキテクチャに適しています. armel と armhf の 2 つのアーキテクチャは、浮動小数点演算に異なる戦略を採用しています (fpu を使用する arm は、これら 2 つの浮動小数点演算戦略をサポートできます)。

実際、これら 2 つのクロス コンパイラは、gcc オプション -mfloat-abi のデフォルト値が異なるだけです。gcc オプション -mfloat-abi には、soft、softfp、hard の 3 つの値があります (後者の 2 つはアームに fpu 浮動小数点ユニットが必要であり、soft は後者の 2 つと互換性がありますが、softfp と hard は互いに互換性がありません. ):

soft: fpu 浮動小数点ユニットがあっても浮動小数点計算に fpu を使用せず、ソフトウェア モードを使用します。

softfp: armel アーキテクチャ (対応するコンパイラは gcc-arm-linux-gnueabi) で採用されているデフォルト値で、fpu によって計算されますが、パラメータは通常のレジスタで渡されるため、割り込み時に通常のレジスタのみを指定する必要があります。保存され、割り込み負荷は小さいですが、再計算のためにパラメーターを浮動小数点に変換する必要があります。

hard: fpu によって計算された armhf アーキテクチャ (対応するコンパイラ gcc-arm-linux-gnueabihf) によって採用されたデフォルト値。パラメータは fpu の浮動小数点レジスタによっても渡されます。パフォーマンスは高いですが、割り込み負荷が高くなります。

参考

おすすめ

転載: blog.csdn.net/benkaoya/article/details/129542585