Особенности выбора и установки STM32F4 тулчейна на MacOS X 10.7.5

Только что прошёл эти грабельки и пишу с двоякой целью. Во-первых самому со временем не забыть, а во-вторых — сократить время возни идущим тем же путём.

По ряду причин даже не стал смотреть YAGARTO, CooIDE под mac нет, поэтому выбрал путь Eclipse CDT + GRNUARM + arm-none-eabi тулчейн. Достойных внимания тулчейнов на этот момент два — Mentor Graphics CodeBench Lite (бывший Sourcery G++ Lite) и summon-arm-toolchain. Охотно ограничился бы первым, но не устроил по двум соображениям:

  • hardware FPU поддерживается только в коммерческих версиях, в lite только програмная эмуляция
    UPDATE: речь идёт о том, что в условиях несовместимости (разные способы передачи параметров float point) форматов hard FP EABI и soft FP EABI Sourcery G++ Lite поставляется только с библиотеками формата soft FP EABI. Библиотеки формата hard FP EABI есть только в коммерческих версиях. См. ссылки внизу статьи.
  • они переименовали префикс arm-none-eabi в arm-none-linux-gnueabi и это «поломало» работу gnuarm


Кроме того, под MacOS X его тоже нужно собирать из сорцов. Итого… Поскольку небыло ни малейшего желания тратить время на исправление «несовршенства мира вообще» (например: добавить hard FPU или пофиксить GNUARM), рассмотрел второй вариант.

Вариант summon-arm-toolchain оказался достаточно интересным. Он не только знает STM32F4, но и имеет поддержку hardware FPU. Когда-то такая поддержка шла отдельным патчем в отдельном репозитории (от Mike Smith, репозитория больше нет), но некоторое время назад это было смержено в основной репозиторий. Кроме этого, код строится на основе Linaro GCC, что даёт дополнительные фиксы и оптимизации.

В README самого репозитория указан способ установки, дополнительные параметры и предварительные требования. Прежде всего понадобятся ports. Это набор opensource пакетов и утилиты управления ими, примерно как во FreeBSD (не сильно отличается от линуксов, но на фрю похоже больше всего). Далее нужно установить указанные в README пакеты.

Поскольку пакеты уже были сборку запустил следующей строкой:

./summon-arm-toolchain LIBSTM32_EN=1 DARWIN_OPT_PATH=/opt/local

Библиотека libstm32 имеет opensource альтернативу в виде libopenstm32, но, например, для Open-BLDC нужны обе. Вторая собирается по-умолчанию, поэтому просто заказал первую явно. Второй параметр указывает корень установки портов.

Стоит обратить внимание, что без него при конфигурировании вылетают ошибки такого рода:

checking for the correct version of gmp.h... no
configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.
Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
their locations.  Source code for these libraries can be found at
their respective hosting sites as well as at
ftp://gcc.gnu.org/pub/gcc/infrastructure/.

Далее всё успешно собралось и следующая ошибка возникла уже на этапе установки:

  UPDATING HEADERS
Traceback (most recent call last):
  File "./scripts/irq2nvic_h", line 32, in <module>
    import yaml
ImportError: No module named yaml

Засада оказалась в ошибке пайтоновских setuptools из маковских портов. Пришлось поставить модуль yaml способом, описанным вот тут:
sudo python -m easy_install pyyaml

После этого всё успешно встало в каталог $HOME/sat. По умолчанию оно ставится туда, но параметрами можно потребовать, чтобы оно встало system-wide.

Ссылки, которые могут быть полезны:
  • +3
  • 05 ноября 2012, 00:12
  • dipspb

Комментарии (21)

RSS свернуть / развернуть
summon у тебя сколько времени собирался?
0
Да фиг его знает чесгря… до первого облома я отошёл чай попить, минут через 15 уже видел ошибку, после этого — где-то минуты 3..5 чистого процессорного времени.
0
Но кстати, у меня это может быть быстрым в силу i7 c 4-мя ядрами и 16Gb RAM. Сколько бы оно собиралось на стареньком Mac-Mini даже представить страшно =))
0
да, это очень важно. у меня в виртуалке он собирался несколько часов.
0
… можете попробовать еще Rowley CrossWorks, об ограничениях вроде ничего не сказано
0
Спасибо, не знал.
0
… я имел ввиду собрать :)
0
кстати, раз «собрать», то, по идее, там ограничений быть не может…
0
Кстати, тулчейн под F4 становится особенно актуален в связи с выходом STM32F3 (которые тоже Cortex-M4), в том числе в удобных 48-ногих корпусах…
0
  • avatar
  • evsi
  • 05 ноября 2012, 22:25
Согласен. Надо будет сравнить по размеру куда Rowley CrossWorks, Sourcery CodeBench Lite и summon. Надо ещё посмотреть поддержку hard FPU в CrossWorks.
0
они переименовали префикс arm-none-eabi в arm-none-linux-gnueabi
А это не под разные семейства? arm-none-linux-gnueabi вроде был под процы типа ARM11, а arm-none-eabi именно под кортексы. Или путаю?
0
Боюсь соврать, но вроде _в_основном_ общепринято именование трёх-компонентное: CPU-OS-BINARY_FORMAT. Классикой для bare-metal всегда было arm-none-eabi.

Если что — прошу поправить/дополнить меня.
0
А тут они решили добавить после OS компоненту HOST_OS. Что, по большому счёту, смысла особого не имеет. Лишняя возня с конфигами IDE на разных платформах. А вот что значит «gnueabi» вместо «eabi» — хз…
0
hardware FPU поддерживается только в коммерческих версиях
Вы точно пользовались правильным компилятором?
Вот этот: launchpad.net/gcc-arm-embedded/ поддерживает нормальную работу FPU на STM32F4 как минимум со 2-го квартала 2012.
0
Во-первых — это относится только к Sourcery G++ Lite. А во-вторых — это не моё утверждение, это было найдено вот тут: http://www.eevblog.com/forum/microcontrollers/stm32f4-arm-none-eabi-gcc-not-linking-to-math/

Ссылку забыл указать изначально, каюсь. Добавил.
0
Мат. либу слинковать там несмогли. А менторовцы просто зажали выкладфвать в паблик универсальную. Мне вот тоже пришлось PDM_Filter от ST разбирать-собирать, тот что для микрофона на дискавери, он с hardfloat тоже не дружит.
0
Да, уже прочёл в первоисточнике sourcery.mentor.com/sgpp/lite/arm/portal/kbentry27

Это определённо боле широкая трабла, на неё можно нарваться и с другим компилятором при использовании сторонних библиотек. Сейчас исправлю в тексте.
0
А где можно исходники для сборки PDMFilter найти? Ну или собранную с -mfloat-abi=hard бинарную.
0
Вот то что было разобрано: pdm_filter.S и переделано под hardfloat
0
Как установить тулчейн для STM32F4 под Линух — вот тут я это описал достаточно подробно для себя — чтобы не блудить по лесам и собирать грабли, а прямой дорогой — сразу в дамки). Новобранцам тоже будет, думаю, полезно почитать о ньюансах установки.

zhevak.wordpress.com/2012/10/16/установка-тулчейна-дла-работы-с-arm7cortex-уст/

Основная работа по сборке тулчейна — не моя. За основу я взял публикацию:

www.triplespark.net/elec/pdev/arm/stm32.html

и выложил свое решение задачи. Буду польщен, если кому-нибудь я смог помочь в решении проблемы.
0
хорошая статья, плюс вам. Во многом перевод README/Makefile оригинального SAT, поэтому наверно неплохо было бы автору pull request отправить, чтобы включил информацию на русском в README
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.