В дистрибутиве Fedora Electronic Lab отсутствует инструментарий для кросс-компиляции standalone программ для платформы ARM. Есть возможность установки этого инструментария в качестве дополнительного пакета с помощью yum install. Но установленный в результате инструментарий будет устаревшим.

В этой статье я расскажу как самостоятельно собрать инструментарий для программирования микроконтроллеров ARM . Это гарантирует вам наличие самых свежих версий программ, входящих в пакет.

  1. Сначала необходимо загрузить и разархивировать самые свежие версии исходных кодов необходимых утилит. В следующей таблице указаны названия программ и ссылки на источники для загрузки.
  2. № п/п Название пакета Ссылка для загрузки
    1 binutils https://ftp.gnu.org/gnu/binutils/
    2 newlib ftp://sourceware.org/pub/newlib/index.html
    3 gcc https://gcc.gnu.org/mirrors.html
    4 gdb https://ftp.gnu.org/gnu/gdb/

    Распаковку осуществляем утилитой tar с соответствующими ключами.

    Создаем в своем рабочем каталоге подкаталог build , копируем в него загруженные файлы.

  3. Устанавливаем дополнительные программы и библиотеки, которые будут необходимы при сборке инструментария.
  4. Выполняем конфигурирование и сборку пакета binutils.
  5. Теперь выполним первую сборку кросс-компилятора arm-none-eabi-gcc без стандартной библиотеки языка C (newlib). Кросс-компилятор нам как раз и нужен для того, чтобы собрать эту-самую библиотеку. После сборки newlib выполняется повторная сборка кросс-компилятора уже вместе с библиотекой.
  6. После сборки кросс-компилятора приступим к компиляции библиотеки newlib. Это версия стандартной библиотеки языка C для встраиваемых систем. В стандартной библиотеке используются системные вызовы операционной системы. В нашем варианте ОС нет, поэтому для системных вызовов пишутся соответствующие программные заглушки. Также библиотека использует стандартные функции динамического выделения и освобождения памяти malloc и free , что может привести к фатальным ошибках в программах для микроконтроллеров. Скомпилировав библиотеку с ключем -DMALLOC_PROVIDED можно реализовать динамическое выделение памяти самостоятельно.
  7. Теперь необходимо собрать финальную версию кросс-компилятора.
  8. Устанавливаем отладчик gdb.

После установки каталог build вместе с его содержимым можно удалить

Проверить версии установленных утилит можно с помощью ключа —version.

Собранный кросс-компилятор также поддерживает аппаратный сопроцессор FPU , который , например, имеется в ядре cortex-m4.

При создании новых проектов нужно иметь ввиду, что реализация системных вызовов библиотеки newlib полностью возложена на вас. Также необходимо реализовать библиотечные функции malloc и free. Если вы используете в своем проекте FreeeRTOS, то последние могут вызывать функции выделения(освобождения) памяти из статического массива FreeRTOS.

Пример такого файла приведен ниже.

При использовании FreeRTOS в этот файл можно дописать реализацию функций malloc и free на основе аллокатора FreeRTOS.

Viewed 43522 times by 7133 viewers

Last modified: 17/01/2014

Author

Comments

В дистрибутиве Arch Linux, это делается следующим образом:
$ yaourt -S arm-none-eabi-binutils
$ yaourt -S arm-none-eabi-gcc
$ yaourt -S arm-none-eabi-gdb
#pacman -S eclipse eclipse-cdt openocd
Поясню, почему в три стирочки установка из аура, так как компиляция довольно длительное дело и может закончиться ошибкой, я предпочитаю выполнять по шагам, а не кучей. А вот установку пакманом можно уже выполнять в пакетном режиме.

После всех этих «многочисленных» телодвижений, получаем:
$ arm-none-eabi-gcc —version
arm-none-eabi-gcc (Arch User Repository) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ arm-none-eabi-gcc -print-multi-lib
.;
thumb/arm7tdmi-s;@mthumb@mcpu=arm7tdmi-s
thumb/cortex-m0;@mthumb@mcpu=cortex-m0
thumb/cortex-m3;@mthumb@mcpu=cortex-m3
thumb/cortex-m4;@mthumb@mcpu=cortex-m4
thumb/cortex-m4/float-abi-hard/fpuv4-sp-d16;@mthumb@mcpu=cortex-m4@mfloat-abi=hard@mfpu=fpv4-sp-d16

$ openocd —version
Open On-Chip Debugger 0.7.0 (2013-11-25-15:57)
Licensed under GNU GPL v2

    yaourt — это пакетный менеджер, который является надстройкой над pacman и предоставляющий возможность поиска и установки программ из AUR.

    AUR (ArchLinux User-community Repository (AUR))- это репозиторий, который официально не поддерживается и формируется самими пользователями Archlinux.

    В Fedora тоже можно установить arm-none-eabi из репозитория, однако в репозитории находиться пакет Sourcery G++ Lite под Linux, который далеко не самый свежий.

    В ArchLinux в репозиториях AUR находятся самые свежие пакеты. Насколько я понимаю из-за того, что они не официальные.

В данном случае, устанавливаемое из АУР-а скачивается со следующих источников:
ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.bz2
ftp://sourceware.org/pub/newlib/newlib-2.0.0.tar.gz

Куда уж болле официально? 😉

Write a Reply or Comment