Добрый день! Ввиду того, что люди спрашивают как загрузить Embox на отладочные платы на базе STM32, мы решили выпустить этот рецепт. Его можно рассматривать как дополнение к статье.
Описание будет для отладочной платы STM32F7-Discovery, но в целом оно верно и для других серий STM32 (по ходу будут приведены уточнения для STM32F4).
Первым делом нужно склонировать Embox
git clone https://github.com/embox/embox.git embox
и прочитать про доп. пакеты на нашем вики. Вероятно, не все они обязательны для конкретного темплейта, но имейте ввиду, что лучше сразу их установить.
Далее, вам понадобится кросс-компилятор для arm-а и OpenOCD для прошивки и отладки.
Переходим в директорию c Embox.
Сборка:
- Загружаем конфиг —
make confload-arm/stm32f7cube
(илиmake confload-arm/stm32f4cube
для F4) - Собираем командой
make
(илиmake -j4
и т.д.)
Запуск OpenOCD (лучше в отдельной консоли):
sudo openocd -f OPENOCD_PATH/tcl/board/stm32f7discovery.cfg
(соответственно stm32f4discovery.cfg для F4)
Подключение по minicom (лучше в отдельной консоли):
-
sudo minicom -D /dev/ttyACM0
Да, для F7, это совсем просто, так как у нее com порт, usb host и отладчик сидят на одном USB. Поэтому воткнули mini-usb, и готово. Для F4 используется специальный провод для COM порта и расширение для отладочной платы. Но принцип остается таким же.
Загрузка образа (лучше в отдельной консоли):
-
arm-none-eabi-gdb build/base/bin/embox
В консоли отладчика выполняем команды:
target extended-remote :3333
monitor reset halt
load
Естественно, поскольку это gdb, то все команды там действуют. Вы можете ходить по шагам и точкам останова, смотреть значения переменных, ставить watchpoint и так далее.
После переключения в minicom, мы должны увидеть, что Embox загрузился, и появилась командная строка:
Ну вот и все, готово!
Отладка из Eclipse
Немного добавлю про отладку из популярной IDE Eclipse.
Все вышеперечисленное остается в силе, только вместо консольного gdb будем использовать графический Eclipse.
Нам потребуется установить плагин, который позволяет отлаживаться на аппаратуре, предполагается, что eclipse-cdt уже установлен.
Процесс установки плагина стандарный. В меню выбираем Help -> Install New Software
И там добавляем репозиторий, вот список:
- Eclipse 4.3 (Kepler)
- Eclipse 4.2 (Juno)
- Eclipse 3.7 (Indigo)
- Eclipse 3.6 (Helios)
- Eclipse 3.5 (Galileo)
Далее выбираем пункт GDB Optional Features -> GDB Hardware Debugging
Далее создаем конфигурацию для отладки Run -> Debug Configurations. Выбираем образ, который будем отлаживать.
Параметры отладчика.
Собственно все, теперь можно запустить и ходить по точкам останова.
Частично приведенная информация есть у нас на странице вики.
На этом все, удачной отладки.
Комментарии (24)
imperror
14.02.2018 13:54+1А еще автору вопрос, что за Куб вытягивает make из dropbox-а?
alexkalmuk Автор
14.02.2018 14:27STM32CubeF7 версии 1.5.0. С офф сайта по прямой ссылке не загрузить при сборке, поэтому мы скачали к себе в дропбокс.
Сейчас у ST на сайте версия поновее — 1.9.0. Но пока не было времени затащить.imperror
14.02.2018 15:46+1А зачем его сразу тащить, если он уже, скорее всего, установлен?
И еще вопрос про тестовый проект, насколько он стабилен? Дело в том, что у меня httpd показывает только index.html, а остальные страницы пустые, хотя в исходниках это не так. Да и стартует он, но не работает через раз. Команда ls то показывает список файлов то нет. Компилятор arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release)alexkalmuk Автор
14.02.2018 16:05У нас многие приложения подтягиваются по зависимостям, некоторые требуют конкрутную версию и (иногда) патчи, поэтому мы не можем считать их предустановленными. Так и в случае с Cube — пока мы работаем только с конкретной протестированной версией 1.5.0 Но в будущем, возможно, постараемся учесть, что Cube может быть предустановлен.
alexkalmuk Автор
14.02.2018 16:10Дело в том, что у меня httpd показывает только index.html, а остальные страницы пустые, хотя в исходниках это не так. Да и стартует он, но не работает через раз. Команда ls то показывает список файлов то нет.
Некоторое время назад проверялось на F4, работало. Возможно, это проблема работы под F7. Плюс в этом примере в бранче я ограничил кол-во потоков до 2ух, что тоже может влиять на работу httpd. Если интересен httpd, то лучше попробовать в мастере темлейт arm/stm32f7cube.
abondarev
14.02.2018 16:12Огромное спасибо за инфу!
К сожалению, мало тестировали и не заметили, что так нестабильно работает!
А можно немного поподробнее, чтобы воспроизвести проблемы.
- Я правильно понимаю, что тестировалось на stm32f7 ?
- Какой темплейт использовали для сборки ?
- Правильно я понимаю, что был взят самый последний Embox (голова мастера) ?
Баги
- Первая бага, это список файлов. Просто после загрузки набираете ls несколько раз и он то выводит список файлов то нет?
- Вторая бага. Почему то не отображаются страницы кроме главной?
- Третья бага. Сервер httpd стартует через раз? Или сама плата?
imperror
14.02.2018 16:47Тестировалось на STM32F746G-DISCO.
make confload-arm/stm32f7cube
Да. Странно, что команда version выводит инфу о компиляторе, а не о Embox.
Нет, загружаемся, делаем ls — получаем список, ребутаем, ls — пусто, еще ребут, ls -список. Да, если запущен httpd, ls не работает.
Да, переходит, но страница пустая.
Плата стартует всегда, сервис тоже, но вот он то доступен, то нет, хотя плата пингуется нормально.abondarev
14.02.2018 16:56Спасибо! Будем разбираться!
imperror
14.02.2018 17:10Еще 1 момент, после пары минут работы сервер http зависает, а еще минут через 10 вся система в целом.
imperror
14.02.2018 18:05Собрал с примером из прошлого поста (LTDC_Display_1Layer), запускается и даже вместе с httpd и даже стал переходить на about.html, но переход на joke.html перегружает девайс.
Спасибо, очень интересный проект.alexkalmuk Автор
14.02.2018 18:29Собрали в мастере, добавив лишь LTDC_Display_1Layer, и стало лучше? Хм, интересно.
abondarev
14.02.2018 18:36Да, очень странно.
Точно помню, когда то проверяли что httpd работает, ходит по ссылкам, но после этого могли и конфиг измениться и что нибудь закомитили в коде, уже проверяя не так тщательно!
Спасибо еще раз! Постараемся поправить как можно быстрее!
VioletGiraffe
Читаю, и в очередной раз убеждаюсь, что правильно поступил, переехав на платформу Ардуино. Забыл STM32 как страшный сон, с его отсутствием примеров и библиотек, сложной конфигурацией IDE, и остальным буллшитом (таким, как невозможность в один клик переключиться на другую платформу / модель ЦП и получить исправный бинарник под этот другой ЦП).
Пишу это не для того, чтобы поругать STM32 (отличное устройство с плохой экосистемой), а чтобы побудить людей посмотреть на альтернативы, с которыми жизнь намного проще. Есть Arduino Zero и Arduino Due на ARM-Cortex M3, и есть отличный для своих задач Ардуино-совместимый ESP32 (и его предшественник ESP8266).
Fox_exe
А есть Stm32Duino, превращяющий STM32 в Ардуино!
Да, без косяков не обошлось и не все работает как ожидаеш. Но кодить становится на порядок удобнее — это факт (Я лично Visual Micro + Visual Studio использую)
abondarev
Не хочется спорить, но Вам не кажется, что это разные категории устройств? Если нужно помигать светодиодом, то это проще сделать на ардуино, с нуля конечно, есть готовый пример. Если нужно развитую функциональность, например VoIP, то ардуино, ну скажем так, не совсем годится.
По поводу плохой экосистемы. Опять не согласен. Готовых примеров на ардуино больше, но это маленькие примеры. На stm32, во-первых есть много готовых примеров, а во-вторых они гораздо лучше масштабируются и комбинируются, поскольку ресурсов у устройства больше! По поводу сложности вхождения, ну так да нужно уметь программировать. Но например, мы упрощаем использование готовых примеров из библиотеки stm32cube, как написано в недавней статье.
VioletGiraffe
В том-то и дело, что я хочу программировать, а под STM32 60% времени нужно конфигурировать.
Примеры Ардуино не маленькие, они есть под любую встроенную периферию и множество внешней периферии, вплоть до готовых библиотек, которых тоже очень много. Бери и строй из кирпичиков нужную функциональность.
А насчёт разного класса устройств — нет, мне так не очень кажется, потому что я говорю не об AVR, а о ARM-устройствах на Ардуино. А тот же ESP32 — это вообще два ядра на частоте 160 МГц, 512 КБ SRAM, и 4 МБайт флэш-памяти на самой дешёвой отладочной плате за 7 баксов.
Елинственное, что — в среде Ардуино не предусмотрена полноценная пошаговая отладка. Но я и не предлагаю делать готовые коробочные устройства для серийного производства на Ардуино, а вот для домашних и несерийных самоделок это очень хороший вариант. Просто потому, что очень много сервисного кода уже написано, и он действительно работает. Можно сразу садиться и писать свою уникальную функциональность.
abondarev
Так я же об этом и говорю, разные классы устройств!
VioletGiraffe
Окей, отладочная плата Ардуино на SAM3X8E и голые чипы STM32 в ленте по 1000 штук — разные классы. Чипы STM32 и чипы SAM3X8E — одного класса, но это уже не совсем Ардуино (хотя всё равно очень близко).
abondarev
Извините, а при чем тут сравнение микросхем?
Ардуино, очень интересная инициатива. Она позволила вовлечь непрограммистов в использование микроконтроллеров. Это как бейсик — язык для домохозяек, но ведь он являлся очень важным шагом в развитии IT-индустрии, и на нем много чего можно было быстро сделать, и сделано кстати.
Примеры и библиотеки есть, в большом количестве. Просто их нужно уметь применять. Но просторы интернета позволяют прочитать об этом в том числе и на русском.
Переключиться на другую модуль ЦП, это вообще о чем? Компилятор + bsp разве не решают эту задачу? Вот, например, как мы решали задачу с разными bsp для разных серий stm32.
А если уж действительно хочется в один клик переключать на stm, то есть coocox, дальнейшее гугление конечно приветсвуется!
VioletGiraffe
Неясна суть вашего возражения.
Видимо, это секретные примеры и библиотеки из даркнета, которые не индексируются Гуглом. Почему-то для STM я не нашёл того, что для Ардуино лежит на Гитхабе в готовом виде, или даже доступно через встроенный репозиторий библиотек. Искал на английском, конечно же.
Вот и я о том же, что это отдельная задача, которую нужно решать. Эти идиотские файлы настройки линкера, где указаны смещения разных сегментов, и т. п. Почему-то в Ардуино всё это спрятано от пользователя — выбираешь платформу одним кликом, перекомпилируешь одним кликом, и всё просто работает. Из коробки.
Ни в коем случае никого ни в чём не переубеждаю и не мешаю кушать кактус, конечно же.