Лучший способ построить с Yocto Project и BitBake

На конференции по встраиваемым Linux-технологиям Intel Стефано Цетола (Stephano Cetola) предложил советы и рекомендации для максимально эффективного использования Yocto Project и его системы сборки BitBake - от использования слоев и кэша SSTATE до изучения каналов пакетов и сценариев BitBake.

Несмотря на широкое распространение и растущее распространение, проект Yocto Project является одной из наиболее неправильно понятых технологий Linux.
Это не дистрибутив, а скорее набор шаблонов, инструментов и методов с открытым исходным кодом для создания пользовательских встроенных систем на основе Linux.
Участник проекта Yocto и инженер Intel по встроенному программному обеспечению Стефано Четола подробно рассказали о Yocto в своем выступлении на недавней конференции по встроенному Linux в Портленде.

Хотя производители встроенного оборудования часто указывают «Yocto» наряду с Ubuntu, Fedora и т. П., Одна сборка Yocto Project часто заметно отличается от другой.
Разработчики встраиваемых систем, которые когда-то создавали свои собственные стеки Linux для Linux с нуля, чтобы предоставлять урезанные стеки, оптимизированные для экономии энергии, а конкретные технологии теперь обычно используют Yocto.
При этом они экономят бесчисленные часы отладки и тестирования.


Стефано Четола из Intel обсуждает уровни Yocto на конференции по встроенному Linux 2018

«Yocto - это линия, нарисованная на песке - мы выбираем определенные версии программного обеспечения, рисуем линии и тестируем их», - сказал Четола.
«Каждый день мы тестируем четыре разные архитектуры и опираемся на шесть разных дистрибутивов, проверяя совместимость и производительность.
Мы можем предоставить вам BeagleBone SDK и изображения, а также трекер ошибок ».

По большей части это была старая новость для участников лекции Cetola «Yocto в реальном мире: получение максимальной отдачи от вашей системы сборки». Тем не менее, в Yocto есть много того, чего даже опытные разработчики не знают, говорит Cetola.
Его выступление охватывало различные советы Yocto, в которых основное внимание уделялось использованию механизма сборки BitBake.

Цетола выделил некоторые из своих любимых лучших практик, утилит, сценариев и команд, включая wic (OpenEmbedded Image Creator), кэш общего состояния и упакованные каналы.
(Вы можете посмотреть всю презентацию ниже.)

Расслоение

Проект Yocto построен вокруг концепции слоев.
Разработчикам часто трудно понять это, поэтому они часто просто игнорируют это.
«Люди склонны объединять все в один гигантский слой, потому что это относительно быстрый способ начать сборку», - сказал Четола.
«Но если вы соберете всю информацию о вашем дистрибутиве, требования к оборудованию и программному обеспечению в один слой, вы пинаете себя позже».

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

Например, наличие отдельного дистрибутивного слоя облегчает поддержку как кадрового буфера, так и слоя X11, говорит Цетола.
«Если ваше оборудование использует разные архитектуры или вы не хотите, чтобы ваше другое оборудование смешивалось вместе, вы можете разделить их на слои, чтобы помочь распределить их внутри», - добавил он.
«В программном обеспечении у вас может быть Python, живущий с C, и если они не имеют ничего общего друг с другом, разделение их означает, что вы можете отправить производителю или команде QA только то, что им нужно».

Путь к загрузочным форматам изображений

Разработчики Yocto Project часто испытывают трудности при интеграции уровня поставщика в загрузочный образ, сказал Cetola.
«В прошлом было трудно добавить несколько разделов или попытаться создать многоуровневую архитектуру, в которой ваши слои только для чтения и чтения-записи накладываются друг на друга».

Может помочь новый инструмент под названием wic (OpenEmbedded Image Creator).
Wic «читает из WKS-файла кикстарта, который позволяет вам создавать пользовательские разделы и носители, на которые вы можете записать», объяснил Cetola.
«Например, ваш производитель может рассчитывать получить SD-карту, но вы также можете загружаться с NAND или NOR.
Wic позволяет вам четко разделить эти понятия, а затем повторно использовать их ».

Wic позволяет копировать файлы в изображение Wic или удалять его, а также использовать каталог внутри изображения для лучшего самоанализа.
Wic также поддерживает bmap-tools ”target =” new ”> bmap-tools,“ который на порядок быстрее, чем при использовании dd ”, - сказал Четола.
«Bmap-tools понимают, что вы собираетесь копировать бесполезные данные, поэтому пропускают их, делая разреженные копии.
Как только вы используете bmap, вы никогда больше не будете использовать dd ».

Государство твой друг

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


Четола показывает свое состояние ума

«Одна из самых больших претензий к Yocto заключается в том, что сборка занимает много времени, и это происходит - Buildroot каждый раз выигрывает в скорости», - говорит Четола.
«Кэш-память SSTATE, которая предназначена для использования в общих чертах, может ускорить процесс, но многие люди этим не пользуются». Цетола сказал, что было множество примеров, когда создание с нуля «не идеально». например, когда команда делает сборку на ноутбуках с недостаточной мощностью.

Cetola рекомендовал использовать site.conf, который он описал как «конфигурационный файл, который BitBake ищет при запуске внутри каталога conf». Он продолжил: «У меня есть скрипт, который запускает мой каталог сборки и копирует его в мой site.conf, который устанавливает каталоги загрузки и SSTATE ».

