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 -m
uname -a
내가 잘못된 가정을 했고 당신이 크로스 컴파일러를 실행하려고 하는 경우~에서stm32는 필요 없습니다. 크로스 컴파일러의 장점은 컴파일하려는 경우 더 강력한 시스템에서 무거운 작업을 수행한 다음 작은 임베디드 시스템에서 실행할 수 있다는 것입니다.존재하다stm32는 다른 컴퓨터에 의존할 필요가 없으며(즉, 크로스 컴파일이 필요 없음) 거기에서 Linux를 실행한 다음 로컬 gcc로 컴파일하고 거기에서 실행 파일을 실행하면 됩니다.
노트 2
컴파일러 암 -전혀-eabi-gcc는 베어 메탈 코드(Linux가 아닌 임베디드 시스템에서 직접 실행되는 펌웨어 등)를 컴파일하도록 설계되었지만 Linux용 gcc(또는 크로스 컴파일러 arm-운영 체제-gnueabihf-gcc 등)은 Linux에서 실행할 프로그램을 빌드하고 있습니다.