Новаком
EMBEDDED

Yocto vs Buildroot: как собрать кастомный Linux для embedded-устройства

Сравнение Yocto и Buildroot по 7 критериям: гибкость, время сборки, размер образа, пакетный менеджер, поддержка BSP. Таблица выбора для IoT-шлюзов, медиаплееров и промышленных контроллеров.

Н
Новаком
2026-05-21 · 13 минут чтения

Когда микроконтроллера уже мало

Ваш IoT-шлюз обрабатывает данные с 200 датчиков, запускает edge-ML модель, крутит веб-интерфейс для настройки и обновляется по воздуху. На Cortex-M с FreeRTOS это не сделать — нужен полноценный Linux на процессоре с MMU: ARM Cortex-A, RISC-V с Linux-поддержкой, x86.

Но «обычный» Linux (Ubuntu, Debian) для embedded не подходит: он тяжёлый (гигабайты), содержит тысячи ненужных пакетов, загружается минуту и не настроен под конкретное железо. Нужен кастомный Linux-образ — минимальный, под вашу плату, с вашими пакетами, вашим ядром.

Два главных инструмента для этого — Yocto Project и Buildroot. Оба собирают Linux из исходников, оба бесплатные, оба используются в серийных продуктах. Но подход у них настолько разный, что выбор влияет на всю архитектуру проекта.

Buildroot: простота и скорость

Философия

Buildroot — это система сборки Linux-образа, не дистрибутив. Его задача — взять toolchain, ядро, rootfs и ваши пакеты и собрать один файл: sdcard.img, rootfs.tar или initramfs. Максимально просто.

Проект существует с 2001 года, написан на Make + Kconfig. Если вы настраивали ядро Linux через make menuconfig — вы уже знаете, как работает Buildroot.

Как устроен

buildroot/
├── arch/           # Архитектуры (ARM, x86, MIPS, RISC-V)
├── board/          # Конфигурации конкретных плат
├── configs/        # defconfig файлы (raspberry_pi4_defconfig и т.д.)
├── package/        # ~3000 пакетов (каждый — .mk + Config.in)
├── toolchain/      # Кросс-компилятор
└── Makefile        # Всё собирается одной командой

Типичный workflow:

  1. make raspberrypi4_64_defconfig — загрузить конфигурацию для платы
  2. make menuconfig — настроить пакеты, ядро, toolchain
  3. make — собрать образ (20–40 минут с нуля)
  4. dd if=output/images/sdcard.img of=/dev/sdX — записать на карту

Сильные стороны

  • Простота: кривая обучения — дни, не недели. Документация на 1 странице
  • Скорость сборки: полный образ с нуля за 20–40 минут
  • Минимализм: образ от 4 МБ (busybox + ядро)
  • ~3 000 пакетов: Qt, Python, Node.js, Docker, Rust — всё основное есть
  • Один Makefile: вся логика сборки прозрачна, легко отлаживать

Ограничения

  • Нет инкрементальной сборки: изменили один пакет → пересобирается всё, что от него зависит. На практике — 5–15 минут на каждое изменение
  • Нет пакетного менеджера на устройстве: обновления только полным образом
  • Нет слоёв: кастомизация через BR2_EXTERNAL, но это не уровень Yocto layers
  • Один конфиг = один образ: мультиплатформенные проекты (3 платы, 5 вариантов) сложно поддерживать

Yocto Project: промышленный стандарт

Философия

Yocto — это фреймворк для создания собственного Linux-дистрибутива. Не система сборки, а экосистема: инструменты (BitBake, OE-Core), метаданные (рецепты, слои) и процессы (release-менеджмент, QA).

Yocto поддерживается Linux Foundation с участием Intel, ARM, TI, NXP, Wind River и сотен компаний. Это де-факто стандарт для embedded Linux в индустрии.

Как устроен

Ключевые концепции:

  • Рецепт (.bb): описание сборки одного компонента (скачать, настроить, скомпилировать, установить)
  • Слой (layer): набор рецептов, логически сгруппированных. meta-raspberrypi, meta-qt5, meta-tensorflow-lite — каждый слой добавляет функциональность
  • BitBake: движок сборки (аналог Make, но с зависимостями, кэшированием, параллелизмом)
  • OE-Core (OpenEmbedded Core): базовый слой с ~1 000 рецептов
  • Poky: референсный дистрибутив (OE-Core + BitBake + meta-poky)