Cetola также предложил, чтобы разработчики более широко использовали технологию зеркала SSTATE, которая, по его словам, «удобна для совместного использования с другими машинами». Этим также может управлять site.conf.
«Люди думают, что они не выиграют от зеркал SSTATE, но это чрезвычайно полезно».

Фид пакетов

Еще один способ ускорить процесс сборки - это использовать пакетные каналы, которые «могут сэкономить не только огромное количество времени во время вашей личной разработки, но также и для любого, кому нужно быстро установить программное обеспечение», сказал Cetola.
Он описал сценарий, в котором «вы используете dd, чтобы записать что-то на карту, и вы загружаете это на доску, и это не работает.
Таким образом, вы меняете свое программное обеспечение, загружаете его снова, записываете его, загружаете, и в нем отсутствует библиотека ».

Пропавшая библиотека «вероятно, находится в папке rpm», - сказал Четола.
«Yocto может запустить индекс пакета BitBake, который индексирует папку, чтобы rpm мог ее искать, поэтому у вас, по сути, есть репо.
Создав фид пакетов, разместив эту папку на веб-сервере и запустив индекс пакетов BitBake, вы избавили себя от необходимости извлекать SD-карту и копировать что-либо на нее.
Вместо этого вы просто говорите «rpm install».

Yocto растет интроспективно

Иногда проблема не в отсутствующем файле, а в неожиданном.
«Клиенты всегда говорят мне:« Я просто собрал свою файловую систему и загрузил свою плату, и там есть файл - откуда он взялся и почему он там? »»

Чтобы выяснить, что, черт возьми, происходит - процесс, известный как самоанализ - Cetola начинает с oe-pkgdata-util, чтобы найти путь.
«Он должен вывести название рецепта, из-за которого этот файл попал на доску», - пояснил он.
«Вы можете указать ему любой файл, и он приложит все усилия, чтобы проанализировать файл и выяснить его». Если этого недостаточно, он обращается к git grep , а также к DNF , «который дает вам большой самоанализ относительно того, что происходит». твоя доска и почему.

Время от времени появляются странные файлы, потому что «когда мы выполняем сборку и запускаем файловую систему, многие вещи выполняются динамически», объяснил Cetola.
В этом случае вышеуказанные инструменты вряд ли помогут.
Например, «внутри кишок Yocto есть команды пост-обработки rootfs, которые могут что-то подсунуть на доску.
Для этого я использую IRC.
В Yocto Project мне нравится то, что он очень дружелюбный.
IRC-канал - отличное место, чтобы задавать вопросы.
Люди отвечают ».

Другие инструменты включают в себя «recipetool» и его подкоманду appendfile, которая «сгенерирует рецепт для вас», если вам нужно изменить файл, сказал Cetola.
Разработчики также могут использовать дерево зависимостей, которое может быть сгенерировано в BitBake с помощью параметра -g.
«Yocto 2.5 будет иметь инструмент« oe-зависит от точки », который избавит вас от необходимости смотреть на это гигантское дерево зависимостей, позволяя вам исследовать определенные части».

Cetola удивлена, что разработчики не используют больше возможностей BitBake.
«Всякий раз, когда я иду на ланч и запускаю существенную сборку, я использую опцию -k, которая предотвращает остановку сборки при возникновении ошибки». Другие опции включают опцию -e, которая выводит среду BitBake, и - Команда C для признания недействительным штампа (специфическая очистка).

BitBake скрипты

Cetola также похвалил некоторые из своих любимых сценариев BitBake, начиная с devtool , который вики-проект Yocto Project описывает как способ «смешать» настройку с изображением Yocto.
«Если вы не являетесь разработчиком ядра на полный рабочий день, но вам нужно внести некоторые изменения в ядро, devtool может быть спасителем», - сказал Четола.
«Используя` devtool modify` и `devtool build`, вы можете модифицировать и собрать ядро, не собирая SDK и не создавая собственную среду кросс-компиляции.
Это также удобный инструмент для создания рецептов.
Когда вы закончите небольшое редактирование ядра, devtool finish сможет сделать для вас исправление ».

Еще один полезный скрипт - это BitBake-слои, «который отлично подходит, когда вы создаете слои или ищете их». Cetola также рекомендовала bitbake-dumpsig / diffsings.
«Скажем, вы изменили одну вещь в своем рецепте, а BitBake перекомпилировал 25 вещей», - сказал он.
«То, что произошло, было то, что изменение вызвало аннулирование различных хешей SSTATE
Чтобы выяснить почему, вы можете использовать bitbake-dumpsig / diffsings.
Dumpsigs будет сбрасывать всю информацию (хранящуюся в каталоге 'stamps') в формат, в котором вы сможете увидеть вещи, на которых основан ее хэш, а затем использовать инструмент сравнения diff, чтобы сравнить их, чтобы выяснить, было ли изменение зависимости. »

Четола завершила призывом к участию сообщества.
«Если вы достаточно смелы, чтобы взглянуть на Bugzilla, пожалуйста, но если это немного, просто найдите часть системы, над которой вы заинтересованы работать, и отправьте нам электронное письмо - мы всегда готовы принять участие и готовы помочь."

Реальный мир Yocto: получение максимальной отдачи от вашей системы сборки

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