Источник Хабрахабр.ru, Москва
Заголовок Сборка и отладка прошивки IoT-модуля: Python, make, апельсины и чёрная магия
Дата 20240628

Этим цветом    обозначаются известные системе слова и выражения, принимавшие участие в анализе данного текста, а таким    - идентифицированные, то есть соотнесенные с каким-либо объектом онтологической базы

============= Обработанный текст:
Сборка и отладка прошивки IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей-модуля: Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python, make, апельсины и черная магия

Сборка и отладка прошивки IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей-модуля: Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python, make, апельсины и черная магия

Уровень сложности

Простой

Время на прочтение

22 мин

Количество просмотров

82

Блог компании Whoosh• Транспорт » Транспортные средства » Электросамокат » Кикшеринг » Whoosh

• Объект организация » Организации по алфавиту » Организации на Wh » Whoosh
Интернет вещей• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей

Ретроспектива

Сердце и мозг любого шерингового самоката• Транспорт » Транспортные средства » СамокатIoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей-модуль: он чувствует , что
происходит вокруг, управляет мышцами, общается с бэкендом. Все, что он знает о
мире, и то, как себя ведет, определяется его прошивкой. В наших самокатах• Транспорт » Транспортные средства » Самокат
стоит IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей-модуль собственной разработки, поэтому и прошивку для него мы пишем
сами.

Помню, были времена, когда наш отдел состоял из нескольких разработчиков. Мы
сидели на Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
. Прошивка собиралась в eclipse• Информационные технологии » Информатика » Программирование » Java » Eclipse

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Java » Eclipse

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Java » Eclipse
-based Atollic True Studio с
какой-то своей системой сборкисчастью, STM32CubeIDE миновала нас). Потом
мы перешли на самописный make ’file• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
, и до поры до времени нас это устраивало.

Шло время, Whoosh• Транспорт » Транспортные средства » Электросамокат » Кикшеринг » Whoosh

• Объект организация » Организации по алфавиту » Организации на Wh » Whoosh
рос и развивался. Мы решили, что помимо сборки нам стоило бы
еще запускать пару вспомогательных утилит• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита
. В списке• Информационные технологии » Информатика » Мультисписок используемых осей
появились Linux и macOS, а сам процесс стало необходимо логировать, чтобы в
случае чего понимать, где именно и что пошло не так.

В общем, процесс сборки прошивки разрастался и срочно нужно было его
структурировать и делать нормально, а не…

Тут хотя бы понятно почему все упало.

Чтобы собрать файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
с прошивкой, в первую очередь нужны компилятор (в нашем
случае это часть тулчейна ) и make. Можно собирать его и одним только
компилятором, но с make’ом этот процесс перестает быть самоистязанием. Нужен
сам код, конечно же, а чтобы его писатьсреда разработки. Большинство наших
разработчиков используют VS Codeтам есть несколько фич, которые для наших
задач
оказались очень удобными, расскажу о них чуть позже. Также можно
использовать Eclipse• Информационные технологии » Информатика » Программирование » Java » Eclipse

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Java » Eclipse

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Java » Eclipse
— у него ряд преимуществ в плане отладки
микроконтроллеров• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры. Или даже Vim , если вам по душе хардкор. Привязку к
конкретной IDE мы сознательно не делали, а ограничились стандартными
инструментами: shell, make и Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python. Что такое компилятор и make

Все языки программирования• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования
делятся на компилируемые и интерпретируемые. В
IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей-модуле используется микроконтроллер• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры, а для программирования
микроконтроллеров• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры используются только компиляторы. В нашем случае мы
используем язык Cи. Итак, прежде чем исполнить программу, нужно ее
скомпилировать — превратить человекочитаемый текст программы в машинные
команды• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Команда (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)
, исполняемые процессором. А make — это утилита• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита
, которая позволяет
использовать специальные конфигурационные файлы• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения
для упрощения компиляции. А
также, если вы компилируете большой проект, состоящий из множества файлов• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
, то
make позволяет не пересобирать каждый раз файлы• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
, которые не были изменены.

Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python, который дирижирует

Так как в преддверии перемен ядром всей сборки был make, то и все остальное мы
вызывали из него.

Какое-то время это вполне нормально работало. Однако добавить еще что-нибудь в
такую схему было уже сложно, да и сам make не особо рассчитан на то, чтобы
запускать из него shell-процесс с python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python-скриптом• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки
внутри.

Собственно, поэтому мы и решили пересмотреть подход. Начинаем. За основу берем
Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python — практически все наши разработчики его знают, на нем легко настроить
логирование, из него можно запускать процессы и другие приложения… Обернем в
него все — получится почти как у Экзюпери: удав питон• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python, который проглотил слона
сборку прошивки.

Детальнее изнутри так: скрипт• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки
на Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python парсит входные аргументы, вызывает
make и все необходимые утилиты• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита
и сам же логирует процесс сборки. Понимаю, что
подобное решение — не истина в первой инстанции, но у нас оно прижилось (буду
рад комментариям по поводу этой схемы и альтернативным решениям).

Альтернативная версия, в которой удав съел антилопу гну• Биология » Зоология » Животные » Классификация животных » Вторичноротые » Хордовые » Позвоночные » Млекопитающие » Млекопитающие по отрядам » Парнокопытные » Полорогие » Гну

• Биология » Зоология » Животные » Фауна по регионам » Фауна по континентам » Фауна Африки » Гну
.

Кстати, даже этого оказалось недостаточно, потому что нам хотелось все-таки
запускать Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python в виртуальном окружении, дабы не мусорить в системе, а также
использовать requirements. Ввиду того, что в разных ОС venv создается
по-разному, то пришлось поверх питона• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python положить shell-скрипт• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки
, который
разруливает venv и кроссплатформенность.

