$arm-none-eabi-gcc -- 間違ったバージョン

$arm-none-eabi-gcc -- 間違ったバージョン

MX Linuxオペレーティングシステムを使用しています。 stm32f103c8t6 MCUを使用しようとしています。 Warren gayのユーザーマニュアル「Beginning STM32」のマニュアルに従ってstm32f103c8t6、libopencm3、FreeRTOSのgit cloneを正常にインストールしました。

ARM CROSS コンパイラをダウンロードして解凍すると、ファイルは /opt/gcc-arm フォルダに保存されました。

arm-none-eabi-gcc --version と入力すると、コマンドが見つからないというエラーが表示されます。

さらに検索して $ls -l /opt/gcc-arm/bin と入力すると、次の形式で arm-none-eabi-gcc が緑色で表示されます。

-rwxr-xr-x 2 1001 1001 1296976 2020年11月24日 arm-none-eabi-gcc

同様に、「type gcc」コマンドは、「arm-none-eabi-gcc is hashed (/opt/gcc-arm/bin/gcc)」の代わりに「gcc is /usr/bin/gcc」という出力を提供します。ユーザーマニュアル

そして、「type arm-none-eabi-gcc」コマンドは出力を「見つかりません」と表示します。

私が知っているのは、ファイルの緑はファイルが実行可能であることを意味しますが、コンピュータがコマンドを認識しない理由を説明できません。

最後の make コマンドは次のような応答を受けました。

user@mx:~/stm32f103c8t6
$ make
make -C libopencm3 TARGETS=stm32/f1
make[1]: Entering directory '/home/user/stm32f103c8t6/libopencm3'
  BUILD   lib/stm32/f1
  CC      adc.c
make[2]: arm-none-eabi-gcc: Command not found
make[2]: *** [../../Makefile.include:41: adc.o] Error 127
Failure building: lib/stm32/f1: code: 2
make[1]: *** [Makefile:79: lib] Error 1
make[1]: Leaving directory '/home/user/stm32f103c8t6/libopencm3'
make: *** [Makefile:38: libopencm3/lib/libopencm3_stm32f1.a] Error 2

答え1

[コメントでなければなりませんが、私はそのような評判がありません。]

コンパイラパスが$PATH環境変数にないようです。

すべてが正しく機能していることを確認するには、次のものを使用する必要があります。純粋なパスまたは:

/opt/gcc-arm/bin/arm-none-eabi-gcc

または

cd /opt/gcc-arm/bin/
./arm-none-eabi-gcc #the ./ is necessary to execute from the current directory

うまくいけば(もはやコマンドが見つかりませんエラー)、問題は簡単に解決できます。 (ホームフォルダでbashをシェルとして使用しているとします。ファイルがそうでない場合、出力は次のようになります。issue.bashrcコマンドはecho $SHELLありません):

PATH+=':/opt/gcc-arm/bin/'

その後、. ~/.bashrc現在のシェルで実行するか(新しく編集したファイルを実行する)、新しい端末を開くと、コマンドが見つかります。

ノート

私はあなたがIntel / AMDシステムでクロスコンパイルをしていると仮定します(アーキテクチャは必要であり、コマンドまたはmore infoを使用して見つけるx86_64ことができます)。この場合、クロスコンパイラを使用してx86システムでビルドし、stm32システムで実行するARM実行可能ファイルを生成できます。uname -muname -a

私が間違った仮定をして、あなたがクロスコンパイラを実行しようとしている場合~からstm32は必要ありません。クロスコンパイラの利点は、コンパイルしたい場合は、より強力なシステムで重い作業を実行してから、小さな組み込みシステムで実行できることです。存在するstm32は他のコンピュータに依存する必要はありません(つまり、クロスコンパイルは不要です)、そこでLinuxを実行してからローカルのgccにコンパイルしてそこから実行可能ファイルを実行します。

ノート2

コンパイラアーム -まったく-eabi-gccは、ベアメタルコード(Linuxではなく組み込みシステムで直接実行されるファームウェアなど)をコンパイルするように設計されていますが、Linux用gcc(またはクロスコンパイラarm-オペレーティングシステム-gnueabihf-gccなど)は、Linux上で実行するプログラムを構築しています。

関連情報