Решил я попробовать перевести какой-нибудь из своих текущих проектов на RTOS и путем долгого сравнения выбрал RIOT OS, хотя изначально думал о ChibiOS, т.к. был уже опыт работы с ней. RIOT OS — операционная система реального времени для IoT — интернета вещей, полностью open source разработка для 32-х, 16-ти и 8-и битных микроконтроллеров. Для работы с этой ОС необходим Linux, либо MacOS на рабочей станции разработчика. Подробнее о преимуществах, функционале и сравнение с другими ОСРВ можно прочесть на официальном сайте.
Статья подразумевает, что у вас уже установлен на компьютере Linux или он установлен в качестве гостевой операционной системы на виртуальной машине. Я буду показывать все действия на примере Manjaro Linux и платы STM32F4-Discovery. Для тех, кто работает в Ubuntu, а таких я думаю большинство, я по возможности буду давать отдельные сноски с командами терминала.
Перед настройкой минимального рабочего окружения для работы с RIOT OS нам необходимо установить все рекомендованные для работы программы и утилиты. Начнем:
- Устанавливаем GIT:
sudo pacman -S git
- Устанавливаем пакет программ base-devel (make, gcc и т.д.):
sudo pacman -S base-devel
В Ubuntu такой пакет называется build-essential, соответственно:
sudo apt install build-essential
- Устанавливаем некоторые зависимости
sudo pacman -S valgrind bridge-utils
Если у вас 64-битная система на компьютере то необходимо установить multilib варианты программ:
sudo pacman -S gcc-multilib valgrind-multilib
Соответственно, в Ubuntu:
sudo apt install gcc-multilib
- Устанавливаем OpenOCD:
sudo pacman -S openocd
На текущий момент последняя версия OpenOCD 0.10.0. ST-LINK V2 программатор и отладчик JTAG, встроенный в платы Discovery и Nucleo. Настраиваем работу с программатором ST-LINK V2 в ОС.
В Linux настроить права на USB через UDEV. Для этого надо положить в /etc/udev/rules.d/ файл 99-openocd.rules следующего содержания:# Copy this file to /etc/udev/rules.d/ ACTION!="add|change", GOTO="openocd_rules_end" SUBSYSTEM!="usb|tty|hidraw", GOTO="openocd_rules_end" # Please keep this list sorted by VID:PID # opendous and estick ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204f", MODE="664", GROUP="plugdev" # Original FT232/FT245 VID:PID ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="664", GROUP="plugdev" # Original FT2232 VID:PID ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE="664", GROUP="plugdev" # Original FT4232 VID:PID ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", MODE="664", GROUP="plugdev" # Original FT232H VID:PID ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE="664", GROUP="plugdev" # DISTORTEC JTAG-lock-pick Tiny 2 ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8220", MODE="664", GROUP="plugdev" # TUMPA, TUMPA Lite ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a98", MODE="664", GROUP="plugdev" ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a99", MODE="664", GROUP="plugdev" # XDS100v2 ATTRS{idVendor}=="0403", ATTRS{idProduct}=="a6d0", MODE="664", GROUP="plugdev" # Xverve Signalyzer Tool (DT-USB-ST), Signalyzer LITE (DT-USB-SLITE) ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bca0", MODE="664", GROUP="plugdev" ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bca1", MODE="664", GROUP="plugdev" # TI/Luminary Stellaris Evaluation Board FTDI (several) ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bcd9", MODE="664", GROUP="plugdev" # TI/Luminary Stellaris In-Circuit Debug Interface FTDI (ICDI) Board ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bcda", MODE="664", GROUP="plugdev" # egnite Turtelizer 2 ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bdc8", MODE="664", GROUP="plugdev" # Section5 ICEbear ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c140", MODE="664", GROUP="plugdev" ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c141", MODE="664", GROUP="plugdev" # Amontec JTAGkey and JTAGkey-tiny ATTRS{idVendor}=="0403", ATTRS{idProduct}=="cff8", MODE="664", GROUP="plugdev" # STLink v1 ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3744", MODE="664", GROUP="plugdev" # STLink v2 ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="664", GROUP="plugdev" # STLink v2-1 ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="664", GROUP="plugdev" # Hilscher NXHX Boards ATTRS{idVendor}=="0640", ATTRS{idProduct}=="0028", MODE="664", GROUP="plugdev" # Hitex STR9-comStick ATTRS{idVendor}=="0640", ATTRS{idProduct}=="002c", MODE="664", GROUP="plugdev" # Hitex STM32-PerformanceStick ATTRS{idVendor}=="0640", ATTRS{idProduct}=="002d", MODE="664", GROUP="plugdev" # Amontec JTAGkey-HiSpeed ATTRS{idVendor}=="0fbb", ATTRS{idProduct}=="1000", MODE="664", GROUP="plugdev" # IAR J-Link USB ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0101", MODE="664", GROUP="plugdev" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0102", MODE="664", GROUP="plugdev" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0103", MODE="664", GROUP="plugdev" ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0104", MODE="664", GROUP="plugdev" # J-Link-OB (onboard) ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0105", MODE="664", GROUP="plugdev" # Raisonance RLink ATTRS{idVendor}=="138e", ATTRS{idProduct}=="9000", MODE="664", GROUP="plugdev" # Debug Board for Neo1973 ATTRS{idVendor}=="1457", ATTRS{idProduct}=="5118", MODE="664", GROUP="plugdev" # Olimex ARM-USB-OCD ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0003", MODE="664", GROUP="plugdev" # Olimex ARM-USB-OCD-TINY ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0004", MODE="664", GROUP="plugdev" # Olimex ARM-JTAG-EW ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="001e", MODE="664", GROUP="plugdev" # Olimex ARM-USB-OCD-TINY-H ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", MODE="664", GROUP="plugdev" # Olimex ARM-USB-OCD-H ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002b", MODE="664", GROUP="plugdev" # USBprog with OpenOCD firmware ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c63", MODE="664", GROUP="plugdev" # TI/Luminary Stellaris In-Circuit Debug Interface (ICDI) Board ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", MODE="664", GROUP="plugdev" # Marvell Sheevaplug ATTRS{idVendor}=="9e88", ATTRS{idProduct}=="9e8f", MODE="664", GROUP="plugdev" # CMSIS-DAP compatible adapters ATTRS{product}=="*CMSIS-DAP*", MODE="664", GROUP="plugdev" LABEL="openocd_rules_end"
Перезагружаем правила UDEV:
sudo udevadm control --reload-rules
Если все сделано правильно, то следующая команда должна соединяться с контроллером и выводить данные о нем:
sudo openocd -f interface/stlink-v2.cfg -f board/stm32f4discovery.cfg
- Устанавливаем GCC ARM Embedded Toolchain:
sudo pacman -S arm-none-eabi-gcc arm-none-eabi-newlib
- Этого вполне достаточно для начала работы и теперь можно скопировать репозиторий с туториалами в любую рабочую директорию:
git clone --recursive https://github.com/RIOT-OS/Tutorials
Начнем сразу с первого туториала, переходим в директорию с первым заданием:
cd /Tutorials/task-01
Компилируем программу для native платформы, это специальная платформа, которая позволяет запускать программу с RITO OS как Linux процесс. Для запуска достаточно в Makefile указать платформу BOARD как native, вызвать make и выполнить elf файл, который генерируется после компиляции:
make all term
Запускаем команду help, чтобы увидеть список доступных команд:
> help help Command Description --------------------------------------- reboot Reboot the node ps Prints information about running threads.
Например, посмотрим вывод ps:
> ps ps pid | name | state Q | pri | stack ( used) | base | current - | isr_stack | - - | - | 8192 ( -1) | 0x8055520 | 0x8055520 1 | idle | pending Q | 15 | 8192 ( 6240) | 0x8053240 | 0x80539dd 2 | main | running Q | 7 | 12288 ( 9312) | 0x8050240 | 0x8050ddd | SUM | | | 28672 (15552)
Ну ок, теперь можно и запуститься на реальном железе, для этого в Makefile меняем BOARD=native на BOARD=stm32f4discovery и запускаем команду:
sudo make all flash term
Эта команда скомпилирует программу, прошьет микроконтроллер через подключенный программатор STLINK V2 и откроет соединение с командной оболочкой RIOT.
Если получаем ошибку Error: libusb_open() failed with LIBUSB_ERROR_ACCESS то не забываем запускать команду make flash с sudo.
В следующий раз попробуем установить более продвинутое окружение для работы и создать свой демо проект для STM32. И обсуждение на форуме
Добрый день!
Эту статью нашел одну из оочень немногих про операционку RIOT для STM32.
С програматором ST-LINK V2.
Начал устанавливать Ubuntu на Win10. Не дополнительную а встроенную можно тут почитать. https://habr.com/post/280560/
Сделал Git Clone.
Разобрался как и где находятся файлы и как указывать название процессора.
Но пока не могу сделать сборку командой make и не могу установить рекомендуемый GNU make.
Но знаю точно что это возможно.
Возможно вы знаете как установить?
Добрый день. Для ubuntu все необходимые для сборки утилиты находятся в пакете build-essential, необходимо его инсталлировать как у меня в статье описано и далее уже запускать make. Если в процессе получаете ошибки, то опишите их здесь же в комментариях, лучше со скриншотами.