ARM кросс-компилятор не распознается в MX Linux при разработке STM32

Вопрос или проблема

Я использую операционную систему 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.

Вот пошаговая инструкция для решения вашей проблемы:

  1. Проверка доступности компилятора по абсолютному пути:
    Проверьте, работает ли компилятор, запустив его из директории, где он установлен. Введите в терминале:

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

    Если команда выполнится без ошибок, значит компилятор установлен корректно, но не доступен через систему.

  2. Добавление пути к компилятору в переменную PATH:
    Вам нужно добавить путь к arm-none-eabi-gcc в вашу переменную окружения $PATH. Для этого выполните следующие шаги:

    • Откройте файл .bashrc, который находится в вашем домашнем каталоге:
      nano ~/.bashrc
    • В конце файла добавьте следующую строку:
      export PATH="$PATH:/opt/gcc-arm/bin"
    • Сохраните изменения и закройте редактор, нажав CTRL + X, затем Y, и ENTER.
  3. Применение изменений:
    Чтобы изменения вступили в силу, выполните:

    source ~/.bashrc

    Либо просто откройте новый терминал.

  4. Проверка переменной PATH:
    Убедитесь, что новый путь добавлен корректно, с помощью команды:

    echo $PATH

    В выводе должен быть указан /opt/gcc-arm/bin.

  5. Проверка работы компилятора:
    Попробуйте снова ввести:

    arm-none-eabi-gcc --version

    После этих шагов команда должна заработать, и вы сможете продолжить свою разработку.

Замечания:

  • Убедитесь, что вы используете x86_64 систему, так как это архитектура, для которой предназначен кросс-компилятор ARM. Проверьте свою архитектуру с помощью команды:
    uname -m
  • Учтите, что компилятор arm-none-eabi-gcc предназначен для создания «обнаженного» (bare-metal) кода, то есть прошивок, которые будут напрямую исполняться на вашем микроконтроллере STM32, а не на ОС.

Следуя этим шагам, вы должны устранить проблемы с распознаванием кросс-компилятора и успешно продолжить разработку вашего проекта.

Оцените материал
Добавить комментарий

Капча загружается...