Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (Сергей Старолетов, OSDAY-2025) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) (Новая страница: «;{{SpeakerInfo}}: {{Speaker|Сергей Старолетов}} <blockquote> </blockquote> {{VideoSection}} {{vimeoembed||800|450}} <!-- {{youtubelink|}} --> =…») |
StasFomin (обсуждение | вклад) (→Thesis) |
||
;{{SpeakerInfo}}: {{Speaker|Сергей Старолетов}}
<blockquote>
</blockquote>
{{VideoSection}}
{{vimeoembed||800|450}}
<!-- {{youtubelink|}} -->
== Thesis ==
Написание системного кода, а особенно кода операционных систем сопряжено с трудностями прежде всего в том, что приходится работать с оборудованием по абсолютным адресам и регистрами процессора, что требует наличия оригинальной документации на процессор и периферийные устройства и даже при ее наличии существует множество скрытых моментов, которые значительно увеличивают время разработки привносят ошибки и уязвимости. Поэтому целесообразнее развиваться в направлении изучения и переписывания открытого программного кода, к которому имеются примеры и который зарекомендовал себя в сообществах разработчиков.
=== Многораздельные ОС как перспективное направление ===
Перспективным направлением операционных систем являются так называемые многораздельные (системы с разделами — партициями), которые разделяют процессорное время и адресное пространство между системными программами, которые к тому же могут быть отдельно настроены для выполнения только специфицированных заранее системных вызовов, выполняя какую-то специфическую работу внутри разделов в своих потоках исполнения. Примером концепта такой ОС является <tt>РОК</tt>, представленный в диссертации Жюльеном Деланжем <ref name="Delange2011">Delange J., Lee L. POK, an ARINC653-compliant operating system released under the BSD license //13th Real-Time Linux Workshop. – 2011. – Т. 10. – С. 181-192.</ref>.
При наличии работающего прототипа системы, который исправно планирует разделы и потоки в них, а также системных вызовов через программное прерывание (''software interrupt'') можно навесить клиентский интерфейс и сделать такую системы <tt>POSIX</tt>- или <tt>ARINC</tt>-совместимой для применения в какой-либо ответственной области.
=== Портирование проекта для ARM ===
Изучая исходные коды оригинального проекта <ref name="POK-GitHub">https://github.com/pok-kernel/pok</ref>, было установлено, что в целом он является ориентированным на <tt>х86</tt>-архитектуру (имеются также архитектурные части и для <tt>ррс</tt> и <tt>spark</tt>) и работает с устройствами, доступными в эмуляторе <tt>QEMU</tt>. Портирование для <tt>ARM</tt> такого проекта с учебными целями сопряжено с трудностями прежде всего в том, что имеется бесчисленное множество устройств с различными конфигурациями <tt>ARM</tt>-ядер и архитектура доступных решений для устройств массового применения в целом закрыта).
=== Платформы STM32 как решение ===
В это же время, в среде разработчиков микроконтроллеров для сферы Интернета вещей и <tt>DIY</tt> решений популярны <tt>STM32</tt> семейства плат, которые имеют лицензированные <tt>ARM</tt> ядра (<tt>Cortex M3</tt> или <tt>M7</tt> и даже их связки <tt>M7/M4</tt>), но тут главное прежде всего то, что компанией <tt>ST</tt> поставляется открытый код на <tt>C</tt>, адаптированный для каждого конкретного микроконтроллера, содержащий:
* <tt>BSP</tt> код инициализации устройства
* Код для работы с контроллером прерываний <tt>NVIC</tt>
* Код конфигурации часов/таймингов для всех подсистем на плате
* Код для работы с <tt>MPU</tt> (модуля защиты памяти <tt>Cortex M7</tt>)
* <tt>HAL</tt> библиотеки для работы с <tt>GPIO/UART/I2C/SPI/CAN</tt>
* Набор структур данных и функций для работы с <tt>USB Host/Device</tt>
* Код для работы с различными <tt>LCD</tt> экранами
* А также исходный код <tt>FreeRTOS</tt>, что снимает вопросы по коду переключений задач
Имеется также код и примеры работы с различными <tt>DSP</tt>, а также запуска моделей <tt>ИИ</tt> на такого рода устройствах.
Конечно, все это ведет к зависимости от производителя <tt>ST</tt> (в данном случае еще и иностранного и недоступного в настоящий момент набора микросхем), но прекрасно может быть использовано для обучения и взятия лучших практик по подходам разработки под <tt>ARM</tt>.
=== Практическая реализация и отладка ===
В докладе предполагается показать шаги из опыта автора по получению работающего решения многопоточных приложений, работающих с периферией и действующих в стиле <tt>РОК</tt>. Ранее была рассмотрена модель такой операционной системы <ref name="Staroletov2020">Staroletov S. M. A formal model of a partitioned real-time operating system in Promela (OSDAY 2020) //Труды Института системного программирования РАН. – 2020. – Т. 32. – №. 6. – С. 49-66.</ref>, а теперь и ее реализация на основе указанного открытого кода. Предполагается рассмотреть также подход в стиле <tt>MDD</tt> по графической конфигурации в средстве <tt>STM32CubeIDE</tt> с генерацией кода (что популярно для многораздельных систем).
Что касается отладки приложений, имеющиеся средства виртуализации для такого рода процессоров и периферии на основе <tt>QEMU</tt> <ref name="QEMU-STM32">https://github.com/beckus/qemu_stm32</ref> не являются достаточными, поэтому отладку целесообразнее производить на связке аппаратного отладчика <tt>ST-Link</tt> и <tt>GDB</tt>.
=== Заключение ===
В итоге предполагаемый доклад может быть полезен программистам и исследователям, прежде всего с практической точки зрения и как старт для обучения.
{{SlidesSection}}
[[File:Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (Сергей Старолетов, OSDAY-2025).pdf|left|page=-|300px]]
{{----}}
[[File:{{#setmainimage:Вопросы разработки и отладки многораздельных операционных систем для ARM архитектуры микроконтроллеров STM32 (Сергей Старолетов, OSDAY-2025)!.jpg}}|center|640px]]
{{LinksSection}}
*
<!-- <blockquote>[©]</blockquote> -->
<references/>
<!-- topub -->
[[Категория:OSDAY-2025]] | |||
Версия 12:53, 24 июня 2025
- Докладчик
- Сергей Старолетов
Содержание
Видео
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.
Заключение
В итоге предполагаемый доклад может быть полезен программистам и исследователям, прежде всего с практической точки зрения и как старт для обучения.
Презентация
Примечания и ссылки
- ↑ Delange J., Lee L. POK, an ARINC653-compliant operating system released under the BSD license //13th Real-Time Linux Workshop. – 2011. – Т. 10. – С. 181-192.
- ↑ https://github.com/pok-kernel/pok
- ↑ Staroletov S. M. A formal model of a partitioned real-time operating system in Promela (OSDAY 2020) //Труды Института системного программирования РАН. – 2020. – Т. 32. – №. 6. – С. 49-66.
- ↑ https://github.com/beckus/qemu_stm32
