× К оглавлению На главную Об авторе

Дата и время публикации:    

Назначение и использование

1. Назначение

Функциональность аппаратных и программных средств собираемого дистрибутива "Poky (Yocto Project Reference Distro)" напрямую зависит от двух основных переменных MACHINE_FEATURES и DISTRO_FEATURES, которые по своей сути отвечают за функциональное наполнение дистрибутива за счет определения функций общего назначения ко всему дистрибутиву или определенной его части – по одному или нескольким пакетам.

Переменные MACHINE_FEATURES и DISTRO_FEATURES обычно используются в мета слое, устанавливающий пакет поддержки реализуемой технической платформы (Board Support Package, BSP) путем задания определенной конфигурации аппаратных и программных средств собираемого дистрибутива. Так, последняя переменная обычно применяется в задаче do_configure для реализации в рецептах пакетов операций сборки, компоновки и подключения необходимого им прикладного, системного программного обеспечения, а также модулей (драйверов) ядра Linux.

2. Использование

2.1 Порядок использования переменных

В обеих переменных MACHINE_FEATURES и DISTRO_FEATURES задается набор функций, который складывается из разных слоев метаданных, используемых при построении дистрибутива, в большинстве случаев, на этапе выполнения задачи do_configure каждого пакета или лексического разбора конфигурационных файлов. При этом, в локальном конфигурационном файле conf/local.conf сборочной директории дистрибутива BUILDDIR, должны быть определены переменные MACHINE и DISTRO, как показано в листинге 2.1.1

Листинг 2.1.1 Фрагмент файла conf/local.conf сборочной директории дистрибутива BUILDDIR

...
MACHINE ?= "qemuarm5te"
...
DISTRO ?= "poky-qemuarm"

Соответственно, когда во время лексического анализа файла conf/local.conf, исполняемый скрипт bitbake сборочной машины Yocto/poky наталкивается на текстовое значение "qemuarm5te" и если оно не было в дальнейшем переопределено в собственным слое матаданных BSP, он ожидает найти файл qemuarm.conf, например, в директории основного слоя метаданных meta/conf/machine и/или дополнительно определенном мета слое meta-qemuarm/conf/machine, где для переменной MACHINE_FEATURES установлен функциональный набор используемых аппаратных средств реализуемой технической платформы qemuarm5te, как показано в результатах поиска командой find и отфильтрованные egrep, в дампе 2.1.2

Дамп 2.1.2 Результат поиска применения переменной MACHINE_FEATURES

...
$ find meta* -type f -name "*.conf" -print | xargs egrep -ne "^MACHINE_FEATURES"
meta/conf/documentation.conf:277:MACHINE_FEATURES[doc] = "Specifies the list of hardware features the MACHINE supports."
meta/conf/documentation.conf:278:MACHINE_FEATURES_BACKFILL[doc] = "Features to be added to MACHINE_FEATURES if not also present in MACHINE_FEATURES_BACKFILL_CONSIDERED. This variable is set in the meta/conf/bitbake.conf file and is not intended to be user-configurable."
meta/conf/documentation.conf:279:MACHINE_FEATURES_BACKFILL_CONSIDERED[doc] = "Features from MACHINE_FEATURES_BACKFILL that should not be backfilled (i.e. added to MACHINE_FEATURES) during the build."
meta/conf/machine/qemux86.conf:29:MACHINE_FEATURES += "x86 pci"
meta/conf/machine/qemux86-64.conf:30:MACHINE_FEATURES += "x86 pci"
meta/conf/bitbake.conf:816:MACHINE_FEATURES ?= ""
meta/conf/bitbake.conf:840:MACHINE_FEATURES_BACKFILL = "rtc qemu-usermode"
meta-yocto-bsp/conf/machine/edgerouter.conf:7:MACHINE_FEATURES = "pci ext2 ext3 serial"
meta-yocto-bsp/conf/machine/mpc8315e-rdb.conf:16:MACHINE_FEATURES = "keyboard pci ext2 ext3 serial"
meta-yocto-bsp/conf/machine/beaglebone-yocto.conf:39:MACHINE_FEATURES = "usbgadget usbhost vfat alsa"
...

А вот с переменной DISTRO будет несколько посложнее, потому что функциональный набор программных средств, устанавливаемых переменной DISTRO_FEATURES может быть размазан по многим участвующим в сборке дистрибутива метаслоям и конфигурационных файлов conf/distro/poky.conf или различных вариациях conf/distro/poky-*.conf, которые были найдены командой find и отфильтрованные egrep, как показано в дамп 2.1.3

Дамп 2.1.3 Результат поиска применения переменной DISTRO_FEATURES

$ find meta* -type f -name "poky*.conf" -print | xargs egrep -ne "^DISTRO_FEATURES"
...
meta-poky/conf/distro/poky-lsb.conf:7:DISTRO_FEATURES_append = " pam largefile opengl"
meta-poky/conf/distro/poky-tiny.conf:64:DISTRO_FEATURES_TINY = "pci"
meta-poky/conf/distro/poky-tiny.conf:65:DISTRO_FEATURES_NET = "ipv4 ipv6"
meta-poky/conf/distro/poky-tiny.conf:66:DISTRO_FEATURES_USB = "usbhost"
...
meta-poky/conf/distro/poky-tiny.conf:78:DISTRO_FEATURES_append_libc-uclibc = " largefile"
meta-poky/conf/distro/poky-tiny.conf:79:DISTRO_FEATURES_append_libc-musl = " largefile"
...
meta-poky/conf/distro/poky-tiny.conf:90:DISTRO_FEATURES_BACKFILL_CONSIDERED += "sysvinit"

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

