$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를 쉘로 사용하고 있다고 가정합니다. 파일이 그렇지 않은 경우 .bashrc출력은 다음과 같습니다. issue 명령이 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에서 실행할 프로그램을 빌드하고 있습니다.

관련 정보