#!/usr/bin• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл
/env bash• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки » Bash

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки » Bash

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки » Bash
if [ "$OS_NAME" == "Darwin" ]; then VENV_NAME=virtualenv
VENV_SRC=bin• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл
PYTHON• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python_NAME=python3 elif [ "$OS_NAME" == "Linux" ]; then
VENV_NAME=venv VENV_SRC=bin• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл
PYTHON• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python_NAME=python3 elif [ "$OS_NAME" ==
"Windows_NT• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows » Windows NT

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows » Windows NT

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows » Windows NT
" ]; then VENV_NAME=venv VENV_SRC=Scripts PYTHON• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python_NAME=python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python fi if
[ -d ".venv" ]; then echo• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo
.venv exists else echo• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo
there is no .venv
$PYTHON• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python_NAME -m $VENV_NAME .venv .venv/$VENV_SRC/$PYTHON• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python_NAME -m pip install
--upgrade pip .venv/$VENV_SRC/pip install -r requirements.txt fi
python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python_build_script• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки
=builds/fw_builder.py echo• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo
Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python cmd:
.venv/$VENV_SRC/$PYTHON• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python_NAME $python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python_build_script• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки
$*
.venv/$VENV_SRC/$PYTHON• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python_NAME $python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python_build_script• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки
$*

Грабли, которые поджидают

Если вдруг кто-то из вас, дорогие читатели, вдруг решится реализовать что-то
подобное, то я сразу расскажу вам про те грабли, на которые наступил сам.

Во-первых, запуск чего-либо наподобие make напрямую из Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python оказался не
такой уж тривиальной задачей. Особенно, учитывая то, что нам хотелось, чтобы
это была неблокирующая операция со своим таймаутом. А еще хотелось на лету
ловить вывод в stdout и stderr. На наше счастье, в python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python есть удобный модуль
subprocess , в котором имеется весь необходимый функционал.

Во-вторых, с Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
не заскучаешь. В один день мы обнаружили, что иногда
процесс сборки просто зависает, хотя по таймауту ничего не отваливается,
никаких ошибок не выдается. Когда я понял, что это происходит только на
Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
, стало ясно, куда копать. Выяснилось, что у объекта PIPE , который мы
использовали в качестве буффера для стандартных потоков, есть ограничение по
размеру, и оно зависит от ОС. На Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
— 4096 Байт. То есть когда пытаешься
собрать на винде проект с большим количеством ворнингов, stderr в какой-то
момент заполняется и происходит deadlock. Поэтому для захвата stderr пришлось
использовать файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
вместо PIPE.

Вот пример кода функции на Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python для оборачивания make-команды• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Команда (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)
.
Чувствительные части я выпилил, но суть сохранилась, возможно, даже получится
запустить через Ctrl+C/Ctrl+V.

import glob from time import time from tqdm import tqdm from subprocess import
PIPE, Popen reg_ex = r'some_pattern' def run_cmd(cmd, N=None): log.info(f'make
cmd: {cmd}') t0 = time() info_str = '\n' bar_fmt =
'{l_bar}{bar:20}{r_bar}{bar:-10b}' if N is not None else None with
open('make_err.log', 'w', encoding="utf-8• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Plan 9 » UTF-8

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Кодировки » Юникод » UTF-8

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Кодировки » Юникод » UTF-8

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Plan 9 » UTF-8

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Plan 9 » UTF-8

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Кодировки » Юникод » UTF-8
") as err_f: p = Popen(cmd,
shell=True, stdout=PIPE, stderr=err_f) with tqdm(total=N, bar_format=bar_fmt)
as pbar: with open('make_build.log', 'a', encoding="utf-8• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Plan 9 » UTF-8

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Кодировки » Юникод » UTF-8

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Кодировки » Юникод » UTF-8

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Plan 9 » UTF-8

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Plan 9 » UTF-8

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Кодировки » Юникод » UTF-8
") as f: while
p.poll() is None: output = p.stdout.readline() # type: ignore if output:
output_str = output.decode().rstrip() if re.match(reg_ex, output_str):
f.write(output_str + '\n') pbar.set_postfix_str(output_str) pbar.update()
else: info_str += output_str + '\n' with open('make_err.log', 'r',
encoding="utf-8• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Plan 9 » UTF-8

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Кодировки » Юникод » UTF-8

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Кодировки » Юникод » UTF-8

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Plan 9 » UTF-8

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Plan 9 » UTF-8

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Кодировки » Юникод » UTF-8
") as err_f: std_err = err_f.readlines() if len(std_err) >
MAX_ERR_LINES: stderr_message = 'Output is too long, please check
make_err.log' elif len(std_err) == 0: stderr_message = '' else: stderr_message
= ''.join(std_err) if stderr_message != '': if p.returncode != 0:
log.error(stderr_message) else: log.warning(stderr_message) dur = time() - t0
if info_str != '\n': log.info(info_str) log.info(f'execution duration
{dur:.1f} sec') for file• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
in glob.glob(r'debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug
/*.bin• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл
'): log.info(f'binary file• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

{file• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
}') return p.returncode Что происходит внутри функции run_cmd

reg_exпаттерн, по которому можно отловить вывод от нормально
скомпилированного файла• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
и отделить его от всего остального. Переменная N
нужна, если вы заранее знаете сколько файлов• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
придется скомпилировать, она
используется внутри прогресс-бара, если подать ее на вход функции, то в
процессе сборки можно видеть сколько из скольких файлов• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
скомпилировалось —
мелочь, а приятно. Если N не указать, то в прогресс-баре будет просто счетчик.
Кстати, получить это число можно, если перед сборкой запустить утилиту• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита
для
получения compilation database (compile_commands.json), наподобие такой . А
потом уже из этого json’а получить информацию и количестве компилируемых
файлов• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
. Дальше при помощи Popen отдельным процессом вызываем команду make• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Make
с
необходимыми аргументами и pollим ее, попутно проверяя, что она выдает в
stdout (тут нам как раз-таки и нужен паттерн reg_ex ), чтобы подсунуть это в
прогресс-бар и залогировать. А то, что получаем в stderr , пишем в файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
(снова
спасибо Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
). Принтуем в консоль все, что осталось и проверяем итоговый
бинарный файл• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл
с прошивкой.

Небольшая ремарка про VSCode. Там есть удобная штукатаски . Документация
весьма подробная, но все равно покажу, как у нас это получилось.

{ "version": "2.0.0", "windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
": { "options": { "shell": { "executable":
"cmd.exe• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows » .EXE

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows » .EXE

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows » .EXE
", "args": [ "/C", "sh" ] } } }, "problemMatcher": "$gcc", "tasks": [
{ "label": "❌ Clean", "type": "shell", "command• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Команда (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)
": "./builder.sh", "args":
["clean"], "group": { "kind": "build", "isDefault": true } }, { "label":
"⛏️🟢 | Build: app-prd", "type": "shell", "command• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Команда (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)
": "./builder.sh", "args":
["build", "app_prd"], "group": { "kind": "build", "isDefault": true } } ] }

Выше показан пример конфигурационного json'а ( .vscode/tasks.json ), по нему
видно, что у нас вызывается не make напрямую, а builder.sh . А аргументы,
указанные в таске, передаются вплоть до функции run_cmd , которую мы разобрали
выше.

Так, нажимая Ctrl+Shift+B, получаете выпадающее меню, как на картинке ниже.
Клик — и побежала сборка. Даже не нужно вспоминать, что именно вбить в
терминал, чтобы собрать прошивку. В примере я оставил пару вариантов, на деле
их у нас около десятка, так что функционал с тасками приходится кстати.

Так происходила сборка до перехода с чистого make на связку python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python-make и
после. Обе гифки ускорены в 10 раз, так что не думайте, что на деле все так
быстро.

Информации, получаемой из Матрицы, гораздо больше, чем ты можешь
расшифровать. Ты привыкнешь к этому. Я уже даже не вижу код. Я вижу блондинку,
брюнетку, рыжую. ”

Выглядит, конечно, уже не так атмосферно, но прогресс-бар прямо доставляет.

Хорошо, мы реализовали создание venv на разных платформах, выстроили процесс
сборки с логированием и прочими плюшками. Но это все равно требует
предустановленного компилятора и самого Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python. А тут существует, например,
риск различия версий у разработчиков. Да и в целом хочется как-то это все
упаковать. Но не в пакет же и не в сумку. Точно, в контейнер! Что же,
попробуем пойти в docker.

Docker, который не смог

За базу возьмем Ubuntu• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu
, где есть около последний Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python, поставим туда
компилятор — и вот он наш образ. Вроде все, можно запускать контейнер… Или не
все? А собирать-то что будем? Значит, перед тем как запускать контейнер, нужно
подготовить папку с проектом (в ней должны быть все файлы• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
, необходимые для
сборки прошивки) и сделать из нее docker volume. Ну или сделать bind mount при
запуске контейнера.

Если вкратце, в docker есть два основных способа работы с директорией,
расположенной на хосте:

Bind mounts — это когда папка по-прежнему размещается на хосте, но
синхронизируется с контейнером посредством самого докера. Создается так
называемый anonymous volume и все изменения в этой папке, сделанные на хосте,
отражаются в контейнере, и наоборот. Такой подход удобен во всех смыслах,
кроме скорости (на Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
и Mac сборка проекта в разы медленнее, на Linux
скорость такая же как и при использовании volumes).

Volumes — это когда создается отдельная сущность персистентного хранилища,
которое присоединяется к контейнеру и позволяет сохранять данные даже после
удаления контейнера, или использовать одни и те же данные в разных
контейнерах. Проблема в том, что в volume данные с хоста можно перенести
только при помощи docker cp . В таком случае нужно либо работать над проектом
непосредственно в контейнере, либо каждый раз синхронизировать данные между
хостом и volumeом. Впрочем, есть один проект, где попытались автоматизировать
эту синхронизацию http://docker-sync.io/ , но как будто бы игра не стоит свеч.

Казалось бы, что может пойти не так?

Небольшое лирическое отступление про скорость сборки. На Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
полная сборка
нашего проекта без использования docker в среднем занимает минуту с небольшим.
В то время как на Linux и на macOS это несколько секунд… Несколько секунд,
Карл!

Изначально мы работали на Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
и уже смирились с таким порядком вещей. К
тому же обычно собираешь прошивку целиком только когда вносишь какие-то
глобальные изменения. А потом, работая над какой-либо фичей, меняешь несколько
файлов• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
, и make позволяет тебе пересобрать только их. Это сильно ускоряет
процесс, вместо пары сотен файлов• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
компилируется несколько, что занимает все те
же пару секунд. Поэтому в повседневной работе над проектом разница между
Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
и остальными ОС не так уж и заметна.

Но ведь в docker у нас Ubuntu• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu
, так что все в порядке. Или не в порядке
Приведу список• Информационные технологии » Информатика » Мультисписок возможных раскладов по скоростям сборки в docker для Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
,
так как это основная используемая ОС (ну и на Linux все работает быстро, как с
docker, так и без него).

Bind Mount

Volume

Local (no docker)

Linux

10сек

—//—

—//—

Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

~640сек

20сек

~90сек

Основная проблема заключается в том, что для работы docker’а на Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
в
качестве бэкенда используется WSL , и все веселье начинается, когда несколько
сотен файлов• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
, которые необходимо скомпилировать, лежат в файловой системе• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор

винды• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
, но при этом сам компилятор находится в контейнере. Поэтому если весь
проект скопипастить прямо в контейнер, то скорость приемлемая даже на винде. А
вот если использовать Bind Mount, который, видимо, использует какую-то
постоянную синхронизацию между файловыми системами• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор
у себя внутри, то
становится понятно, откуда берутся 10 минут на сборку одной прошивки

А теперь давайте посмотрим какие варианты костылей решений мы имеем:

Разработчики, использующие VSCode, могут вести разработку прямо в контейнере
https://code.visualstudio.com/docs/devcontainers/containers . И это в каком-то
смысле решает проблему с синхронизацией, поскольку позволяет работать с кодом
проекта прямо в контейнере, к которому присоединен отдельный volume, и где
проект и компилируется. Но это только для VSCode и требует отдельной настройки
(хотя вроде и несложной), плюс пока непонятно как в такой ситуации работать с
gitом.

Еще для Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
есть вариант перенести проект непосредственно в WSL, и делать
тот же bind mount. В таком случае он должен работать значительно быстрее. То
есть контейнер нужно запускать из WSL и при этом делать bind mount директории,
которую мы перенесли туда же. Но чтобы пользоваться gitом снова нужно
заморочиться. Например, для gitkraken, который мы используем в качестве
Git-клиента, можно установить отдельную версию для WSL (он умеет работать с
директорией внутри WSL, но непредсказуемо
https://help.gitkraken.com/gitkraken-client/windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
-subsystem-for-linux/ ). В
целом, это вариант, потому что для его реализации нужен только WSL2.

Также удалось реализовать некое подобие синхронизации через rsync между папкой
с проектом в Linux и на Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
.

docker run -t -d --name firmware -v
\\\\wsl.localhost\\Ubuntu• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu
\\home\\faruk\\my_project:/my_project firmware rsync
-ar --exclude .git --exclude .vscode --delete ~/my_project/
/mnt/c/Users/my_project/

Хотя и с нюансами, но работает. Даже чуть быстрее, чем сборка локально (~26сек
сборка + по несколько секунд на перенос туда-сюда).

Docker на Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
vs Docker на Linux

До сих пор мы говорили про сборку только одной прошивки, однако на практике мы
имеем дело с разными платформами, а также с разными моделями самокатов• Транспорт » Транспортные средства » Самокат, к тому
же у нас разделены загрузчик и приложение..

У нас есть IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей-модули как на чипах ST, так и на NXP, спасибо ковиду и
чипогеддону. И потенциально они могут быть на любых чипах, и на любых
модификациях чипов, и на одних и тех же чипах, но с измененной распиновкой. В
общем, зоопарк еще тот, но это было единственно правильным решением, к
которому рано или поздно должны прийти все крупные программно-аппаратные
решения• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Программно-аппаратный комплекс

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Программно-аппаратный комплекс
слой приложения абстрагирован от железа, на котором он исполняется.
Однако это тема для другой статьи о том, как мы уживаем 50+ модификаций
IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей-прошивки в одном репозитории и почему иначе невозможно.

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

Опять же, если для повседневной работы можно смириться со скоростью сборки на
Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
, то собрать релиз (несколько десятков прошивок), ну, в общем, да

Разработчик собирает релиз на Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
.

Впрочем, docker нам все-таки сильно пригодился, потому что мы пошли в CI/CD ,
а там без него никуда. Эта тема тоже тянет на отдельную статью, но если в двух
словах… Например, у нас есть gitlab-проект со всеми файлами• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
, необходимыми для
сборки нашей прошивки. Если настроить gitlab-ci.yml чтобы в качестве образа
для runner’а он использовал наш образ с Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python и компилятором, а в качестве
основной команды• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Команда (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)
(т.е. параметра script• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Скриптовые Языки
) выполнял ./builder.sh build all , то
при запуске пайплайна (например, push в master или при простановке тега) мы
получим все необходимые прошивки в качестве артефактов. А там уже можно делать
с ними все что угодно: заливать в облако, тестировать и прочее. А —
автоматизация• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Программно-аппаратный комплекс

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Программно-аппаратный комплекс
.

Однако пока оставим про запас вариант с использованием docker в качестве
основного инструмента для сборки. Тем более, что по мере всех экспериментов с
Linux и контейнерами, нам пришла очередная идея:

А что, если не пытаться стандартизировать и упаковывать все необходимое для
сборки, а просто посадить всех разработчиков на одну машину?

По идее, получится некий референсный компьютер, на котором установлено все
необходимое. Если мы своим отделом захотим перейти на новую версию
компилятора, не нужно просить каждого разработчика, достаточно сменить версию
на этом одном компьютере. Назвали мы это Build Server (да-да, нейминг может
немного путать ).

Сервер, который собирает

Этот путь мы проходили, почти не имея конкретного опыта, поэтому сделали, как
получилось. Будем очень рады комментариям. А вообще, если гуглить про
удаленную сборку именно в рамках embedded, то ничего толком и не найдется .
Поначалу нас это смутило, но руки так и чесались попробовать.

Идея сделать отдельный сервер для сборки — совсем не новая. Забегая вперед,
наличие такого сервера дало нам набор преимуществ:

реализовали не только удаленную сборку, но и удаленную отладкуконтексте
embedded — это не новое, но кажется, что у нас получилось то, что хорошо
решает наши задачи);

если что-то при сборке идет не так, всегда можно дополнительно прогнать
процесс на сервере и убедиться, что проблема не в чем-то, связанном конкретно
с твоим ПК (особенно актуально, если ты на Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
… Ладно-ладно, я не хейтер
винды• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
, просто так сложилось);

удобно иметь рабочий сервер, на нем, например, живет наш внутренний сервисный
телеграм-бот• Информационные технологии » Информатика » Программирование » Программное обеспечение » Боты

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Боты

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Боты
и крутится контейнер для сбора метрик;

в случае чего, можно даже с личного ноутбука (при наличии доступов)
подключиться по SSH к серверу и оперативно что-то пофиксить и раскатить.

Мы попросили наших DevOps организовать нам отдельный сервер, а в целях
безопасности сразу сделать так, чтобы подключиться к нему можно было только из
офисной подсети или через отдельный VPN. Так мы получили машину с Ubuntu• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » Linux » Дистрибутивы Linux » Ubuntu
,
последней версией arm-none-eabi тулчейна, Python• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Python и возможностью подключаться
по SSH с рабочего ноутбука. Дальше стояла задача сделать отдельный доступ к
этой машине всем разработчикам нашего отдела, чтобы у них были свои учетки и
директории. А чтобы не мучиться и не создавать все это вручную, решено было
сразу пойти в автоматизацию• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Программно-аппаратный комплекс

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Программно-аппаратный комплекс
управления конфигурациями, серверами и пр. Поэтому
я обратился к гуглу с запросом «Ansible для чайников за 0,5 секунд»… Полдня
спустя у меня получилось нечто подобное (файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
bs_config.yaml ):

- hosts• Телекоммуникации и связь » Компьютерная сеть » Интернет » DNS » Hosts: localhost become: true vars: bs_users: developerone: pass:
'strongestpasswordever' ssh_key: ssh-rsa blaBlalba developertwo: pass:
'secondstrongestpassword' ssh_key: ssh-rsa BlablaBla tasks: - name: debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug
: msg: "{{ item }} : {{ bs_users[item]['pass'] }} - {{
bs_users[item]['ssh_key'] }}" with_items: "{{ bs_users.keys() | list• Информационные технологии » Информатика » Мультисписок }}" -
name: Create user user: name: "{{ item }}" password: "{{
bs_users[item]['pass'] }}" groups: - docker - sudo state: present system: no
createhome: yes with_items: "{{ bs_users.keys() | list• Информационные технологии » Информатика » Мультисписок }}" - name: Set
authorized key ansible.posix.authorized_key: user: "{{ item }}" key: "{{
bs_users[item]['ssh_key'] }}" state: present exclusive: true with_items: "{{
bs_users.keys() | list• Информационные технологии » Информатика » Мультисписок }}"

Теперь достаточно попросить разработчиков сделать ssh-ключи, добавить их в
.yaml файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
и запустить playbook на билд-сервере при помощи ansible-playbook
bs_config.yaml .

В целом, ничего сложного, однако, когда делаешь это впервые и не имеешь
девопсового бэкграунда, работа немного похожа на магию. Можно в один конфиг• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения
и
одной командой• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Команда (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)
настроить целый сервер или даже целую кучу серверов. По
сравнению с написанием кода на сях, который надо отдельно компилировать,
отдельно заливать на МК, чтобы светодиодом поморгать, ansible-playbook
config.yaml — это вингардиум левиоса• Объект человек » Персоналии по алфавиту » Персоналии на Га » Гарри Поттер » Заклинания из Гарри Поттера » Вингардиум Левиоса, не меньше.

Осталось только разобраться с Git, но тут уж точно ничего сложного. Если не
считать танцев• Танцы » Танцевальное искусство с бубном, чтобы на Windows• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Операционные Системы Майкрософт » Microsoft Windows
(опять же, говорю вам, я не хейтер)
сделать SSH Agent Forwarding. Вкратце, он позволяет, используя один и тот же
SSH-ключ, переходить с одного удаленного подключения на другое. В контексте
нашей истории он достаточно удобен для использования с Git.

Пример. Разработчик из нашего отдела сгенерировал и передал мне public key, я
добавил его на Build Server при помощи ansible. Теперь у него есть доступ. Но
чтобы работать там с кодом проекта, ему нужно сделать git clone . Тут на
помощь приходит agent forwarding. Если разработчик включит его на своем
рабочем ноуте, добавит тот же public key в свою учетку в gitlab, он сможет без
проблем сделать git clone . В противном случае ему нужно будет либо сделать
gitlab login , либо создать еще один ключ, но уже на Build Server и уже его
добавить к себе в gitlab. Но это детали, на возможность работы с сервером они
не влияют, только на удобство.

Еще пару слов о VSCode, потому что и здесь он оказывается удобным. В VSCode
есть такая вещь, как remote extension для SSH. Деталей про внутрянку не знаю,
но на практике разработчик не чувствует разницы при работе над проектом на
локальном компьютере или удаленно. То же окно, тот же функционал, даже
расширения те же (только их нужно включить отдельно для remote).

Найдите 5 отличий.

Отладка, которая удаленная

Что ж, со сборкой прошивки вроде бы разобрались, но конечная цель — не просто
собрать прошивку, а запустить ее на IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей-модуле, убедиться, что все работает
корректно, и при необходимости отдебажить. Если вам показалось, что отдебажить
— это завуалированное ругательство

При написании ПО для микроконтроллеров• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры (впрочем, это применимо к написанию
любого ПО), есть процесс отладки. Во время него, используя специальный
программатор, подключенный к IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей модулю, прошивка заливается в память
микроконтроллера• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры. А после сам микроконтроллер• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры запускается в режиме дебага,
который позволяет ставить его на паузу, смотреть значение переменных, стек
вызовов• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования » Стек вызовов

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Стек вызовов

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования » Стек вызовов
и так далее. Словом, позволяет посмотреть, что происходит внутри. Это
критически необходимый процесс при разработке ПО для embedded-систем.

Пишешь код, локально собираешь файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
прошивки, при помощи программатора,
физически подключенного к твоему ноутбуку, заливаешь прошивку в память и
дебажишь. Даже доступ в интернет• Телекоммуникации и связь » Компьютерная сеть » Интернет » Доступ в интернет не нужен (пока не вылезет ошибка и не
придется идти на Stack Overflow).

Как же быть, если прошивка собрана удаленно на машине, к которой нет
физического доступа? Или если IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей с конкретным самокатом, на котором нужно
отладиться, находится в другом городе?

Чтобы разобраться с этим, нужно глубже копнуть в то, как происходит дебаг. В
нашем случае для отладки используется arm-none-eabi-gdb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
— это часть тулчейна
для разработки под микроконтроллеры• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры с архитектурой arm. Немного про GDB• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

GDB• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
— это GNU Debugger• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
для программ, собранных при помощи GCC. Это также и
фреймворк для дебага, поддерживающий сторонние фронтенды и специфичные для
разных устройств бэкенды. Также у GDB• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
есть опция удаленной отладки.

Чтобы пояснить про удаленную отладку, процитирую Вики:

При удаленной отладке GDB• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
запускается на одной машине, а отлаживаемая
программа запускается на другой. Связь по специальному протоколу через
последовательный порт• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » Последовательный порт

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » Последовательный порт
или TCP/IP• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP. Протокол взаимодействия с отладчиком• Информационные технологии » Информатика » Программирование » Отладчики

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики

специфичен для GDB• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
, но исходные коды необходимых подпрограмм• Информационные технологии » Информатика » Программирование » Программное обеспечение » Языки программирования

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Языки программирования
включены в архив
отладчика• Информационные технологии » Информатика » Программирование » Отладчики

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики
. Как альтернатива, на целевой платформе может быть запущена
использующая тот же протокол программа gdbserver из состава пакета GDB• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
,
исполняющая низкоуровневые функции, такие как установка точек останова и
доступа к регистрам и памяти.

На микроконтроллерах• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры, таких как ARM Cortex M, совсем непрактично запускать
gdbserver. Обычно эти микроконтроллеры• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры предоставляют хардварную поддержку для
установки breakpoint’ов, stepping’а и так далее. Это можно сделать с помощью
специальных выводов (pin — ножки). У arm’овских чипов для этого есть SWD или
JTAG. Однако в этом случае требуется специальное устройство, которое служило
бы мостом между gdbserver и микроконтроллером• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры. Для этого используются
программаторы, например, STLink, J-Link, BlackMagic и другие. Обычно для
каждого программатора существует своя утилита• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита
. Но есть и универсальные open
source• Информационные технологии » Информатика » Программирование » Программное обеспечение » Свободное программное обеспечение » Открытое программное обеспечение

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Свободное программное обеспечение » Открытое программное обеспечение

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Свободное программное обеспечение » Открытое программное обеспечение
(и не только) решения, которые могут работать с разными
программаторами, например, OpenOCD.

Снова Вики:

В соответствии с идеологией ведущих разработчиков FSF , GDB• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
вместо
собственного графического пользовательского интерфейса предоставляет
возможность подключения к внешним IDE , управляющим графическим оболочкам либо
использовать стандартный консольный текстовый интерфейс• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс
.

Да, можно использовать gdb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
через консоль и дебажить прошивку через текстовый
вывод. Но не думаю, что у вас это нормально получится. А если все-таки
получится, отметьте, пожалуйста, картинки со светофорами...

В VSCode, например, для взаимодействия между gdb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
и разработчиком (так, чтобы
проставлять breakpoint’ы мышкой прямо в коде, а не писать отдельную команду• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Команда (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)
в
консоль), используется расширение cortex-debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug
.

Таким образом, удаленная отладка микроконтроллеров• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры вполне возможна, и у нас
встает лишь вопрос выбора программатора и утилиты• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Информационные технологии » Информатика » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Прикладное программное обеспечение » Утилита
под него. Так как в нашем
зоопарке есть и ST’шные чипы, и NXP, то STLink нам не подходит. Помимо него
есть также весьма популярный J-Link, и с ним прямо из коробки дружат оба
используемых нами чипа, но у J-Link довольно занимательная реализация
удаленного дебага , поэтому его мы оставим как план Б. Также есть Black Magic
Probe . Проект открытый, комьюнити живое, примеров достаточно, еще и
поддерживает все необходимые чипы. Вот его и попробуем.

Тут мы пошли чуть дальше и изготовили для сервисных и отладочных нужд две
сотни кастомных программаторов, форкнули репозиторий BMP и добавили поддержку
всех камней, которые используем в разработке. Получилось очень удобное, не
привязанное к вендору решение, железо и софт которого мы умеем кастомизировать
под свои нужды. Может быть, расскажем об этом как-нибудь чуть подробнее.

https://github.com/compuphase/Black-Magic-Probe-Book

BMP уже включает в себя gdbserver, при этом сам программатор, подключенный к
хосту, выглядит как serial port• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » Последовательный порт

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » Последовательный порт
. То есть нам достаточно на стороне gdb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
клиента
использовать этот порт• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт для подключения.

Для начала сделаем простой proof of concept и попробуем подебажить IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей через
локальную сеть• Телекоммуникации и связь » Компьютерная сеть » Локальная вычислительная сеть. Нам понадобятся: ноутбук со средой разработки и компилятором,
при помощи которого мы будем собирать прошивку; собственно сам IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей-модуль;
Black Magic Probe, подключенный к IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей; компьютер, можно одноплатник (мы
использовали OrangePi), к которому будет подключаться Black Magic; и можно еще
отдельный роутер для удобства.

Чтобы все заработало, нужно определить по какому адресу в сети находится
одноплатник. На самом одноплатнике, BMP, подключенный по USB• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » USB

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » USB
, будет
определяться как serial port• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » Последовательный порт

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » Последовательный порт
, поэтому еще нужно сделать так, чтобы он был
виден извне. А для этого можно использовать например ser2net . Итак, на своем
ноутбуке делаем make build, затем запускаем gdb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
, подключаемся к таргету по
адресу {IP одноплатника}:{порт• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт ser2net} , и дальше можем делать с МК на IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей’е
в другом конце комнаты halt, flash, reset и прочие прелести дебага.

Ниже пример конфигурационного файла• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения
для ser2net, который позволяет настроить
проброс BMP в порты• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт 3000 и 3001 (один из портов, как раз и есть gdbserver, а
второй служит вспомогательным интерфейсом для подключения к uart’у
программатора):

%YAML 1.1 --- # This is a ser2net configuration file• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения
, tailored to be rather #
simple. # # Find detailed documentation in ser2net.yaml(5) # A fully featured
configuration file• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения
is in # /usr/share/doc/ser2net/examples/ser2net.yaml.gz # #
If you find your configuration more useful than this very simple # one, please
submit it as a bugreport define: &banner \r\nser2net port• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт \p device \d
[\B
] (Debian GNU/Linux)\r\n\r\n connection: &con0192 accepter: tcp• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт,3000
enable: on options: banner: *banner kickolduser: true telnet-brk-on-sync: true
connector: serialdev, /dev/bmp_gdb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
, 115200n81,local nobreak connection:
&con1192 accepter: tcp• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт,3001 enable: on options: banner: *banner
kickolduser: true telnet-brk-on-sync: true connector: serialdev,
/dev/bmp_serial, 115200n81,local nobreak

Вот мы и получили некий отладочный узел, или, как мы его назвали, Debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug
Node.
Он состоит из одноплатника с выходом в интернет• Телекоммуникации и связь » Компьютерная сеть » Интернет, к которому подключен BMP, в
свою очередь подключенный к IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей. Так как нет большого смысла отлаживаться
удаленно, когда IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей находится в соседней комнате, вариант с отдельным роутером
нужно масштабировать и придумать решение, которое бы позволило делать то же
самое, но при условии, что одноплатник вместе с IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей подключены к какой-то
неизвестной нам сети. И для этого нам нужна своя отдельная виртуальная сеть,
то есть VPN.

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

В первую очередь нам необходим управляющий сервер. У Tailscale есть готовое
решение и бесплатный Tier. Но также есть open source• Информационные технологии » Информатика » Программирование » Программное обеспечение » Свободное программное обеспечение » Открытое программное обеспечение

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Свободное программное обеспечение » Открытое программное обеспечение

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Свободное программное обеспечение » Открытое программное обеспечение
реализация control
server’а для Tailscale, называется Headscale . Занимательный факт

This project is not associated with Tailscale Inc. However, one of the active
maintainers for Headscale is employed by Tailscale and he is allowed to spend
work hours contributing to the project. Contributions from this maintainer are
reviewed by other maintainers.

Развертывание Headscale мы отдали девопсам, а на выходе получили веб-интерфейс• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Веб-приложение
и возможность по специальному ключу подключать к сети клиентов, в нашем случае
Debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug
Node (то есть одноплатники):

tailscale up --login-server <https://ourserver.com/> --accept-dns• Телекоммуникации и связь » Компьютерная сеть » Интернет » DNS=true
--auth-key=ourkeyfromheadscale

Так выглядит страничка веб-интерфейса• Телекоммуникации и связь » Компьютерная сеть » Интернет » Веб-программирование » Веб-приложение с ключами для подключения клиентов.

А так выглядит уже подключенное устройство с именем, группой и адресом.

Так мы получили возможность вводить в свою сеть любое устройство в любой точке
мира и иметь доступ к нему по конкретному IP-адресу. Кстати, применяем это не
только для своих отладочных узлов, но и для тестовых стендов. Такие стенды
используются нами при производстве новых IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей-модулей. Обычно стенд включает в
себя различную хардварную обвязку, а также одноплатник, что позволяет нам
иметь к нему защищенное подключение, даже если мы отправили его в Китай и
используем при тестировании модулей, только что сошедших с конвейера .

Для удобства создадим мастер-образ для OrangePi, который превратит любую новую
апельсинку из магазина в основу нашей Debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug
Node. Возьмем новый одноплатник и
зальем на него мастер-образ, который запустит на нем Tailscale-клиент и таким
образом получит свой адрес в нашей сети. Затем внесем этот адрес в специальный
конфиг• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Конфигурация программного обеспечения
-файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
. С помощью этого файла• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
и знакомого нам Ansible мы сможем легко
настроить все ноды одновременно.

Файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
inventory.yaml со списком• Информационные технологии » Информатика » Мультисписок нод и их параметрами.

--- debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug
_nodes: hosts• Телекоммуникации и связь » Компьютерная сеть » Интернет » DNS » Hosts: 100.64.0.1: ansible_user: "dn" vars: name:
0207e6ba6c28 id: 1 comment: region: MOW 100.64.0.11: ansible_user: "dn" vars:
name: 0207b8238ff8 id: 2 comment: region: MOW

Файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
nodes_config.yaml со списком• Информационные технологии » Информатика » Мультисписок действий, которые необходимо выполнить для
настройки каждой ноды.

--- - hosts• Телекоммуникации и связь » Компьютерная сеть » Интернет » DNS » Hosts: debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug
_nodes become: true vars: dn_users: - "{{ ansible_user }}"
tasks: - name: Set authorized key for admin ansible.posix.authorized_key:
user: "{{ ansible_user }}" key: ssh-rsa someadminsshkey state: present
exclusive: true - name: Create list• Информационные технологии » Информатика » Мультисписок of users command• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Команда (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)
: awk -F{{':'}} '$3 >=
1000 && $1 != "nobody" {print $1}' /etc/passwd• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » UNIX » Fhs/etc/passwd

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Fhs/etc/passwd

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Fhs/etc/passwd
changed_when: false
register: curr_users - name: Determine users to be removed set_fact:
remove_users: "{{ curr_users.stdout_lines | difference(dn_users) }}" - name:
Remove user accounts user: name: "{{ item }}" state: absent remove: true
with_items: "{{ remove_users }}" - name: Copy file• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
with rules copy: src:
dn_files/99-usb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » USB

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » USB
-bmp.rules dest: /etc/udev/rules.d/99-usb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » USB

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » USB
-bmp.rules - name:
Restart udev shell: udevadm control --reload-rules && udevadm trigger
- name: Install ser2net apt: name: ser2net state: present - name: Copy file• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

ser2net config copy: src: dn_files/ser2net.yaml dest: /etc/ser2net.yaml -
name: Start ser2net service: name: ser2net state: started - name: Add ser2net
restart cmd to cron shell: | echo• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » UNIX » Утилиты Unix » Echo
"@reboot sleep 10 && sudo service
ser2net restart" >> ser2net-restart-cron crontab ser2net-restart-cron rm
ser2net-restart-cron crontab -l - name: Set a hostname hostname: name: "{{
ansible_user }}-{{ hostvars[inventory_hostname]['vars']['id'] }}-{{
hostvars[inventory_hostname]['vars']['name'] }}" - name: Unconditionally
reboot the machine with all defaults reboot:

Магия происходит, когда в терминале делаешь:

ansible-playbook -i inventory.yaml nodes_config.yaml

Теперь мы можем отправлять наши Debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug
Node в любой сервисный центр, где есть
wifi, подключать к самокатам• Транспорт » Транспортные средства » Самокат и удаленно отлаживать на них прошивку. Работать
это будет так же, как и в нашем proof of concept, но с использованием
Tailscale-сети.

Еще немного грабель

Казалось бы, все работаетсборка, отладка. Однако и здесь, к сожалению, не
обошлось без нюансов. Дело в том, что локально файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
прошивки заливается на IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей
буквально за пару секунд. Весит он немного, да и скорость передачи получается
достаточной. Ну и, собственно, так как пинг минимальный, то и время реакции на
gdb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
-команды• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Команда (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)
— совсем небольшое, даже не обращаешь на это внимания.

Но что же происходит, когда мы пытаемся залить прошивку на МК и отладить его
удаленно?

Визуализируем: разработчик сидит в офисе в Москве• Россия » Регионы России » Субъекты Российской Федерации » Города федерального значения России » Москва за рабочим ноутбуком, у него
открыт VSCode, при помощи которого он подключен к Build Server’у. BS, к слову,
может находиться в любом уголке планеты. Там у него открыт проект с кодом
прошивки IoT• Телекоммуникации и связь » Компьютерная сеть » Интернет » Интернет вещей, и, допустим, лежит уже скомпилированный бинарник• Информационные технологии » Информатика » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Программное обеспечение » Форматы данных » Формат файла » Двоичный файл
. Разработчик
нажимает F5 на своем ноутбуке, и эта же команда• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Команда (программирование)

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Команда (программирование)
исполняется на Build Server.
При этом на нем запускается gdb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
-клиент, который пытается подключиться к
gdb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
-серверу по адресу Debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug
Node в сети Tailscale. Причем, порт• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт используется
виртуальный, который на самом деле является serial портом• Телекоммуникации и связь » Компьютерная сеть » Интернет » Протокол передачи данных » TCP/IP » Tcp-порт, прокинутым при
помощи ser2net от BMP, подключенного к OrangePi по USB• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » USB

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Компьютерные шины » USB
.

Я пытаюсь объяснить коллегам как отлаживаться на Debug• Информационные технологии » Информатика » Программирование » Отладчики » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Интерфейс пользователя » Текстовый интерфейс » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » DOS » Debug

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » Debug
Nodeах

Когда мы впервые попробовали запустить этот процесс, оказалось, что одна
только загрузка прошивки в микроконтроллер• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры занимает пару минут…

Здесь ключевой момент — пинг. Дело в том, что gdb• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
-протокол подразумевает
подтверждение прихода пакетов. Когда клиент что-то отправляет серверу (или
наоборот), в обратную сторону идет ответ (ack), и только после этого следует
новая отправка. При этом файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл
прошивки передается не целиком, а блоками. То
есть, по сути, размер блока определяет то, на сколько частей будет разбит файл• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Загрузочный сектор » Файл

прошивки. Следовательно, количество частей, умноженное минимум на два (каждая
передача с клиента на сервер сопровождается ответом OK от сервера) и
умноженное на пинг между ними, будет временем, необходимым на загрузку
прошивки в микроконтроллер• Электроника » Электронные компоненты » Интегральные схемы » Цифровые интегральные схемы » Микроконтроллеры при удаленной отладке.

Напрашивается вопрос: как же тогда определяется размер блока? Как только
происходит коннект между клиентом и сервером, им нужно договориться и понять,
кто на что способен, какие функции поддерживаются и так далее. В том числе и
максимальный размер пакетов, которыми они обмениваются. Для этого используется
qSupported , в ответ на него сервер говорит, какой размер пакета в байтах
может принять. Если говорить конкретно про BMP, то, по сути, это параметр,
который определяется в прошивке самого отладчика• Информационные технологии » Информатика » Программирование » Отладчики

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики
— #define
GDB• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информатика » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Информационные технологии » Информатика » Программирование » Отладчики » GNU Debugger

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики » GNU Debugger

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Платформы программирования » Операционные системы » Юникс-подобные операционные системы » GNU » GNU Debugger
_PACKET_BUFFER_SIZE 1024U , а его максимальное значение обусловлено
размером свободной оперативной памяти• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Запоминающее устройство » Оперативная память

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Запоминающее устройство » Оперативная память
отладчика• Информационные технологии » Информатика » Программирование » Отладчики

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики
.

Изначально у нас был установлен дефолтный для проекта размер буфера в 1кБ, а
при прошивке размером примерно 300кБ и пинге в несколько сотен миллисекунд
неудивительно, что загрузка прошивки занимала столько времени. Чтобы
значительно ускорить этот процесс, достаточно просто увеличить размер этого
буфера при условии, что на отладчике• Информационные технологии » Информатика » Программирование » Отладчики

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики
достаточно оперативной памяти• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Запоминающее устройство » Оперативная память

• Высокие технологии » Информационные технологии и телекоммуникации » Вычислительная техника » Компьютер » Запоминающее устройство » Оперативная память
(а с нашим
кастомным отладчиком• Информационные технологии » Информатика » Программирование » Отладчики

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики
размер этого буфера можно увеличить до 32кБ). Однако мы
не сразу пришли к этому, и нам даже пришлось отлаживать отладчик• Информационные технологии » Информатика » Программирование » Отладчики

• Информационные технологии » Информационно-коммуникационные технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики

• Высокие технологии » Информационные технологии и телекоммуникации » Программирование » Отладчики
.

Когда бага в дебаге, то помочь может только дебаг дебагера

Вместо заключения

Это было легендарное приключение. Мы пожелали структурировать процесс сборки
прошивки, а в итоге смогли полностью его переделать, попутно сделав в базовом
виде CI/CD, запустив отдельный сервер для сборки (что, как выяснилось,
редкость для embedded) и реализовав удаленную (насколько это возможно)
отладку. Получилась не просто задачка, а целый эпик, и если честно, у меня он
один из самых любимых. Надеюсь, читать все это вам было так же увлекательно,
как мне все это делать. С нетерпением жду в комментариях ;)

============= Итог: 9,2670 ; Информационные технологии#Информатика#Программирование #Платформы программирования#Операционные системы#Загрузочный сектор#Файл 7,8483 ; Информационные технологии#Информатика#Программирование #Программное обеспечение#Форматы данных#Формат файла#Двоичный файл 7,6807 ; Информационные технологии#Информатика#Программирование#Отладчики #GNU Debugger 6,6807 ; Информационные технологии#Информатика#Программирование#Отладчики#Debug 6,6483 ; Информационные технологии#Информатика#Программирование #Программное обеспечение#Форматы данных#Формат файла #Конфигурация программного обеспечения 5,5227 ; Информационные технологии#Информатика#Мультисписок 5,3807 ; Информационные технологии#Информатика#Программирование #Интерфейс пользователя#Команда (программирование) 5,2466 ; Информационные технологии#Информатика#Программирование #Программное обеспечение#Языки программирования#Стек вызовов 5,2432 ; Информационные технологии#Информатика#Программирование #Программное обеспечение#Боты 5,1920 ; Информационные технологии#Информатика#Программирование #Платформы программирования#Операционные системы#UNIX#Fhs/etc/passwd 4,8460 ; Информационные технологии#Информатика#Программирование #Платформы программирования#Операционные системы#UNIX#Утилиты Unix#Echo 4,7766 ; Информационные технологии#Информационно-коммуникационные технологии #Информационные технологии и телекоммуникации#Вычислительная техника #Компьютер#Компьютерные шины#USB 4,6807 ; Информационные технологии#Информатика#Программирование#Java#Eclipse 3,8733 ; Информационные технологии#Информатика#Программирование #Программное обеспечение#Языки программирования#Скриптовые Языки#Bash 3,8480 ; Информационные технологии#Информатика#Программирование #Платформы программирования#Операционные системы #Юникс-подобные операционные системы#Linux#Дистрибутивы Linux#Ubuntu 3,7766 ; Информационные технологии#Информационно-коммуникационные технологии #Информационные технологии и телекоммуникации#Вычислительная техника #Компьютер#Компьютерные шины#Последовательный порт 3,3716 ; Информационные технологии#Информатика#Программирование #Программное обеспечение#Прикладное программное обеспечение#Утилита 3,3716 ; Информационные технологии#Информатика#Программирование #Программное обеспечение#Свободное программное обеспечение #Открытое программное обеспечение 3,3670 ; Информационные технологии#Информатика#Программирование #Платформы программирования#Операционные системы#Plan 9#UTF-8 3,1085 ; Информационные технологии#Информатика#Программирование #Платформы программирования#Операционные системы #Операционные Системы Майкрософт#Microsoft Windows#Windows NT 3,1085 ; Информационные технологии#Информатика#Программирование #Платформы программирования#Операционные системы #Операционные Системы Майкрософт#Microsoft Windows#.EXE 3,0460 ; Информационные технологии#Информатика#Программирование #Платформы программирования#Операционные системы#UNIX#Утилиты Unix#Make 2,8564 ; Информационные технологии#Информационно-коммуникационные технологии #Информационные технологии и телекоммуникации#Вычислительная техника #Программно-аппаратный комплекс 9,6379 ; Телекоммуникации и связь#Компьютерная сеть#Интернет#Веб-программирование #Python 6,4814 ; Телекоммуникации и связь#Компьютерная сеть#Интернет #Протокол передачи данных#TCP/IP#Tcp-порт 6,1379 ; Телекоммуникации и связь#Компьютерная сеть#Интернет#DNS#Hosts 6,0758 ; Телекоммуникации и связь#Компьютерная сеть#Интернет#Интернет вещей 4,6758 ; Телекоммуникации и связь#Компьютерная сеть#Интернет#Доступ в интернет 4,4266 ; Телекоммуникации и связь#Компьютерная сеть#Локальная вычислительная сеть 4,0379 ; Телекоммуникации и связь#Компьютерная сеть#Интернет#Веб-программирование #Веб-приложение 4,7523 ; Транспорт#Транспортные средства#Электросамокат#Кикшеринг#Whoosh#Самокат 3,2594 ; Транспорт#Транспортные средства#Самокат#Whoosh

============= Объекты: организации Whoosh Кикшеринг тип_поселения Москва город

============= Географические объекты: 1 55.755555556,37.617500000 Россия#Регионы России#Субъекты Российской Федерации #Города федерального значения России#Москва

============= Связи: Самокат # ассоциации # Whoosh


Copyright © 2007-2024 ООО «RelTeam»