Дата и время публикации:
Назначение и использование
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:
- alsa: включает поддержку ALSA с установкой OSS-совместимых модулей (драйверов) ядра Linux, если они доступны;
- bluetooth: включает поддержку bluetooth с интеграцией только BT;
- CramFS: включает поддержку файловой системы CramFS;
- directfb: включает поддержку DirectFB
- ext2: включает поддержку сохранения данных с использованием внутреннего носителя информации микропривода HDD взамен использования лишь устройств Flash;
- ipsec: включает поддержку IPSec
- ipv6: включает поддержку Ipv6
- irda: включает поддержку IrDA
- keyboard: включает поддержку клавиатуры, которая выражается в подотовке и размещению битовая карта ключевых событий во время загрузки системы, и привязанных к нажатию файла.
- nfs: включает поддержку клиента NFS для монтирования внешних экспортируемых точек монтирования, например, директории с данными пользователя.
- opengl: включает поддержку кросс-языкового (cross-language) и мути-платформенного (multi-platform) программного пользовательского интерфейса Открытой графической библиотеки (Open Graphics Library), которая используется для отображения двух и трех-мерной графики (two and three-dimensional graphics);
- pci: включает поддержку шины PCI;
- pcmcia: включает поддержку PCMCIA/CompactFlash;
- ppp: включение поддержки модемной передачи данных по протоколу PPP ;
- smbfs: включение поддержки подключения к сетям протоколу SMB (для монтирования к устройствам Samba/Microsoft Windows);
- systemd: включение поддержки параллельной системы запуска служб, повышающей эффективность оболочки и предоставляющей другие полезные функции;
- usbgadget: включает доступ гаджетам USB к сетевым и последовательным интерфейсам, носителям информации;
- usbhost: включает поддержку USB Host, которая позволяет использовать подключенные внешние устройства: клавиатуру, мышь, носители информации, сетевые устройства;
- wayland: включает поддержку поддержку композитного менеджера графических окон Wayland;
- wifi: включает поддержку WiFi;
- x11: включает поддержку сервера оконной графической системы X;
- pam: включает возможность использовать подключаемые модули аутентификации PAM
В нашем случае, переменная 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 в соответствие с аппаратными требованиями реализуемой технической платформы, задаваемых следующим функциональным набором аппаратной поддержки:
- acpi: ACPI (только для архитектур x86/x86_64),
- alsa: аудио устройства ALSA,
- apm: реализации архитектуры APM (или эмуляция архитектуры APM),
- bluetooth: интеграции BT,
- efi: загрузки EFI,
- ext2: жестких дисков HDD или миниатюрных жестких дисков (Microdrive),
- irda: интерфейса IrDA,
- keyboard: ввода с клавиатуры,
- pcbios: загрузки системы с использованием BIOS,
- pci: интерфейса шины PCI,
- pcmcia: гнезд подключения носителей PCMCIA или CompactFlash,
- phone:голосовой функции мобильных устройств,
- qvga: экранов QVGA (320x240),
- rtc: часов реального времени,
- screen: экрана
- serial: последовательного порта (обычно RS232),
- touchscreen: поддержка управления курсором тачскрин,
- usbgadget: поддержка совместимых USB гаджетов,
- usbhost: поддержка USB Host,
- vfat: поддержка файловой системы FAT (требуется для некоторых SD-Card емкостью не более 32GB),
- wifi: поддержка WiFi
Как показано в листинге 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