poky/
├── bitbake/         # Движок сборки
├── meta/            # OE-Core (базовые рецепты)
├── meta-poky/       # Референсная конфигурация
├── meta-yocto-bsp/  # BSP для референсных плат
└── ... ваши слои:
    ├── meta-raspberrypi/
    ├── meta-qt5/
    └── meta-my-product/

Типичный workflow:

  1. source oe-init-build-env — настроить окружение
  2. Добавить слои в bblayers.conf
  3. Настроить local.conf (целевая платформа, фичи)
  4. bitbake core-image-minimal — собрать образ (1–4 часа с нуля)
  5. Прошить результат из tmp/deploy/images/

Сильные стороны

  • Слои (layers): модульная архитектура. BSP вендора + ваш слой + слой QA — каждый развивается независимо. Смена платы = смена одного слоя
  • Инкрементальная сборка: Shared State Cache (sstate) кэширует результат каждого task. Изменили один рецепт → пересобирается только он. Вторая сборка — минуты вместо часов
  • Пакетный менеджер: RPM, DEB или IPK на устройстве. Обновления отдельных пакетов без полной перепрошивки
  • Масштаб: 10 000+ рецептов в OpenEmbedded Index. Есть всё: от gstreamer до ROS2
  • Reproducible builds: одинаковый результат из одинаковых исходников
  • Release-процесс: LTS-версии (Kirkstone, Scarthgap), поддержка 2+ лет

Ограничения

  • Кривая обучения: недели до первой продуктивной работы. Документация — сотни страниц
  • Первая сборка: 1–4 часа, требует 50–100 ГБ диска и 8+ ГБ RAM
  • Сложность отладки: ошибка в рецепте → разбирать цепочку зависимостей BitBake
  • Overhead для малых проектов: один продукт на одной плате — Yocto избыточен

Сравнение по критериям

1. Время сборки

СценарийBuildrootYocto
Полная сборка с нуля20–40 мин1–4 часа
Инкрементальная (один пакет)5–15 мин1–5 мин (sstate)
Rebuild после make clean20–40 мин10–30 мин (sstate)
Требования к диску5–15 ГБ50–100 ГБ
Требования к RAM2–4 ГБ8–16 ГБ

Buildroot быстрее с нуля, но Yocto быстрее при итеративной разработке благодаря sstate-cache.

2. Размер образа

КонфигурацияBuildrootYocto
Минимальная (busybox)4–8 МБ6–12 МБ
С systemd + networking30–50 МБ40–70 МБ
С Qt5 + GUI80–150 МБ100–200 МБ
С Python3 + Node.js60–100 МБ80–130 МБ

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

3. Пакетная система

ПараметрBuildrootYocto
Пакеты в реестре~3 000~10 000+ (OE Index)
Пакетный менеджер на устройствеНетRPM / DEB / IPK
Обновление отдельного пакетаТолько перепрошивкаДа (opkg install)
Добавление своего пакета.mk + Config.in.bb рецепт
Сложность добавления пакетаПросто (10 строк)Средне (20–50 строк)

Если вам нужно обновлять отдельные компоненты на устройстве без полной перепрошивки — только Yocto.

4. BSP и поддержка плат

ПлатформаBuildrootYocto
Raspberry Pidefconfigmeta-raspberrypi
NXP i.MXdefconfigmeta-freescale (от NXP)
TI Sitara/AMdefconfigmeta-ti (от TI)
STM32MPdefconfigmeta-st-stm32mp (от ST)
RockchipСообществоmeta-rockchip
QualcommОграниченноmeta-qcom (от Qualcomm)
RISC-VДаmeta-riscv
Кастомная платаРучная настройкаСвой BSP layer

Ключевая разница: вендоры (NXP, TI, ST, Qualcomm) поддерживают свои Yocto BSP-слои и выпускают релизы синхронно с Yocto. Buildroot-конфиги для этих плат обычно поддерживаются сообществом и могут отставать.

5. OTA-обновления

