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



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



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



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

На этом все, удачной отладки.

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


  1. VioletGiraffe
    13.02.2018 17:52

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

    Пишу это не для того, чтобы поругать STM32 (отличное устройство с плохой экосистемой), а чтобы побудить людей посмотреть на альтернативы, с которыми жизнь намного проще. Есть Arduino Zero и Arduino Due на ARM-Cortex M3, и есть отличный для своих задач Ардуино-совместимый ESP32 (и его предшественник ESP8266).


    1. Fox_exe
      13.02.2018 18:07

      А есть Stm32Duino, превращяющий STM32 в Ардуино!
      Да, без косяков не обошлось и не все работает как ожидаеш. Но кодить становится на порядок удобнее — это факт (Я лично Visual Micro + Visual Studio использую)


    1. abondarev
      13.02.2018 18:11
      +1

      Не хочется спорить, но Вам не кажется, что это разные категории устройств? Если нужно помигать светодиодом, то это проще сделать на ардуино, с нуля конечно, есть готовый пример. Если нужно развитую функциональность, например VoIP, то ардуино, ну скажем так, не совсем годится.

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


      1. VioletGiraffe
        13.02.2018 19:18

        В том-то и дело, что я хочу программировать, а под STM32 60% времени нужно конфигурировать.

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

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


        1. abondarev
          13.02.2018 19:42

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

          Так я же об этом и говорю, разные классы устройств!


          1. VioletGiraffe
            13.02.2018 20:48

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


            1. abondarev
              14.02.2018 12:58
              +1

              Извините, а при чем тут сравнение микросхем?

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

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

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

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

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


              1. VioletGiraffe
                14.02.2018 13:22
                -2

                при чем тут сравнение микросхем?

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

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

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

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

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

                Ни в коем случае никого ни в чём не переубеждаю и не мешаю кушать кактус, конечно же.


  1. abondarev
    13.02.2018 19:41

    del


  1. imperror
    14.02.2018 13:42
    +1

    Залить прошивку можно и так: st-flash --reset write build/base/bin/embox/embox.bin 0x8000000


    1. abondarev
      14.02.2018 14:24

      спасибо.
      Там есть и способ через telnet, но сейчас навскидку не вспомню команду.


  1. imperror
    14.02.2018 13:54
    +1

    А еще автору вопрос, что за Куб вытягивает make из dropbox-а?


    1. alexkalmuk Автор
      14.02.2018 14:27

      STM32CubeF7 версии 1.5.0. С офф сайта по прямой ссылке не загрузить при сборке, поэтому мы скачали к себе в дропбокс.

      Сейчас у ST на сайте версия поновее — 1.9.0. Но пока не было времени затащить.


      1. 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)


        1. alexkalmuk Автор
          14.02.2018 16:05

          У нас многие приложения подтягиваются по зависимостям, некоторые требуют конкрутную версию и (иногда) патчи, поэтому мы не можем считать их предустановленными. Так и в случае с Cube — пока мы работаем только с конкретной протестированной версией 1.5.0 Но в будущем, возможно, постараемся учесть, что Cube может быть предустановлен.


        1. alexkalmuk Автор
          14.02.2018 16:10

          Дело в том, что у меня httpd показывает только index.html, а остальные страницы пустые, хотя в исходниках это не так. Да и стартует он, но не работает через раз. Команда ls то показывает список файлов то нет.

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


        1. abondarev
          14.02.2018 16:12

          Огромное спасибо за инфу!
          К сожалению, мало тестировали и не заметили, что так нестабильно работает!

          А можно немного поподробнее, чтобы воспроизвести проблемы.

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

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


          1. imperror
            14.02.2018 16:47

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

            Нет, загружаемся, делаем ls — получаем список, ребутаем, ls — пусто, еще ребут, ls -список. Да, если запущен httpd, ls не работает.
            Да, переходит, но страница пустая.
            Плата стартует всегда, сервис тоже, но вот он то доступен, то нет, хотя плата пингуется нормально.


            1. abondarev
              14.02.2018 16:56

              Спасибо! Будем разбираться!


              1. imperror
                14.02.2018 17:10

                Еще 1 момент, после пары минут работы сервер http зависает, а еще минут через 10 вся система в целом.


              1. imperror
                14.02.2018 18:05

                Собрал с примером из прошлого поста (LTDC_Display_1Layer), запускается и даже вместе с httpd и даже стал переходить на about.html, но переход на joke.html перегружает девайс.
                Спасибо, очень интересный проект.


                1. alexkalmuk Автор
                  14.02.2018 18:29

                  Собрали в мастере, добавив лишь LTDC_Display_1Layer, и стало лучше? Хм, интересно.


                1. abondarev
                  14.02.2018 18:36

                  Да, очень странно.

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

                  Спасибо еще раз! Постараемся поправить как можно быстрее!


                  1. imperror
                    14.02.2018 18:40

                    Возможно httpd просто засыпает. Иногда помогает пинг из-под Embox.