Ускоренный курс по внедрению встроенного программного обеспечения Linux

В ELC Europe Мирза Крак из Mender.io изучил популярные методы развертывания встроенного программного обеспечения Linux, в том числе стратегии перекрестной разработки, IDE, управление пакетами Yocto-OE, утилиты настройки, загрузка по сети и обновление программного обеспечения.

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

В разделе «Стратегии разработки и развертывания встроенных приложений и изображений» Мирза Крак, разработчик встроенных приложений на Mender.io, рассматривает множество вариантов подготовки и развертывания программного обеспечения на устройствах.
Они варьируются от стратегий разработки между устройствами между настольными и встроенными платформами до использования IDE и работы с Yocto / OE-Core с менеджерами пакетов.
Крак, выступавший на октябрьской конференции ELC Europe в Эдинбурге, также рассказал об инструментах управления конфигурацией, утилитах сетевой загрузки и решениях по обновлению, таких как swupdate и Mender.

Базовая настольная / встроенная кросс-разработка

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


На ELCE 2018 Мирза Крак рассказывает о технологиях развертывания встроенного программного обеспечения

На настольном компьютере «все доступно вам через apt-get install, и есть высокая доступность инструментов трассировки и отладки», - сказал Крак.
«У вас гораздо больше контроля, когда вы выполняете такие вещи, как запуск двоичного кода, и вы можете собирать, отлаживать и тестировать на одной и той же машине, так что обычно у вас очень короткие циклы разработки».

В конце концов, однако, вам, вероятно, придется заняться разработкой нескольких устройств.
«Вы можете использовать некоторое фиктивное оборудование для проведения базового тестирования работоспособности на настольном компьютере, но вы не тестируете оборудование, на котором будет работать программное обеспечение, что может иметь некоторые ограничения».

Типичным подходом к разработке на нескольких устройствах является запуск Yocto Project или Buildroot на вашем ПК, а затем кросс-компиляция и передача двоичных файлов на встроенное устройство.
Это усложняет задачу, поскольку вы компилируете код на одном устройстве, и вам может потребоваться перенести его на несколько устройств для тестирования.

Вы можете использовать команду защищенного копирования (scp) или передавать данные с USB-накопителя.
Тем не менее, «это много ручной работы и подвержено ошибкам, и его трудно воспроизвести на многих устройствах», сказал Крак.
«Я удивлен тем, как много людей не выходят за рамки этой точки входа».

IDE и менеджеры пакетов

Более простой и надежный подход заключается в использовании IDE, такой как Eclipse или Qt Creator, которые имеют плагины для кросс-компиляции.
«В средах разработки обычно есть ловушки после сборки, которые передают двоичный файл на устройство и запускают его», - сказал Крак.
«С помощью Qt Creator вы можете запустить сервер отладки на устройстве и выполнять удаленную отладку удаленно».

Среды разработки отлично подходят для более простых проектов, особенно для начинающих или случайных разработчиков, но им может не хватать гибкости, необходимой для более сложных заданий.
Krak обычно предпочитает менеджеры пакетов - наборы инструментов для автоматизации обработки установки, обновления, настройки и удаления программного обеспечения - которые практически не отличаются от тех, которые вы найдете на настольном ПК с Linux.

«Менеджеры пакетов предоставляют вам больше проверок и контролей работоспособности, а также возможность устанавливать зависимости», - сказал Крак.
Менеджеры пакетов для встроенных целей включают deb, rpm и opkg, и вы также можете обратиться к утилитам пакетов, таким как apt, yum, dnf, pacman, zipper и smart.

«Если вы компилируете свое приложение Debian в систему сборки, вы можете сказать« make dpkg », которая упакует ваш бинарный файл и любые файлы конфигурации, которые у вас могут быть», - сказал Крак.
«Затем вы можете перенести двоичный файл на свое устройство и установить.
Это менее подвержено ошибкам, так как у вас есть отслеживание зависимостей и восходящие и пользовательские фиды пакетов ».

Менеджеры пакетов полезны при создании прототипов и ранней разработке, но вы, как правило, не сделаете их доступными для встроенного конечного пользователя, сказал Крак.
Кроме того, не все встроенные устройства поддерживают такие платформы, как Ubuntu или Raspbian, в состав которых входят менеджеры пакетов.

