Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019)

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

Докладчик
Антон Бондарев.jpg
Антон Бондарев

Доклад посвящен опыту проекта Embox по использованию “тяжелого” прикладного обеспечения, например Qt, на микроконтроллерах. В докладе рассмотрены: преимущества подобного подхода, особенности микроконтроллеров и трудности связанные с использованием данного ПО на них, а также подход проекта Embox позволяющие не только преодолеть данные трудности, но и существенно снизить затраты на их преодоление.

Видео

on youtube

Презентация

Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019).pdf

Thesis

Введение

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

Особенности микроконтроллеров

Но оригинальное десктопное ПО имеет ряд особенностей, которые затрудняют его применение на небольший апаратных системах, в частности микроконтроллерах. Прежде всего это отсутствие в микроконтроллерах блока управления памятью (MMU). В микроконтроллерах используется блок защиты памяти (MPU) который не подразумевает режим трансляции адресов. Соответственно возникают проблемы поскольку десктопное ПО традиционно запускается в отдельном адресном пространстве. Кроме того в десктопном ПО используется системный вызов fork() для создания процесса, являющегося экземпляром какого то прикладного приложения.

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

Кроме того что в микроконтроллерах существенно меньше памяти, существует четкое разделение по типам памяти. Первое по типу доступа: на только для чтения ROM (read only memory) и на память с произвольным доступом то есть и на чтение и на запись RAM (random access memory). По типу расположения: память доступная прямо на кристалле и память доступная по внешней шине.

Выделение памяти только для чтения, оправданно с точки зрения увеличения производительности. Поскольку гарвардская архитектура применяемая в микроконтроллерах разделяет память для команд и память для данных, доступ происходит по разным шинам и следовательно общая пропускная способность памяти увеличивается. Но поскольку эта память не подразумевает произвольную запись, то загрузить код в эту память, как принято в десктопных приложениях, сложно. Соответственно еще одной важной особенностью десктопных систем является то что они не ориентированы на так называемых XiP (eXecute In Place) метод, а на обычную загрузку всех секций, включая, секцию кода, в основную память.

Опыт Embox

Embox — конфигурируемая ОС РВ позволяющая запускать прикладные приложения и библиотеки разработанные для Linux на микроконтроллерах. Это достигается с помощью нескольких особенностей Embox.

  • Первое. Embox использует систему сборки Mybuild с собственным языком описания модулей и системы. Mybuild анализирует зависимости и генерирует различные артефакты, в том числе заголовочные файлы, линкер скрипты и Makefile-ы. Все это позволяет существенно уменьшить количество требуемой памяти и вообще не включать те части которые не используются.
  • Второе. Embox поддерживает POSIX. Это собственно позволяет использовать прикладное ПО фактически без изменений.
  • Третье. Статическая линковка используется чтобы избежать проблем с единым адресным пространством, уменьшить размер образа и включать только требуемые части. На разных стадиях собираются разные части системы, но окончательно все (ядро, все подсистемы, библиотеки и приложения) линкуется в единый образ. В нем есть вся информация обо всех символах в образе. И хотя в образе может быть много приложений со стандартными точками входа int main(..), но в результирующем образе эти символы будут заменены на другие, хранящие полное имя модуля и символ main .
  • Четвертое. Нам пришлось реализовать рантайм для C++, поскольку многие популярные приложения и библиотеки используют плюсы.
  • Пятое. Мы в систему сборки добавили возможность использовать
 ./configure; make; make install

Предварительно скачав откуда-то исходники и наложив необходимые патчи.

Заключение

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

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

Embox — ОС РВ позволяющая запускать Linux ПО на микроконтроллерах (Антон Бондарев, OSSDEVCONF-2019)!.jpg

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

Plays:430   Comments:4