Отладка Embox на STM32


    Добрый день! Ввиду того, что люди спрашивают как загрузить 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

    И там добавляем репозиторий, вот список:


    Далее выбираем пункт GDB Optional Features -> GDB Hardware Debugging



    Далее создаем конфигурацию для отладки Run -> Debug Configurations. Выбираем образ, который будем отлаживать.



    Параметры отладчика.



    Собственно все, теперь можно запустить и ходить по точкам останова.



    Частично приведенная информация есть у нас на странице вики.

    На этом все, удачной отладки.
    Embox
    41.54
    Открытая и свободная ОС для встроенных систем
    Share post

    Comments 24

      –6
      Читаю, и в очередной раз убеждаюсь, что правильно поступил, переехав на платформу Ардуино. Забыл STM32 как страшный сон, с его отсутствием примеров и библиотек, сложной конфигурацией IDE, и остальным буллшитом (таким, как невозможность в один клик переключиться на другую платформу / модель ЦП и получить исправный бинарник под этот другой ЦП).

      Пишу это не для того, чтобы поругать STM32 (отличное устройство с плохой экосистемой), а чтобы побудить людей посмотреть на альтернативы, с которыми жизнь намного проще. Есть Arduino Zero и Arduino Due на ARM-Cortex M3, и есть отличный для своих задач Ардуино-совместимый ESP32 (и его предшественник ESP8266).
        0
        А есть Stm32Duino, превращяющий STM32 в Ардуино!
        Да, без косяков не обошлось и не все работает как ожидаеш. Но кодить становится на порядок удобнее — это факт (Я лично Visual Micro + Visual Studio использую)
          +2
          Не хочется спорить, но Вам не кажется, что это разные категории устройств? Если нужно помигать светодиодом, то это проще сделать на ардуино, с нуля конечно, есть готовый пример. Если нужно развитую функциональность, например VoIP, то ардуино, ну скажем так, не совсем годится.

          По поводу плохой экосистемы. Опять не согласен. Готовых примеров на ардуино больше, но это маленькие примеры. На stm32, во-первых есть много готовых примеров, а во-вторых они гораздо лучше масштабируются и комбинируются, поскольку ресурсов у устройства больше! По поводу сложности вхождения, ну так да нужно уметь программировать. Но например, мы упрощаем использование готовых примеров из библиотеки stm32cube, как написано в недавней статье.
            0
            В том-то и дело, что я хочу программировать, а под STM32 60% времени нужно конфигурировать.

            Примеры Ардуино не маленькие, они есть под любую встроенную периферию и множество внешней периферии, вплоть до готовых библиотек, которых тоже очень много. Бери и строй из кирпичиков нужную функциональность.

            А насчёт разного класса устройств — нет, мне так не очень кажется, потому что я говорю не об AVR, а о ARM-устройствах на Ардуино. А тот же ESP32 — это вообще два ядра на частоте 160 МГц, 512 КБ SRAM, и 4 МБайт флэш-памяти на самой дешёвой отладочной плате за 7 баксов.
            Елинственное, что — в среде Ардуино не предусмотрена полноценная пошаговая отладка. Но я и не предлагаю делать готовые коробочные устройства для серийного производства на Ардуино, а вот для домашних и несерийных самоделок это очень хороший вариант. Просто потому, что очень много сервисного кода уже написано, и он действительно работает. Можно сразу садиться и писать свою уникальную функциональность.
              +1
              Но я и не предлагаю делать готовые коробочные устройства для серийного производства на Ардуино, а вот для домашних и несерийных самоделок это очень хороший вариант.

              Так я же об этом и говорю, разные классы устройств!
                0
                Окей, отладочная плата Ардуино на SAM3X8E и голые чипы STM32 в ленте по 1000 штук — разные классы. Чипы STM32 и чипы SAM3X8E — одного класса, но это уже не совсем Ардуино (хотя всё равно очень близко).
                  +1
                  Извините, а при чем тут сравнение микросхем?

                  Ардуино, очень интересная инициатива. Она позволила вовлечь непрограммистов в использование микроконтроллеров. Это как бейсик — язык для домохозяек, но ведь он являлся очень важным шагом в развитии IT-индустрии, и на нем много чего можно было быстро сделать, и сделано кстати.

                  с его отсутствием примеров и библиотек, сложной конфигурацией IDE, и остальным буллшитом (таким, как невозможность в один клик переключиться на другую платформу / модель ЦП и получить исправный бинарник под этот другой ЦП).

                  Примеры и библиотеки есть, в большом количестве. Просто их нужно уметь применять. Но просторы интернета позволяют прочитать об этом в том числе и на русском.

                  Переключиться на другую модуль ЦП, это вообще о чем? Компилятор + bsp разве не решают эту задачу? Вот, например, как мы решали задачу с разными bsp для разных серий stm32.

                  А если уж действительно хочется в один клик переключать на stm, то есть coocox, дальнейшее гугление конечно приветсвуется!
                    –2
                    при чем тут сравнение микросхем?

                    Неясна суть вашего возражения.

                    Примеры и библиотеки есть, в большом количестве.

                    Видимо, это секретные примеры и библиотеки из даркнета, которые не индексируются Гуглом. Почему-то для STM я не нашёл того, что для Ардуино лежит на Гитхабе в готовом виде, или даже доступно через встроенный репозиторий библиотек. Искал на английском, конечно же.

                    Вот, например, как мы решали задачу с разными bsp для разных серий stm32

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

                    Ни в коем случае никого ни в чём не переубеждаю и не мешаю кушать кактус, конечно же.
          0
          del
            +1
            Залить прошивку можно и так: st-flash --reset write build/base/bin/embox/embox.bin 0x8000000
              0
              спасибо.
              Там есть и способ через telnet, но сейчас навскидку не вспомню команду.
              +1
              А еще автору вопрос, что за Куб вытягивает make из dropbox-а?
                0
                STM32CubeF7 версии 1.5.0. С офф сайта по прямой ссылке не загрузить при сборке, поэтому мы скачали к себе в дропбокс.

                Сейчас у ST на сайте версия поновее — 1.9.0. Но пока не было времени затащить.
                  +1
                  А зачем его сразу тащить, если он уже, скорее всего, установлен?
                  И еще вопрос про тестовый проект, насколько он стабилен? Дело в том, что у меня httpd показывает только index.html, а остальные страницы пустые, хотя в исходниках это не так. Да и стартует он, но не работает через раз. Команда ls то показывает список файлов то нет. Компилятор arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release)
                    0
                    У нас многие приложения подтягиваются по зависимостям, некоторые требуют конкрутную версию и (иногда) патчи, поэтому мы не можем считать их предустановленными. Так и в случае с Cube — пока мы работаем только с конкретной протестированной версией 1.5.0 Но в будущем, возможно, постараемся учесть, что Cube может быть предустановлен.
                      0
                      Дело в том, что у меня httpd показывает только index.html, а остальные страницы пустые, хотя в исходниках это не так. Да и стартует он, но не работает через раз. Команда ls то показывает список файлов то нет.

                      Некоторое время назад проверялось на F4, работало. Возможно, это проблема работы под F7. Плюс в этом примере в бранче я ограничил кол-во потоков до 2ух, что тоже может влиять на работу httpd. Если интересен httpd, то лучше попробовать в мастере темлейт arm/stm32f7cube.
                        0
                        Огромное спасибо за инфу!
                        К сожалению, мало тестировали и не заметили, что так нестабильно работает!

                        А можно немного поподробнее, чтобы воспроизвести проблемы.
                        • Я правильно понимаю, что тестировалось на stm32f7 ?
                        • Какой темплейт использовали для сборки ?
                        • Правильно я понимаю, что был взят самый последний Embox (голова мастера) ?

                        Баги
                        • Первая бага, это список файлов. Просто после загрузки набираете ls несколько раз и он то выводит список файлов то нет?
                        • Вторая бага. Почему то не отображаются страницы кроме главной?
                        • Третья бага. Сервер httpd стартует через раз? Или сама плата?

                          0
                          Тестировалось на STM32F746G-DISCO.
                          make confload-arm/stm32f7cube
                          Да. Странно, что команда version выводит инфу о компиляторе, а не о Embox.

                          Нет, загружаемся, делаем ls — получаем список, ребутаем, ls — пусто, еще ребут, ls -список. Да, если запущен httpd, ls не работает.
                          Да, переходит, но страница пустая.
                          Плата стартует всегда, сервис тоже, но вот он то доступен, то нет, хотя плата пингуется нормально.
                            0
                            Спасибо! Будем разбираться!
                              +1
                              Еще 1 момент, после пары минут работы сервер http зависает, а еще минут через 10 вся система в целом.
                                +1
                                Собрал с примером из прошлого поста (LTDC_Display_1Layer), запускается и даже вместе с httpd и даже стал переходить на about.html, но переход на joke.html перегружает девайс.
                                Спасибо, очень интересный проект.
                                  0
                                  Собрали в мастере, добавив лишь LTDC_Display_1Layer, и стало лучше? Хм, интересно.
                                    0
                                    Да, очень странно.

                                    Точно помню, когда то проверяли что httpd работает, ходит по ссылкам, но после этого могли и конфиг измениться и что нибудь закомитили в коде, уже проверяя не так тщательно!

                                    Спасибо еще раз! Постараемся поправить как можно быстрее!
                                      0
                                      Возможно httpd просто засыпает. Иногда помогает пинг из-под Embox.

                      Only users with full accounts can post comments. Log in, please.