Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (Сергей Старолетов, OSDAY-2025)

Материал из 0x1.tv

Докладчик
Сергей Старолетов.jpg
Сергей Старолетов

Доклад о разработке и отладке многопоточных операционных систем с раздельной архитектурой (partitioned systems) для микроконтроллеров STM32 на базе ARM. Ключевые сложности: необходимость работы с оборудованием на уровне абсолютных адресов и регистров, нехватку документации и скрытые особенности железа, что ведет к ошибкам и задержкам. В качестве решения предлагается использовать и адаптировать открытое ПО, например, концепт ОС POK (ARINC653-совместимый), разделяющий процессорное время и адресное пространство между изолированными разделами.

Для портирования подобных систем на ARM (в частности, STM32) рекомендуем использовать открытую экосистему ST: код BSP, HAL-библиотеки (GPIO, UART, CAN и др.), драйверы NVIC, MPU, а также FreeRTOS из STM32Cube. Это снижает барьер входа, несмотря на зависимость от вендора и закрытость некоторых решений. В работе демонстрируется практическая реализация многопоточного приложения с периферией на основе POK, включая применение подхода Model-Driven Development (MDD) в STM32CubeIDE для генерации кода.

Недостаточность эмуляторов типа QEMU для отладки, предлагается решить аппаратной связкой ST-Link/GDB.

Видео

Thesis

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

Многораздельные ОС как перспективное направление

Перспективным направлением операционных систем являются так называемые многораздельные (системы с разделами — партициями), которые разделяют процессорное время и адресное пространство между системными программами, которые к тому же могут быть отдельно настроены для выполнения только специфицированных заранее системных вызовов, выполняя какую-то специфическую работу внутри разделов в своих потоках исполнения. Примером концепта такой ОС является РОК, представленный в диссертации Жюльеном Деланжем [1].

При наличии работающего прототипа системы, который исправно планирует разделы и потоки в них, а также системных вызовов через программное прерывание (software interrupt) можно навесить клиентский интерфейс и сделать такую системы POSIX- или ARINC-совместимой для применения в какой-либо ответственной области.

Портирование проекта для ARM

Изучая исходные коды оригинального проекта [2], было установлено, что в целом он является ориентированным на х86-архитектуру (имеются также архитектурные части и для ррс и spark) и работает с устройствами, доступными в эмуляторе QEMU. Портирование для ARM такого проекта с учебными целями сопряжено с трудностями прежде всего в том, что имеется бесчисленное множество устройств с различными конфигурациями ARM-ядер и архитектура доступных решений для устройств массового применения в целом закрыта).

Платформы STM32 как решение

В это же время, в среде разработчиков микроконтроллеров для сферы Интернета вещей и DIY решений популярны STM32 семейства плат, которые имеют лицензированные ARM ядра (Cortex M3 или M7 и даже их связки M7/M4), но тут главное прежде всего то, что компанией ST поставляется открытый код на C, адаптированный для каждого конкретного микроконтроллера, содержащий:

  • BSP код инициализации устройства
  • Код для работы с контроллером прерываний NVIC
  • Код конфигурации часов/таймингов для всех подсистем на плате
  • Код для работы с MPU (модуля защиты памяти Cortex M7)
  • HAL библиотеки для работы с GPIO/UART/I2C/SPI/CAN
  • Набор структур данных и функций для работы с USB Host/Device
  • Код для работы с различными LCD экранами
  • А также исходный код FreeRTOS, что снимает вопросы по коду переключений задач

Имеется также код и примеры работы с различными DSP, а также запуска моделей ИИ на такого рода устройствах.

Конечно, все это ведет к зависимости от производителя ST (в данном случае еще и иностранного и недоступного в настоящий момент набора микросхем), но прекрасно может быть использовано для обучения и взятия лучших практик по подходам разработки под ARM.

Практическая реализация и отладка

В докладе предполагается показать шаги из опыта автора по получению работающего решения многопоточных приложений, работающих с периферией и действующих в стиле РОК. Ранее была рассмотрена модель такой операционной системы [3], а теперь и ее реализация на основе указанного открытого кода. Предполагается рассмотреть также подход в стиле MDD по графической конфигурации в средстве STM32CubeIDE с генерацией кода (что популярно для многораздельных систем).

Что касается отладки приложений, имеющиеся средства виртуализации для такого рода процессоров и периферии на основе QEMU [4] не являются достаточными, поэтому отладку целесообразнее производить на связке аппаратного отладчика ST-Link и GDB.

Заключение

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


Презентация

Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025).pdf
Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (OSDAY-2025)!.jpg

Примечания и ссылки

  1. Delange J., Lee L. POK, an ARINC653-compliant operating system released under the BSD license //13th Real-Time Linux Workshop. – 2011. – Т. 10. – С. 181-192.
  2. https://github.com/pok-kernel/pok
  3. Staroletov S. M. A formal model of a partitioned real-time operating system in Promela (OSDAY 2020) //Труды Института системного программирования РАН. – 2020. – Т. 32. – №. 6. – С. 49-66.
  4. https://github.com/beckus/qemu_stm32