разработка и программирование электронных устройств

Сборка инструментария ARM Toolchain (arm-none-eabi) в Fedora Linux

В дистрибутиве 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 32275 times by 2950 viewers

3 Comments to Сборка инструментария ARM Toolchain (arm-none-eabi) в Fedora Linux

  1. Volldemar's Gravatar Volldemar
    23 декабря 2013 at 10:20 | Permalink

    В дистрибутиве 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

  2. Volldemar's Gravatar Volldemar
    23 декабря 2013 at 11:42 | Permalink

    В данном случае, устанавливаемое из АУР-а скачивается со следующих источников:
    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

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

Leave a Reply

You must be logged in to post a comment.