Открыть сервис

OpenEmbedded

OpenEmbedded — это открытая система сборки (фреймворк автоматизации сборки) для создания встраиваемых операционных систем на базе Linux. Она предоставляет набор метаданных (рецептов, конфигурационных файлов и классов), позволяющих автоматизировать процесс кросс-компиляции, сборки, настройки и упаковки программного обеспечения для целевых аппаратных платформ. OpenEmbedded является основой для проекта Yocto Project, который стандартизирует и расширяет её возможности, и используется для разработки дистрибутивов Linux для устройств с ограниченными ресурсами, таких как маршрутизаторы, промышленные контроллеры, автомобильные информационно-развлекательные системы, IoT-устройства и одноплатные компьютеры.

История

Проект OpenEmbedded был основан в 2003 году как форк системы сборки Buildroot, которая, в свою очередь, развивалась из более ранних проектов, таких как uClinux-dist. Основной целью создания OpenEmbedded было преодоление ограничений Buildroot, связанных с поддержкой большого количества целевых платформ и пакетов, а также с гибкостью конфигурирования. Первоначально проект развивался сообществом разработчиков, ориентированных на встраиваемые системы, и использовался в основном для сборки дистрибутивов для карманных компьютеров (PDA) и других мобильных устройств.

В 2005 году была выпущена стабильная версия OpenEmbedded 1.0, которая закрепила основные принципы работы системы: использование рецептов (recipes) на языке BitBake, слоистую структуру метаданных и поддержку множества архитектур (ARM, MIPS, PowerPC, x86 и др.). В 2007 году началось активное сотрудничество с проектом Yocto Project, который был анонсирован в 2010 году. Yocto Project взял за основу ядро OpenEmbedded (OpenEmbedded-Core) и стандартизировал его, добавив инструменты для разработки, тестирования и поддержки коммерческих дистрибутивов. С этого момента OpenEmbedded и Yocto Project развиваются параллельно, причём OpenEmbedded-Core является общей базой для обоих проектов.

Архитектура и компоненты

OpenEmbedded построена на модульной архитектуре, включающей несколько ключевых компонентов:

1. Система сборки BitBake

BitBake — это планировщик задач, написанный на Python, который управляет процессом сборки. Он интерпретирует метаданные (рецепты, конфигурации и классы), определяет зависимости между задачами (например, загрузка исходного кода, распаковка, компиляция, установка, упаковка) и выполняет их в правильном порядке. BitBake поддерживает параллельное выполнение задач, кэширование результатов и воспроизводимые сборки.

2. Метаданные

Метаданные OpenEmbedded представляют собой набор файлов, описывающих, как собирать программное обеспечение. Они включают:

  • Рецепты (recipes) — файлы с расширением .bb (BitBake), которые содержат инструкции по сборке конкретного пакета: URL для загрузки исходного кода, зависимости, патчи, команды конфигурации и компиляции.
  • Классы (classes) — файлы с расширением .bbclass, которые содержат общие функции и процедуры, используемые в нескольких рецептах (например, класс для сборки с помощью autotools или cmake).
  • Конфигурационные файлы — файлы с расширением .conf, которые определяют глобальные настройки сборки, такие как целевая архитектура (MACHINE), дистрибутив (DISTRO), версия инструментальной цепочки и параметры ядра.

3. Слои (layers)

Слои — это механизм организации метаданных, позволяющий разделять их по функциональному признаку. Каждый слой представляет собой каталог с определённой структурой (например, meta-<имя>). Слои могут быть:

  • Базовыми — содержат общие рецепты и классы (например, openembedded-core).
  • Аппаратными — содержат конфигурации и драйверы для конкретных плат (например, meta-raspberrypi, meta-intel).
  • Функциональными — добавляют поддержку определённых технологий (например, meta-qt5 для Qt, meta-python для Python).
  • Дистрибутивными — определяют политики и настройки для конкретного дистрибутива (например, meta-yocto для Poky).

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

4. Инструментальная цепочка

OpenEmbedded автоматически собирает кросс-компилятор, библиотеки и утилиты для целевой платформы. Инструментальная цепочка включает в себя:

  • Кросс-компилятор (например, arm-linux-gnueabihf-gcc).
  • Библиотеки C (например, glibc или musl).
  • Инструменты для сборки (например, make, autoconf, cmake).
  • Системные утилиты (например, busybox).

Процесс сборки

