Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Проект Yocto

Глава 23 из книги "Архитектура приложений с открытым исходным кодом", том 2.

Оригинал: The Yocto Project
Автор: Elizabeth Flanagan
Перевод: А.Панин

Концепции системы сборки Poky

Одной из наиболее мощных возможностей системы сборки Poky является то обстоятельство, что каждый аспект процесса сборки контролируется с помощью метаданных. Метаданные могут быть свободно разделены на группы файлов конфигурации или рецептов сборки пакетов. Рецепт сборки является набором неисполняющихся метаданных, используемых системой BitBake для установки значений переменных или указания дополнительных задач, выполняемых в процессе сборки. Рецепт сборки содержит такие поля, как описание рецепта, версия рецепта, лицензия пакета и адрес центрального репозитория исходного кода. Он также может указывать на то, что процесс сборки использует autotools, make, distutils или любой другой процесс сборки и в этом случае базовые функции могут быть установлены с помощью классов, унаследованных от класса уровня OE-Core, описанного в файлах директории ./meta/classes. Дополнительные задачи также могут быть описаны наряду с условиями их выполнения. BitBake также поддерживает директивы _prepend и _append в качестве методов расширения функций задачи путем выполнения инъекции кода с добавлением суффиксов в начало и конец описания задачи.

Конфигурационные файлы могут быть разделены на два типа. Первый тип файлов предназначен для конфигурации системы BitBake и всего процесса сборки, а второй - для конфигурации различных уровней, используемых системой Poky для создания различных типов результирующего образа. Под уровнем понимается любая группа метаданных, позволяющая реализовывать какую-либо дополнительную функцию. Они могут использоваться для создания пакетов поддержи аппаратного обеспечения, предназначенных для новых устройств, создания дополнительных типов образов или добавления в образ дополнительного программного обеспечения, не обрабатываемого с помощью основных уровней. Фактически основной набор метаданных проекта Yocto с названием meta-yocto является уровнем, добавляемым выше уровня метаданных OE-Core с названием meta, с помощью которого добавляется дополнительное программное обеспечение и типы образов к заданным на уровне OE-Core.

Примером использования уровней может служить процесс создания образа для устройства NAS на основе платформы Intel n660 (Crownbay), использующего новый 32-битный ABI x32 для архитектуры x86-64, причем выбранное программное обеспечение для создания пользовательского интерфейса будет добавляться с помощью специального уровня.

Задавшись целью, мы разделим функции образа в соответствии с уровнями. На самом нижнем уровне мы используем уровень создания пакетов для поддержки аппаратного обеспечения с целью добавления в образ программных компонентов, предназначенных для поддержки специфичных для платформы Crownbay функций аппаратного обеспечения, например, видео-драйверов. Так как мы хотим использовать x32, нам придется использовать экспериментальный уровень meta-x32. Функции устройства NAS могут быть добавлены уровнем выше с помощью примерного уровня устройства NAS от проекта Yocto с названием meta-baryon. И наконец, мы используем воображаемый уровень с названием meta-myproject для добавления программного обеспечения и файлов конфигурации с целью создания графического пользовательского интерфейса, предназначенного для управления устройством NAS.

В ходе настройки окружения BitBake некоторые начальные файлы конфигурации генерируются на основе данных из пакета oe-build-init-env. Эти конфигурационные файлы позволяют нам в некоторой степени контролировать то, как и какие файлы генерируются системой Poky. Первым файлом из набора этих конфигурационных файлов является файл bblayers.conf. Этот файл мы будем использовать для добавления дополнительных уровней при сборке нашего примера проекта.

Ниже приведено примерное содержание файла bblayers.conf:
# Значение LAYER_CONF_VERSION повышается при каждом несовместимом
# изменении файла  build/conf/bblayers.conf
LCONF_VERSION = "4"
BBFILES ?= ""
BBLAYERS = " \
/home/eflanagan/poky/meta \
/home/eflanagan/poky/meta-yocto \
/home/eflanagan/poky/meta-intel/crownbay \
/home/eflanagan/poky/meta-x32 \
/home/eflanagan/poky/meta-baryon\
/home/eflanagan/poky/meta-myproject \
"

Файл описания уровней bblayers.conf содержит переменную BBLAYERS, которая используется BitBake для поиска уровней. Для лучшего понимания нам следует также рассмотреть устройство используемых уровней. Используя meta-baryon (git://git.yoctoproject.org/meta-baryon) в качестве примера уровня, поинтересуемся содержимым файла конфигурации уровня. Этот файл, conf/layer.conf, разбирается средствами BitBake после начального разбора файла bblayers.conf. Используя полученную информацию, BitBake добавляет дополнительные рецепты сборки, классы и файлы конфигурации в окружение сборки.

Пример распределения уровней в BitBake
Рисунок 23.2: Пример распределения уровней в BitBake

Ниже приведено содержание файла layer.conf из состава meta-baryon:
# Файл конфигурации уровня meta-baryon
# Copyright 2011 Intel Corporation
# Известна директория конфигурации, объединим путь к ней со значением переменной BBPATH для предпочтительного использования наших версий
BBPATH := "${LAYERDIR}:${BBPATH}"

# Известны директории рецептов recipes-*, добавим пути к ним к значению переменной BBFILES
BBFILES := "${BBFILES} ${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "meta-baryon"
BBFILE_PATTERN_meta-baryon := "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-baryon = "7"

Все файлы конфигурации BitBake вносят вклад в процесс генерации хранилища данных BitBake, которое используется в процессе создания очереди выполнения задач. При начале сборки используется класс BitBake с названием BBCooker. Этот класс управляет выполнением задачи сборки путем выполнения действий (baking) в соответствии с рецептами (recipes). Одной из первых задач, выполняемой классом, является попытка загрузки и разбора данных конфигурации. Для информирования системы сборки о том, где она должна искать эти данные конфигурации (и в свою очередь о том, где искать метаданные рецептов), вызывается метод класса parseConfigurationFiles. При наличии нескольких исключений, первым конфигурационным файлом, который разыскивается рассматриваемым классом, является файл bblayers.conf. После того, как заканчивается разбор данного файла, BitBake производит разбор файлов layer.conf для каждого из уровней.

После окончания разбора файлов конфигурации уровней метод parseConfigurationFiles разбирает файл bitbake.conf, главной задачей которого является установка глобальных переменных времени сборки, таких, как переменные, отвечающие за структуру имен директорий для различных директорий корневой файловой системы (rootfs), а также переменные с начальным значением LDFLAGS для использования во время компиляции. Большинство конечных пользователей никогда не прибегнет к манипуляциям с этим файлом, так как практически все необходимые параметры, которые может быть необходимо изменить, будут находиться в рамках контекста рецепта сборки вместо файла для всей системы сборки или могут быть переопределены с помощью конфигурационного файла, такого, как local.conf.

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

Ниже приведен фрагмент файла bitbake.conf, иллюстрирующий подключенные файлы конфигурации:
include conf/site.conf
include conf/auto.conf
include conf/local.conf
include conf/build/${BUILD_SYS}.conf
include conf/target/${TARGET_SYS}.conf
include conf/machine/${MACHINE}.conf

Пример рецепта BitBake для утилиты grep:


Далее: Архитектура BitBake