Рисунок 1

2.2 Переменная DISTRO_FEATURES

Как уже упоминал выше, переменная DISTRO_FEATURESсодержит список функций, которыми наделяем собираемый дистрибутив в конфигурационных файлах conf/distro/poky.conf и conf/distro/poky-*.conf в одном или нескольких используемых слоев метаданных с некоторой вариацией имен и определяемых значений, показанными ранее в дампе 2.1.3

Также допускается добавлять некоторую функциональность, присовокупляя префикс DISTRO_FEATURES_append или удалять ‚ с префиксом DISTRO_FEATURES_remove, ко всему дистрибутиву или в частных случаях для отдельно собираемых пакетов, например для libc-uclibc или libc-musl, как показано в дампе 2.1.3

Полный список значений определяемый и включенные в слой метаданных сборочной машины по умолчанию в DISTRO_FEATURE:

В нашем случае, переменная DISTRO указывает на дистрибутив "poky-qemuarm", конфигурация программных средств которого уточняется в файле conf/distro/poky-qemuarm.conf, как показано в листинге 2.2.1

Листинг 2.2.1 . Фрагмент файла conf/distro/poky-qemuarm.conf

...
require conf/distro/poky.conf
DISTRO = "poky-mydistro",
DISTRO_FEATURES_remove ?= "opengl wayland x11 3g nfc pulseaudio ipv6 wifi bluetooth ipsec directfb"
DISTRO_FEATURES += "pam ppp usbgadget usbhost nfs"
...

Из которого видно, что данный дистрибутив является производным от "Poky (Yocto Project Reference Distro)", текстовые значения названия DISTRO_NAME и версия DISTRO_VERSION определены в файле "conf/distro/poky.conf" . Поэтому в файле conf/distro/poky-qemuarm.conf, уточняющую конфигурацию достаточно указать наименование производного дистрибутива DISTRO и добавляемые расширяющие функциональность программные средства через DISTRO_FEATURES += и удаляемые — через DISTRO_FEATURES_remove

При этом, если DISTRO_FEATURES ?= будет пытаться добавлять функции к дистрибутив, то DISTRO_FEATURES_remove ?= соответственно будет также пытаться удалять их при необходимости.

Для контроля за выставленной функциональностью программных средств через переменную DISTRO_VERSION следует пользоваться командой Bitbake, как показано в дампе 2.2.2

Дамп 2.2.2 Результат контроля с использованием команды Bitbake -E

bitbake -e  | grep "^DISTRO_FEATURES"

Где в <imagename> задается имя собираемого образа из списка возможных: core-image-minimal, core-image-sato, meta-toolchain или meta-ide-support

2.3 Переменная MACHINE_FEATURES

Устанавливает в конфигурационном файле conf/machine/MACHINE.conf слоя метаданных набор поддержки драйверов (модулей) устройств и подсистем ядра Linux в соответствие с аппаратными требованиями реализуемой технической платформы, задаваемых следующим функциональным набором аппаратной поддержки:

Как показано в листинге 2.3.1, всю вышеперечисленные функции «железа» можно уточнить в файле conf/machine/MACHINE.conf реализации технической платформы qemuarm5te того же мета слоя, который, к примеру, обзовем meta-qemuarm, откуда родом, приведенный ранее в листинге 2.3.1, файл конфигурации программных средств дистрибутива "poky-qemuarm"

Листинг 2.3.1 Фрагмент файла conf/machine/MACHINE.conf

#@TYPE: Machine
#@NAME: QEMU ARM9 machine
#@DESCRIPTION: Machine configuration for running an ARMv5te system on QEMU

require conf/machine/include/qemu.inc
require conf/machine/include/tune-arm926ejs.inc

...

MACHINE_FEATURES_append = "rtc usbgadget usbhost vfat"
MACHINE_FEATURES_remove ?= "bluetooth wifi"

...

Соответственно, безусловно (через присвоение) добавляем функции "rtc usbgadget usbhost vfat" через MACHINE_FEATURES_append и удаляем (по возможности) "bluetooth wifi" в MACHINE_FEATURES_remove

Для контроля за выставленной функциональностью аппаратных средств следует пользоваться командой Bitbake, как показано в дампе 2.3.2

Дамп 2.3.2 Результат контроля с использованием команды Bitbake -E

bitbake -e  | grep "^MACHINE_FEATURES"

3. Библиография

3.1 Yocto Mega-manual. Variable DISTRO_FEATURES

3.2 Yocto Mega-manual. Features distro

3.3 [yocto] DISTRO_FEATURES modification from image recipe?

3.4 StackOverflow.com. How to know distro features

Сайт разработан в соответствии с рекомендациями консорциума W3C для языка разметки HTML5.

Об авторе можно прочитать здесь.

Copyright © 2015-2019 Андрей Ржавсков