ПараметрBuildrootYocto
Полный образ (A/B)Вручную (swupdate)RAUC, Mender, swupdate
Delta-обновленияНетMender, libostree
Пакетные обновленияНетopkg / apt / dnf
Подпись и верификацияЧерез swupdateВстроено в Mender/RAUC
RollbackВручнуюАвтоматический (A/B)

Для серийных устройств с OTA Yocto — стандарт. Mender и RAUC разработаны специально для Yocto, с интеграцией в CI/CD и облачным управлением.

6. Экосистема и инструменты

ИнструментBuildrootYocto
CI/CD интеграцияПростая (make)Сложнее (BitBake + layers)
SDK для разработчиковmake sdkbitbake -c populate_sdk
Extensible SDKНетeSDK (devtool)
Лицензионный аудитmake legal-infobuildhistory + license manifest
CVE-мониторингНетВстроенный (cve-check)
Контейнеризация (Docker/Podman)ВозможнаCROPS, KAS (Docker-обёртки)

Yocto предоставляет CVE-мониторинг из коробки: сканирует все пакеты в образе на известные уязвимости. Для устройств, подключённых к интернету, это критически важно.

Когда ни Yocto, ни Buildroot

Иногда оба инструмента — overkill:

  • Debian/Ubuntu на SBC: если ваш продукт — Raspberry Pi с кастомным приложением, проще взять Raspberry Pi OS и установить своё через apt + systemd service. Не нужна кастомная сборка ядра
  • Alpine Linux: минимальный дистрибутив (5 МБ base), musl libc, apk — хорош для контейнеров и edge-серверов
  • OpenWrt: если устройство — роутер, шлюз или сетевое оборудование. Свой пакетный менеджер, GUI (LuCI), firewall

Матрица выбора

Ваш проектРекомендацияПочему
IoT-шлюз (стартап, 1 плата)BuildrootБыстро, просто, достаточно
IoT-шлюз (серия, 3+ платы, OTA)YoctoСлои, BSP, Mender
Медиаплеер / STBYoctogstreamer, DRM, OTA
Промышленный HMI с QtYoctometa-qt5/6, BSP вендора
Быстрый прототипBuildroot40 минут до рабочего образа
Серийный продукт 10K+ шт.YoctoЛицензии, CVE, reproducibility
Сетевое устройство (роутер)OpenWrtСпециализированный
Edge-сервер / gatewayYocto или AlpineЗависит от сложности
Учебный проектBuildrootПрозрачный, понятный
Автомотив (IVI, кластер)Yocto (AGL)Automotive Grade Linux
Робототехника (ROS2)Yoctometa-ros

Можно ли перейти с одного на другой?

Технически — да, но это переписывание системы сборки с нуля:

  • Buildroot → Yocto: нужно написать рецепты (.bb) для каждого кастомного пакета, создать BSP layer, настроить BitBake. 2–4 недели работы для опытного инженера
  • Yocto → Buildroot: обратный переход проще (меньше абстракций), но теряете слои, sstate, пакетный менеджер

Рекомендация: если есть хотя бы 30% вероятность, что проект вырастет до серии — начинайте с Yocto. Переход с Buildroot на Yocto на полпути — одна из самых дорогих технических ошибок в embedded.

Итого

  • Buildroot — быстрый старт, минимальный образ, понятная структура. Для прототипов, малых серий и проектов с одной платой
  • Yocto — промышленный стандарт с слоями, пакетным менеджером, OTA и CVE-мониторингом. Для серийных продуктов, мультиплатформенных проектов и долгоживущих устройств

Главный критерий — жизненный цикл продукта. Если устройство будет работать 5–10 лет и получать обновления — Yocto окупит сложность. Если это одноразовый прототип — Buildroot сэкономит недели.


Разрабатываете устройство на embedded Linux и не уверены в выборе платформы? Мы делаем экспресс-аудит IoT-идеи за 25 000 ₽: архитектура, ОС, компоненты, OTA-стратегия — за 5 рабочих дней. Или посмотрите наши услуги по IoT и embedded-разработке.

РАЗРАБОТКА

Нужна похожая задача?

Обсудим вашу задачу и предложим решение за 30 минут.

Обсудить проект