Процесс сборки в OpenEmbedded состоит из нескольких последовательных этапов, которые автоматически выполняются BitBake:

  1. Загрузка исходного кода — BitBake загружает исходные файлы из указанных в рецепте источников (Git, HTTP, FTP и т.д.). Исходники кэшируются в локальном хранилище (DL_DIR).
  2. Распаковка и патчингисходный код распаковывается в рабочую директорию, и применяются все патчи, указанные в рецепте.
  3. Конфигурация — выполняется команда конфигурации (например, ./configure для autotools или cmake для CMake).
  4. Компиляция — выполняется сборка (например, make).
  5. Установка — собранные файлы устанавливаются в промежуточный каталог (sysroot).
  6. Упаковка — создаются пакеты (например, .deb, .rpm, .ipk) для целевой системы.
  7. Сборка образа — из пакетов собирается корневая файловая система (rootfs) и, при необходимости, образ загрузчика и ядра.

Результатом сборки является полный образ системы (например, core-image-minimal), который можно записать на целевое устройство.

Применение

OpenEmbedded широко используется в различных областях встраиваемых систем:

  • Промышленная автоматизация — создание операционных систем для программируемых логических контроллеров (ПЛК), промышленных ПК и систем управления.
  • Автомобильная электроника — разработка информационно-развлекательных систем (IVI), телематических блоков и систем помощи водителю (ADAS).
  • Потребительская электроника — сборка прошивок для маршрутизаторов, сетевых хранилищ (NAS), медиаплееров и умных колонок.
  • Интернет вещей (IoT) — создание лёгких дистрибутивов для микроконтроллеров и одноплатных компьютеров (например, Raspberry Pi, BeagleBone).
  • Аэрокосмическая и оборонная промышленность — разработка сертифицированных систем реального времени (например, на основе Yocto Project с поддержкой стандартов DO-178C).

Преимущества и недостатки

Преимущества

  • Гибкость — возможность тонкой настройки каждого компонента системы, от загрузчика до пользовательских приложений.
  • Поддержка множества архитектур — ARM, x86, MIPS, PowerPC, RISC-V и другие.
  • Воспроизводимость сборок — использование кэширования и фиксированных версий пакетов гарантирует, что сборка будет одинаковой на разных машинах.
  • Активное сообщество — большое количество слоёв и рецептов, поддерживаемых сообществом и производителями оборудования.
  • Интеграция с Yocto Project — доступ к инструментам разработки, тестирования и коммерческой поддержки.

Недостатки

  • Сложность освоения — требует понимания кросс-компиляции, систем сборки и встраиваемых систем.
  • Длительное время сборки — первая сборка может занимать несколько часов, даже на мощном оборудовании.
  • Большой объём метаданных — поддержка и обновление слоёв может быть трудоёмким.
  • Ограниченная поддержка для маленьких проектов — для простых задач (например, сборка одного приложения) может быть избыточной.

Связь с Yocto Project

OpenEmbedded является основой для Yocto Project, который добавляет стандартизированные инструменты, такие как:

  • Poky — эталонный дистрибутив, построенный на OpenEmbedded-Core.
  • Toaster — веб-интерфейс для управления сборками.
  • devtool — утилита для разработки и отладки рецептов.
  • ADT (Application Development Toolkit) — набор инструментов для разработки приложений под целевую платформу.

Yocto Project также предоставляет коммерческую поддержку через Linux Foundation и сертификацию для встраиваемых систем.

Примеры использования

  • Raspberry Pi — слой meta (организация признана экстремистской, деятельность запрещена в РФ)-raspberrypi позволяет собрать дистрибутив для всех моделей Raspberry Pi, включая поддержку графического ускорителя и GPIO.
  • Intel Edison — официальный образ Yocto Project для Intel Edison использует OpenEmbedded для сборки.
  • Автомобильные системы — многие производители (например, Toyota, BMW) используют Yocto Project для создания IVI-систем.
  • Сетевые устройства — OpenWrt, хотя и использует свою систему сборки, заимствовал некоторые концепции из OpenEmbedded.

Источники

  1. Документация проекта OpenEmbedded — https://www.openembedded.org/wiki/Main_Page
  2. Руководство Yocto Project — https://docs.yoctoproject.org/
  3. Richard Purdie, "The Yocto Project and OpenEmbedded: A Developer's Guide", 2020.
  4. Статья "OpenEmbedded: A Build System for Embedded Linux" на сайте Linux Journal.
  5. Исходный код и рецепты OpenEmbedded-Core — https://git.openembedded.org/openembedded-core/

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →