ハードウェア浮動小数点演算をサポートするARM926EJ-sデバイスのクロスコンパイル

ハードウェア浮動小数点演算をサポートするARM926EJ-sデバイスのクロスコンパイル

次の仕様とハードウェア浮動小数点演算をサポートする組み込みデバイス用のC ++コードをクロスコンパイルする必要があります。ハードウェア浮動小数点をサポートせずにUbuntu 20.04でクロスコンパイルするのは簡単です。実行でき、arm-linux-gnueabi-g++ -marm -mcpu=arm926ej-s -mfloat-abi=soft -mfpu=vfp機能します。私と一緒に走ると、-mfloat-abi=hard次のようになります。

/usr/lib/gcc-cross/arm-linux-gnueabi/9/../../../../arm-linux-gnueabi/bin/ld: error: ArmSimulateStartStop uses VFP register arguments, /usr/lib/gcc-cross/arm-linux-gnueabi/9/crtbegin.o does not
/usr/lib/gcc-cross/arm-linux-gnueabi/9/../../../../arm-linux-gnueabi/bin/ld: failed to merge target specific data of file /usr/lib/gcc-cross/arm-linux-gnueabi/9/crtbegin.o
/usr/lib/gcc-cross/arm-linux-gnueabi/9/../../../../arm-linux-gnueabi/bin/ld: error: ArmSimulateStartStop uses VFP register arguments, /usr/lib/gcc-cross/arm-linux-gnueabi/9/crtend.o does not
/usr/lib/gcc-cross/arm-linux-gnueabi/9/../../../../arm-linux-gnueabi/bin/ld: failed to merge target specific data of file /usr/lib/gcc-cross/arm-linux-gnueabi/9/crtend.o
collect2: error: ld returned 1 exit status
make: *** [Makefile:12: CrossCompile] Error 1

私はこのプロセッサがハードウェア浮動小数点サポートをサポートしていることを知っています。腕文書。ダウンロードしましたルートディレクトリの構築そしてクロスツールしかし、私のデバイスのハードウェアに合わせて設定する方法がわかりません。クロスコンパイルにVFPサポートを使用するには?

機器仕様:

~ $ cat /proc/cpuinfo 
Processor       : ARM926EJ-S rev 5 (v5l) 
BogoMIPS        : 197.83 
Features        : swp half thumb fastmult edsp java 
CPU implementer : 0x41 
CPU architecture: 5TEJ 
CPU variant     : 0x0 
CPU part        : 0x926 
CPU revision    : 5

~ $ cat /proc/version 
Linux version 2.6.36 (owzafs@PCOWZAFS) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #464 PREEMPT Thu Apr 19 13:50:56 CEST 2018 

編集する:によると湾岸協力協議会文書:VFP補助プロセッサで-mfloat-abi = hardを使用することはサポートされていません。適切な-mfpuオプションを指定して-mfloat-abi = softfpを使用すると、コンパイラはこれらのCPUのハードウェア浮動小数点機能を利用するコードを生成できます。

mfloat-abi=softfpしかし、私が得たデバイスでバイナリを実行するときにコードを使用してコンパイルしましたIllegal instruction

ベストアンサー1

オブジェクトのように見え、crtbegin.oメインラインのcrtend.oビルドと一致しません。

私の考えの最善の方法は、再コンパイルしcrtbegin.scrtend.s同じ設定で再コンパイルし-mfloat-abi=hard、別々に作成してcrtbegin.ocrtend.o試行することです。

おすすめ記事