Вопрос или проблема
Я использую операционную систему MX Linux и пытаюсь работать с микроконтроллером STM32F103C8T6. Следуя руководству пользователя Beginning STM32 Уоррена Гэя, я успешно установил Git-клонирование stm32f103c8t6
, libopencm3
и FreeRTOS
в соответствии с руководством.
Когда я скачал и разархивировал кросс-компилятор ARM, файлы были сохранены в папке /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 Nov 24 2020 arm-none-eabi-gcc
Аналогично, команда type gcc
выводит:
gcc is /usr/bin/gcc
Вместо:
arm-none-eabi-gcc is hashed (/opt/gcc-arm/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
[Это должно было быть комментарием, но у меня нет репутации для этого]
Похоже, что путь к компилятору не находится в вашей переменной окружения $PATH
.
Чтобы убедиться, что все работает, вы должны вызвать программу с абсолютным путем, либо:
/opt/gcc-arm/bin/arm-none-eabi-gcc
либо
cd /opt/gcc-arm/bin/
./arm-none-eabi-gcc #./ необходим для выполнения из текущего каталога
Если это сработает (ошибка “команда не найдена” больше не появится), проблема решается легко: добавьте в конец вашего файла .bashrc
(в вашей домашней папке, я предполагаю, что вы используете bash в качестве оболочки, выведите результат команды echo $SHELL
, если файла нет):
PATH+=':/opt/gcc-arm/bin/'
Затем выполните . ~/.bashrc
(запустите только что отредактированный файл) из текущей оболочки или просто откройте новый терминал, теперь вы сможете найти команду.
ПРИМЕЧАНИЕ
Я предполагаю, что вы кросс-компилируете с Intel/AMD машины (архитектура должна быть x86_64
, вы можете узнать это с помощью команды uname -m
или с более подробной информацией uname -a
). В этом случае вы собираете на x86 машине с кросс-компилятором и создаете исполняемые файлы ARM для запуска на вашем STM32.
Если я допустил ошибочные предположения и вы пытаетесь запустить кросс-компилятор с STM32, то не стоит. Преимущество кросс-компилятора заключается в том, чтобы выполнять ресурсоемкие задачи на более мощной машине и запускать их на вашей маленькой встраиваемой системе. Если вы хотите компилировать на STM32 без зависимостей от другого компьютера (т.е. без кросс-компиляции) и у вас запущен Linux, просто компилируйте с помощью локального gcc и запускайте исполняемый файл там.
ПРИМЕЧАНИЕ2
Компилятор arm-none-eabi-gcc предназначен для компиляции программного кода для bare-metal (например, прошивки, которая работает непосредственно на встраиваемой системе, а не на Linux), в то время как gcc на Linux (или кросс-компилятор arm-linux-gnueabihf-gcc, например) создает программы, которые работают на Linux.
Ответ или решение
Для успешной работы с кросс-компилятором ARM в MX Linux при разработке для STM32F103C8T6, необходимо убедиться, что путь к кросс-компилятору добавлен в вашу переменную окружения $PATH
. Это позволит системе распознавать команды, такие как arm-none-eabi-gcc
.
Вот пошаговая инструкция для решения вашей проблемы:
-
Проверка доступности компилятора по абсолютному пути:
Проверьте, работает ли компилятор, запустив его из директории, где он установлен. Введите в терминале:/opt/gcc-arm/bin/arm-none-eabi-gcc --version
Если команда выполнится без ошибок, значит компилятор установлен корректно, но не доступен через систему.
-
Добавление пути к компилятору в переменную PATH:
Вам нужно добавить путь кarm-none-eabi-gcc
в вашу переменную окружения$PATH
. Для этого выполните следующие шаги:- Откройте файл
.bashrc
, который находится в вашем домашнем каталоге:nano ~/.bashrc
- В конце файла добавьте следующую строку:
export PATH="$PATH:/opt/gcc-arm/bin"
- Сохраните изменения и закройте редактор, нажав
CTRL + X
, затемY
, иENTER
.
- Откройте файл
-
Применение изменений:
Чтобы изменения вступили в силу, выполните:source ~/.bashrc
Либо просто откройте новый терминал.
-
Проверка переменной PATH:
Убедитесь, что новый путь добавлен корректно, с помощью команды:echo $PATH
В выводе должен быть указан
/opt/gcc-arm/bin
. -
Проверка работы компилятора:
Попробуйте снова ввести:arm-none-eabi-gcc --version
После этих шагов команда должна заработать, и вы сможете продолжить свою разработку.
Замечания:
- Убедитесь, что вы используете x86_64 систему, так как это архитектура, для которой предназначен кросс-компилятор ARM. Проверьте свою архитектуру с помощью команды:
uname -m
- Учтите, что компилятор
arm-none-eabi-gcc
предназначен для создания «обнаженного» (bare-metal) кода, то есть прошивок, которые будут напрямую исполняться на вашем микроконтроллере STM32, а не на ОС.
Следуя этим шагам, вы должны устранить проблемы с распознаванием кросс-компилятора и успешно продолжить разработку вашего проекта.