Какой дистрибутив лучше использовать для embedded систем. Этот вопрос является актуальным на сегодняшний день.

Существует три актуальных подхода для решения этой задачи:

  1. Использовать готовый дистрибутив для вашего одноплатного компьютера(Armbian, Openwrt и т.д.)
  2. Собрать и настроить свой дистрибутив с помощью систем сборок(Buildroot/Yocto и т.д.).
  3. Использовать свою связку bootloader (u-boot) + ядро(kernel) + rootfs (busybox).

Если кто знает еще, напишите пожалуйста в комментариях.
UPDATE.
Проект OpenWRT это и система сборки (это не buildroot), так и проект предоставляющий готовые собранные образы для вашей целевой платы.


Готовые дистрибутивы


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

Следует также ответить главное достоинство готовых дистрибутивов — это их стабильность.
Для начинающих, я бы рекомендовал данные дистрибутивы.


Armbian — это популярный дистрибутив Linux, доступный для самых разных устройств ARM: Orange Pi, Banana Pi, Odroid и т.д … Он основан на Ubuntu и/или Debian.
www.armbian.com



OpenWrt — встроенная операционная система, основанная на ядре Linux, и предназначенная, в первую очередь, для домашних маршрутизаторов. Основные компоненты включают в себя ядро Linux, util-linux, uClibc или musl и BusyBox. Размер всех компонентов оптимизирован в связи с тем, что в большинстве домашних маршрутизаторов сильно ограничен объём памяти.

От себя добавлю, хорошо подойдет для плат с wi-fi на борту (Например Orange Pi Zero).
openwrt.org

Системы сборки


Гланым достоинством систем сборок является, то что вы можете собрать минимальный и гибкий Linux для встраиваемых (embedded) систем.

BuildRoot



Buildroot — это система сборки дистрибутивов для встраиваемых систем. Она поддерживает кучу плат и результатом ее работы становятся собранные загрузчик, ядро и образ
файловой системы.

Что оно позволяет собрать buildroot для вашей системы:

  • образ системы;
  • данная система позволяет выбрать версию ядра — любую.
  • можете добавить любые патчи и установить любые программы.
  • гибкая конфигурация утилит ( например, busyBox, bash и т.д.)

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

Отличая такой сборки, например, от сборки Armbian:

  • собирается дистрибутив не на основе (Debian или Ubuntu), а пользовательский гибко настроенный Linux.
  • минимального размер сборки.
  • выбор любой версии ядра.

buildroot.org

3. Использование свой связки:

Для этого нам нужен:

  • Cross compiler (Например, Linaro);
  • Bootloader (Например, U-boot);
  • Kernel;
  • RootFs (Например, Busybox).

Итак поехали.
Так мы будем собирать локально на своей машине нам нужен кросс компилятор, например linaro. Кросс компилятор поможет на архитектуре x86, собрать наш дистрибутив под целевую платформу ARM.
www.linaro.org

Далее необходимо собрать bootloader.

Bootloader (U-Boot) — самый популярный bootloader для ARM, является U-boot. Главной задачей bootloader является загрузка ядра Linux Kernel. Так же вы можете использовать, например barebox или другой.
www.denx.de/wiki/U-Boot


Далее. Нужно собрать ядро, на выходе мы должны получить образ ядра и device tree для нашей целевой платформы.
www.kernel.org

RootFs — это корневая файловая система которую примонтирует Kernel после загрузки. Рекомендую использовать Busybox.


busybox.net

Заключение


Я не говорю, что есть плохие или хорошие подходы. Каждый имеет свои достоинства и недостатки. Это зависит от вашей задачи и какой результат вам необходимо получить.