Krak обычно работает со средой Yocto Project / Open Embedded и использует OE-core Angstrom, который поддерживает пакеты opkg.
«Вы можете включить meta-angstrom в свою сборку Yocto и установить DISTRO =« angstrom », чтобы получать пакеты новостей», - сказал Крак.
«Но в Angstrom есть гораздо больше, что вам может не понадобиться, поэтому вы можете захотеть создать более индивидуальную настройку на основе Poky или чего-то еще».

Yocto генерирует потоки пакетов, когда вы создаете образ, предоставляя вам выбор rpm, deb или ipk.
Тем не менее, «это только пакеты, а не полный пакет», сказал Крак.
Чтобы включить канал, «есть команда пакетного индекса bitbake, которая генерирует файлы.
Вы предоставляете сервер развертывания, где все ваши пакеты должны сделать его доступным на вашем устройстве ».

Хотя этот процесс обрабатывает подачу пакетов «на стороне обслуживания», вам все еще нужны инструменты на встроенном устройстве.
В Yocto «есть настройка EXTRA_IMAGE_FEATURES, которую вы можете установить для управления пакетами», - сказал Крак.
«Существует также рецепт в meta-openembedded / meta-oe, который называется distro-feed-configs.bb.
Если вы включите его в свою сборку, он сгенерирует файлы конфигурации, необходимые для вашего менеджера пакетов ».

Решения для управления конфигурацией, загрузки по сети и обновления

Крак продолжил обсуждение инструментов управления конфигурацией, таких как CFEngine, Puppet, Chef и Ansible.
«Они очень распространены в мире корпоративных серверов, если вам нужно управлять парком серверов», - сказал Крак.
«Некоторые применяют рабочие процессы для встроенных устройств.
Вы устанавливаете золотой образ на всех своих устройствах, а затем настраиваете соединение и доверие между сервером CM и устройством.
Затем вы можете написать скрипт конфигурации ».

Krak также рассмотрел решения для более сложных проектов, в которых приложение выходит за рамки одного двоичного файла.
«Возможно, вы разрабатываете специализированное аппаратное обеспечение для очень конкретного случая использования или, возможно, вы зависите от некоторых пользовательских опций ядра», - сказал Крак.

Сетевая загрузка здесь полезна, потому что вы можете «развернуть все ресурсы, необходимые для загрузки вашего устройства», сказал Крак.
«При загрузке система выбирает дерево устройств ядра Linux и файловую систему, поэтому вам просто нужно перезагрузить устройство для обновления программного обеспечения.
Установка может быть сложной, но ее преимущество заключается в том, что ее легко расширить для загрузки нескольких устройств ».

Типичные схемы сетевой загрузки, такие как загрузка PXELINUX и PXE, используют настройку tftp-сервера на ноутбуке, где вы размещаете артефакты сборки, которые хотите развернуть.
Кроме того, вы можете написать скрипт, используя корневую файловую систему NFS.


Mender поток данных

Последней альтернативой для сложных систем является использование решения для обновления, такого как Mender, rauc или swupdate.
«Вы можете использовать их на ранних стадиях процесса разработки для развертывания своих сборок», - сказал Крак.
«Если вы производите одно и то же устройство на производстве, вы можете использовать одно и то же программное обеспечение для его тестирования на протяжении всего процесса разработки, что повышает доверие.
Некоторые используют обновления на основе изображений, что приятно, потому что ваши устройства не сохраняют состояния, что упрощает тестирование.
Программы обновления хорошо вписываются в рабочий процесс разработки и упрощают интеграцию артефактов сборки.
У них часто есть особенности, чтобы избежать кирпичных устройств. ”

Как разработчик для Mender.io, Крак наиболее знаком с Mender, который предлагает стратегию обновления изображений A / B.
«У вас есть две копии ОС, и вы делаете обновления на основе образов, поэтому вы всегда обновляете всю систему», - объяснил Крак.
Вы можете посмотреть полную презентацию ниже.

Видео Мирзы Крака «Стратегии разработки и развертывания ваших встроенных приложений и изображений» на ELCE 2018

Эта статья защищена авторским правом © 2018 Linux.com и была первоначально опубликована здесь .
Он был воспроизведен этим сайтом с разрешения его владельца.
Пожалуйста, посетите Linux.com для получения последних новостей и статей о Linux и open source.