Комментарии (15)


  1. BerkutEagle
    29.08.2019 12:28
    +1

    А где ответ на вопрос статьи? Ожидалось сравнение, плюсы, минусы. А тут просто сборник ссылок на многим известные сайты.


    1. alex_modyk Автор
      29.08.2019 22:36

      Добрый вечер. BerkutEagle. Спасибо за Ваш вопрос, это риторический вопрос, какой дистрибутив лучше. В первую очередь, это зависит от вашей задачи. Если для меня, то лучше использовать сборщик Buildroot. Так в нем, вы выберете то что необходимо для вашего проекта, и не более. Т.к в готовом образе, есть куча всего нужного и не нужного.


      1. dlinyj
        30.08.2019 10:58

        Тогда зачем было вообще писать эту статью?


  1. Makc_K
    29.08.2019 13:39
    +2

    Очень, очень слабая статья. Я думал намного лучше будет.


    1. dlinyj
      29.08.2019 13:50
      +1

      не ясно вообще зачем она


  1. dlinyj
    29.08.2019 13:50
    +2

    Автор, раз вы даёте такие рекомендации, то расскажите чем отличается openwrt от buildroot и что у них общего?


    1. alex_modyk Автор
      29.08.2019 22:15

      Добрый день dlinyj Спасибо за Ваш вопрос.

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

      Если же брать проект Openwrt.
      То есть два пути получение образа вашей embedded системы.
      1-й ) Вы заходите на официальный сайта и качаете уже собранный образ под вашу целевую платформу (Например, Orange Pi).
      Если же брать проект buildroot, вам необходимо собрать свой образ, используя свой config или defconfig под свое ус-во, с офф сайта вы не скачаете готовый образ.

      2-й) Вы выкачиваете, например из Git исходники openwrt, и с помощью так называемой системы сборки openwrt вы можете собрать свой образ.
      Но тут не следует путать, данные сборщики — это не одно и тоже.

      Например, попробуйте указать в сборщике Openwrt версию ядра, которую вы хотите использовать. Сборщик Openwrt заточен более под Networking.


      1. dlinyj
        30.08.2019 10:56

        Тем не менее сборщик OpenWRT сделан на buildroot. А ядро… Ядро я обычно отдельно собираю.


  1. Makc_K
    29.08.2019 13:55
    +1

    Билдрут указали, а ёкту как-бы и забыли.


    1. alex_modyk Автор
      29.08.2019 22:21

      Добрый вечер. Makc_K. Если Вам будет, интересно могу разобрать Yocto, на примере сборки образа под Orange PI


      1. Makc_K
        29.08.2019 22:53
        +1

        Мне больше интересно — почему нельзя было сразу всё это рассказать в статье, выдав вместо этого куцый огрызок.


  1. Punk_Joker
    29.08.2019 14:42

    Yocto? LFS для совсем уж? Сравнение, плюсы-минусы? К тому же, buildroot сам выкачивает и собирает кросскомпилятор, как и бутлоадер и rootfs, надо только в конфике все настроить.


  1. shchers
    29.08.2019 23:14
    +1

    Очень странная статья. Мне не понятно следующее:


    1. OpenWRT — сказано, что ОС. Но это дистрибутив. По какой-то причине не сообщается, что его можно собрать под себя и что это чуть ли не главный плюс. Кстати, юзается он не только для домашних руктеров, но и во многих Enterprise железках.
    2. Yocto — упоминается вскользь и то как пример сборочных систем. А стоило бы сказать, что это, на сегодня, основная система поставки BSP, для мультимедийных процессоров ещё и Android поставляют.
    3. Рассказ про полностью ручную сборку дистрибутива и опять таки оооочень вскользь. Почему вместо этого не написать, что так делать не нужно, а просто разобраться с Yocto/Buildroot или OpenWRT на худой конец.

    Можно сказать больше, но это основное.


  1. KonstantinSpb
    30.08.2019 01:09

    Embedded systems это далеко не linux системы, даже можно сказать далеко не самая многочисленная. Есть микроконтроллеры, на которые linux не поместиться физически.

    Из интересных проектов:
    platformio.org


    1. alex_modyk Автор
      30.08.2019 19:35

      Добрый вечер. KonstantinSpb. Полностью с Вами согласен. Если брать, сегмент микроконтроллеров, то тут больше уклон идет на системы реального времени (RTOS). Например, такие известные, как EmbOS, FreeRtos, KeilRTX и т.д. Либо, старая школа, без ОС (вечный цикл + стейт машина + прерывания).