Yocto linux что это

Сборка Embedded Linux от Yocto для QEMU x86 и первое приложение к нему

Эта статья — быстрый старт с картинками для тех, кому нужно собрать Embedded Linux с помощью Yocto.
Если вы собрались собирать Embedded Linux для специфичных аппаратных средств, например, для SoC на FPGA, то, наверное, как и я столкнётесь с проектом Yocto.

Сборка образа Linux

Основа для сборки — статья
«Yocto Project Quick Start».
Собирать буду в папке

Небольшое отступление:
Запустив терминал, все команды выполняйте в нём, потому что в ходе работы создаются и используются переменные среды. Если закрыли терминал и открыли новый, то заходите в

и придётся повторять некоторые команды. Например,

создаю репозиторий git

теперь текущая директория

теперь, согласно терминам Yocto, получилось
Source Directory — «poky»
local working area (local branch) — dizzy
Первым делом выполняется

Этой командой настраивается окружение оболочки, создается начальный изменяемый набор файлов конфигурации и осуществляется взаимодействие с окружением выполнения системы BitBake путем использования файла сценария, позволяющего Poky установить, выполняются ли минимальные системные требования. Результат выполнения команды сообщит или о проблемах, например, недостающих пакетах, или о возможности продолжить редактированием файла conf/local.conf.

Здесь следует указать число нитей, которое будет запускать средство сборки bitbake. Чтобы максимально использовать вычислительные возможности, число нитей должно соответствовать числу ядер процессора. Я указал на 1 меньше, чтобы компьютером во время сборки удобнее было пользоваться.
Так же я добавил дополнительные возможности, полезные для разработки.
Так как собираем для стандартной QEMU x86, то остальное можно не изменять.

Далее можно выбрать “рецепт” — вариант сборки со своим набором библиотек, утилит, создаваемых файлов, образов и т.п.
Список рецептов с их краткими описаниями можно посмотреть здесь:
рецепты openembedded-core
пролистайте до рецептов, начинающихся с core-…
Не советую собирать core-image-minimal для ознакомления. Там нет ssh и других удобных для отладки инструментов.
Я выбрал core-image-sato. Это сборка с GUI SATO

Будьте готовы, что ждать завершения сборки придётся, возможно, от 3 часов до 3 и более дней. В счастью, процесс можно приостановить и возобновить.
Чтобы приостановить, нажмите + один (!) раз и подождите, когда завершатся все начатые операции. Иначе, возможно, появятся ошибочки и придётся переделывать. Чтобы возобновить, повторите

Если закрыли терминал, то в новом терминале перед сборкой придётся повторить установку переменных среды:

По завершении сборки можно проверить, что получилось, запустив эмулятор QEMU

Появится окно терминала xterm, там надо будет ввести пароль root хоста для создания интерфейса tap. Там же можно увидеть IP host-машины на tap интерфейсе и IP эмулируемой машины. У меня 192.168.7.1 и 192.168.7.2 соответственно.
Затем, если собран SATO должно появится окно графического интерфейса:

Если запущенный эмулятор мешает, пока его можно закрыть. Полистайте стрелочками в верхней части GUI до появления соответствующей иконки выключения или введите poweroff через терминал SATO или по ssh. Про ssh будет позже.
Не закрывайте QEMU крестиком на главном окошке эмулятора. Закрывайте штатными средствами эмулируемой машины. Иначе у вас в системе от QEMU останутся интерфейсы ethX, tapX, virbrX, которые придётся будет ifconfig… ifdown, или как это делается на вашей ОС. Или каждый раз при запуске QEMU будут новые IP хоста и QEMU, что неудобно.

Средства разработки

Используется Eclipse IDE for C/C++ Developers, версия Luna. В этой сборке имеются плагины CDT, GNU ARM и некоторые другие полезные для кросс-компиляции и разработки встроенного ПО плагины.
Можно скачать отсюда:
Eclipse Luna SR2.

Будем собирать приложения Hello, world!

Eclipse, Cross GCC

Сначала простой путь, соберём обычными средствами Eclipse: CDT + GNU ARM
Если этих плагинов в вашем Eclipse ещё нет, то добавьте плагин CDT из стандартного репозитория Eclipse и отсюда GNU ARM Plugin for Eclipse GNU ARM C/C++ Cross Compiler и что ещё захочется.

Создаём новый проект C++:
Меню Eclipse File->New->Project…->C/C++->C++ Project
Нужно выбрать
Project type: Executable->Hello World C++ Project
Toolchains: Cross GCC
Yocto linux что это. Смотреть фото Yocto linux что это. Смотреть картинку Yocto linux что это. Картинка про Yocto linux что это. Фото Yocto linux что это
заполните поле Author
Теперь самое важное, что касается системы сборки:
Cross compiller prefix: i586-poky-linux-
Cross compiler path: /home/. /My_Designs/Poky/poky/build/tmp/sysroots/x86_64-linux/usr/bin/i586-poky-linux
Компилируем проект
Project->Build Project
Должен появиться исполняемый файл
Так как компилировали для QEMU x86 Linux, то должен запуститься и на вашей host машине, если, конечно, вы работаете на x86 Linux или совместимой с ней. У меня запустилось на IA64 Ubuntu.
Теперь, если успели закрыть QEMU, то запустите опять

Появится окно терминала xterm, надо будет ввести пароль root для создания tap интерфейса.

Yocto linux что это. Смотреть фото Yocto linux что это. Смотреть картинку Yocto linux что это. Картинка про Yocto linux что это. Фото Yocto linux что это

Как видно, у меня IP host-машины 192.168.7.1, IP qemu 192.168.7.2
Затем появится окно QEMU с графическим интерфейсом
Можно подсоединиться к QEMU через ssh и sftp. Первый полезен для запуска программы, второй — для отправки этой программы на эмулируемую машину.
Файл я отправлял с помощью файлового менеджера Krusader. В Windows можно использовать FileZilla или другими.
В Krusader я выбрал Tools->New Net Connection…, в диалоговом окне нужно выбрать sftp://, ввести IP и Username: root

Yocto linux что это. Смотреть фото Yocto linux что это. Смотреть картинку Yocto linux что это. Картинка про Yocto linux что это. Фото Yocto linux что это

В домашнюю папку на QEMU я скопировал исполняемый файл hello_cross_gcc_02 из папки Debug проекта
Далее можно открыть терминал в графическом интерфейсе QEMU и запустить программу на выполнение оттуда. Мне более удобным показалось соединиться через ssh. В окне терминала host-машины запускаем ssh

и запускаем недавно скопированный исполняемый файл:

Должно получиться
Hello World!

Сборка в ADT

Подготовка Eclipse

Подготовка сборки

Для организации взаимодействия с IDE и средствами разработки, предусмотрены скрипты:

для запуска QEMU плагином Yocto нужен rpcbind

нужно отредактировать файл /etc/default/rpcbind

нужно распаковать root filesystem в ту папку в sysroots, где лежит файловая система эмулируемой машины. В нашем случае qemux86:

Настройка Yocto ADT в Eclipse

В Eclipse меню Windows->Preferences, Yocto Project ADT
Cross Compiler Options
Build system derived toolchain
Toolchain Root Location:
/home/. /Poky/poky/build/
Sysroot Location:
/home/. /Poky/poky/build/tmp/sysroots/qemux86
Target Architecture: i586-poky-linux
Target Options:
QEMU
Kernel: /home/. /Poky/poky/build/tmp/deploy/images/qemux86/bzImage-qemux86.bin

Yocto linux что это. Смотреть фото Yocto linux что это. Смотреть картинку Yocto linux что это. Картинка про Yocto linux что это. Фото Yocto linux что это

Проект Hello, World! в Eclipse c Yocto ADT

Создаём новый проект
New Project->C++ Project
Project name: hello_qemu_cmake_04
Project type: Yocto Project ADT CMake Project->Hello World C++ CMake Project
Yocto linux что это. Смотреть фото Yocto linux что это. Смотреть картинку Yocto linux что это. Картинка про Yocto linux что это. Фото Yocto linux что это

Запуск и отладка из IDE Eclipse

Итог должен получиться примерно такой:

У меня в окне консоли Eclipse “Remote Shell” было так:

Затем приглашение переключиться в перспективу Debug. Есть смысл согласиться.
Отладчик остановился на строке

Жмём Step Over (F6)
В терминале

Теперь можно писать программу. Пока для QEMU x86.

Источник

Мультимедиа центр «Kodi» и Yocto Project

Yocto linux что это. Смотреть фото Yocto linux что это. Смотреть картинку Yocto linux что это. Картинка про Yocto linux что это. Фото Yocto linux что это

Введение в Yocto Project

Yocto Project — это совместный Open Source проект для упрощения разработки дистрибутивов для встраиваемых систем. Yocto содержит большое количество шаблонов, метаданных и инструментальных средств сборки. В Yocto Project вы можете подключить большое количество BSP (пакет поддержки платформы) слоев для всевозможных аппаратных платформ.

Основное назначение статьи — это попытка показать сборку типового дистрибутива в Yocto Project на примере хорошо известного мультимедиа центра Kodi, версии 17.6 для одноплатного компьютера «Raspberry Pi» 3B.

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

Статья является сугубо практической и демонстрирует возможности использования наработок Yocto Project и OpenEmbedded для сборки мультимедиа центра «Kodi». Управление слоями Yocto осуществляется с помощью утилиты Repo от Google. Статья из серии «Документируй это».

Содержание:

Установка Yocto Project в Ubuntu
Механизм сборки дистрибутива в Yocto Project
Использование OpenEmbedded совместно c Yocto Project
Пакет поддержки платформы (BSP)
Управление слоями Yocto c помощью Repo
Установка Repo
Манифест для сборки дистрибутива
Содержимое Манифеста
Описание Манифеста
Структура bs-manifest
Инициализация переменных Poky
Инициализация Repo
Синхронизация Repo
Создание конфигурации Yocto Project
Конфигурационный файл build/conf/local.conf
Конфигурационный файл build/conf/bblayers.conf
Слой для сборки мультимедиа центра
Структура слоя
Конфигурация слоя
Состав recipes-berserk
Состав recipes-core
Состав recipes-kernel
Состав recipes-mediacentre
Состав recipes-multimedia
Дополнение рецепта для сборки Kodi
Добавление нового пункта в меню настроек Kodi
Максимальные настройки буферизации для видео
Просмотр телевидения по протоколу IPTV
Просмотр Youtube с помощью Kodi плагина
Консольное shell расширение конфигурации сети
Рецепт сборки дистрибутива
Краткая инструкция по созданию образа дистрибутива
Постскриптум

Установка Yocto Project в Ubuntu

Для сборки дистрибутива с помощью Yocto Project в Ubuntu вам необходимо установить следующие пакеты:

Пакеты устанавливаются с помощью команды apt-get install и команды повышения привилегий — sudo. В системе Ubuntu это широко распространенная практика, когда для выполнения административных действий используется команда sudo (при создании основного пользователя системы, он автоматически прописывается в группу «sudo»).

Более подробную инструкцию по установке вы можете посмотреть здесь:

Механизм сборки дистрибутива в Yocto Project

Слои разделяются на аппаратно зависимые — BSP слои, UI слои (пользовательского интерфейса), специфические Yocto слои, а также слои реализующие определенную функциональность:
например слои из OpenEmbedded => multimedia, python, perl, ruby, networking, systemd, webserver и т.д.

Использование OpenEmbedded совместно c Yocto Project

И еще, если вы будете использовать Yocto Project, то наверняка вам понадобятся слои с дополнительной функциональностью т.е. большой набор рецептов на все случаи жизни. И такой набор есть — это рецепты из OpenEmbedded. OpenEmbedded — инфраструктура для сборки пакетов для встраиваемого Linux.

OpenEmbedded полностью совместим с Yocto Project, так как этот проект был взят за основу для Yocto Project. Возможно поэтому Yocto Project отличается немного лучшей стабильностью, лучшей документацией и немного лучшей поддержкой (но в основе своей это все тот же OpenEmbedded).

Пакет поддержки платформы (BSP)

Пакет поддержки платформы (Board Support Package) — это отдельный, специализированный слой(и) для конкретной платы, который определяет аппаратные особенности платформы т.е. реализует те специфические вещи, которые отличают одну плату от другой: особенности процессора, прерывания, адресация, особенности загрузчика, особенности видео адаптера (GPU) и т.д.

В этой статье используется BSP слой — meta-raspberrypi
Репозиторий слоя располагается по адресу: git.yoctoproject.org/git/meta-raspberrypi

Управление слоями Yocto c помощью Repo

Yocto Project может использовать большое количество слоев от разных поставщиков — разработчиков оборудования, и всем этим необходимо как то управлять. Представьте себе, что у вас есть десяток различных плат, и к каждой плате поставляется отдельный BSP гит репозиторий, и это не считая инфраструктуры самого Yocto проекта, плюс возможная дополнительная функциональность из OpenEmbedded.

В такой ситуации отдельным простым скриптом установки уже не отделаешься. Волей, неволей приходиться искать инструменты, которые умеют это делать хорошо. Даже более чем хорошо. Одним из лучших инструментов такого рода является утилита Google — Repo.

Repo — это основной инструмент для управления GIT репозиториями при сборке операционной системы «Андроид» с его большой кодовой базой. Repo позволяет в одном проекте управлять десятком, если не сотней отдельных гит репозиториев, версии которых вы можете аккуратно указать в одном xml файле Манифеста

и для правильной синхронизации всех версий всех репозиториев вам достаточно выполнить одну команду

repo sync

Установка Repo

/bin
(команду curl можно установить отдельно: sudo apt-get install curl)

и в дальнейшем вам достаточно использовать в консоли команду: repo

или так,
если каталог HOME/bin не добавился с стандартный путь запуска автоматически
см. файл HOME/.profile

Манифест для сборки дистрибутива

Содержимое Манифеста

Для управления слоями дистрибутива используется файл torvin-0.2.5.xml

Описание Манифеста

В начале манифеста тегами remote обозначены два основных GIT репозитория и один вспомогательный:

https:⁄⁄git.yoctoproject.org/git — Yocto репозиторий, именованный как yocto
https:⁄⁄github.com/openembedded — OpenEmbedded репозиторий, именованный как oe
https:⁄⁄github.com/berserktv — вспомогательный GIT репозиторий, именованный как bs

В следующей части манифеста с помощью сокращенных именований осуществляется работа с проектами расположенными в этих репозиториях, тег project содержит следующие атрибуты:

remote — имя удаленного именованного репозитория
revision — название ветки или hash версии
name — имя проекта в указанном репозитории
path — локальный путь проекта в вашей файловой системе

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

Структура bs-manifest

Проект bs-manifest используется для гибкого управления конфигурациями, с учетом сборок разных версий дистрибутива. У меня это версия — 0.2.5

Инициализация переменных Poky

Скрипт начальной инициализации setup-environment был взят из проекта Freescale Community (в среде yocto это часто встречающееся решение). Скрипт отвечает за стартовую инициализацию переменных системы сборки Poky, скрипт создает структуру каталогов, в которой очень хорошо разделяется:

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

Инициализация Repo

Для инициализации repo необходимо выполнить команду:

где -u https:⁄⁄github.com/berserktv/bs-manifest указывает GIT путь к проекту манифеста

где путь -m raspberry/rocko/torvin-0.2.5.xml к конфигурационному файлу указывает следующее:

Синхронизация Repo

для начальной загрузки или последующей синхронизации достаточно выполнить команду:

которая заберет все последние версии GIT проектов указанных в файле манифеста (обычно указываются ветки), если же у вас указан hash коммита или имя тега в атрибуте revision, то версия для данного git репозитория не измениться. Имя тега можно указать так: revision=«refs/tags/v0.2.5»

Создание конфигурации Yocto Project

После того, как будет выполнена команда repo sync, можно приступать к созданию основной конфигурации Yocto Project:

после завершения работы скрипта, будет создан каталог build/conf:
c двумя основными файлами:

т.е. файлы берутся из sources/bs-manifest/raspberry/rocko/conf
см. создание символической ссылки на base

Конфигурационный файл build/conf/local.conf

Конфигурационный файл build/conf/bblayers.conf

основные переменные файла local.conf — на которые нужно обратить внимание:

примечание:
например если оставить только переменную GPU_MEM = «128»,
то для всех плат RPI, RPI2, RPI3
не зависимо от количества реальной оперативной памяти
на плате будет всегда выделено для GPU — 128Мб
(и общий размер ОЗУ уменьшиться на это значение)

в случае указания всех переменных, директивы GPU_MEM_256, GPU_MEM_512, GPU_MEM_1024 являются более приоритетными.

Для сборки Мультимедиа центра, помимо штатных слоев Yocto см. файл bblayers.conf

я подключил четыре слоя с дополнительной функциональностью из OpenEmbedded.

Мультимедиа Центр Kodi — является сложной программой, которая использует большое количество внешних библиотек и каждую библиотеку нужно собрать с помощью рецепта сборки, поэтому по возможности я буду использовать все рецепты из OpenEmbedded в категории Multimedia

Итак, у меня подключен слой Multimedia и слои от которых он зависит

затем подключен еще один слой OpenEmbedded, для работы с файловыми системами

далее подключен основной BSP слой для платформы Raspberry Pi

ну и в самом конце подключен дополнительный слой, отвечающий за сборку образа дистрибутива с функциональностью «Мультимедиа центра»

Слой для сборки мультимедиа центра

На мой взгляд Yocto Project является промышленным комбайном для создания встраиваемых дистрибутивов. Но если вы когда нибудь работали с системой сборки Buildroot, то Yocto может вам показаться достаточно громоздким. Он использует огромное количество свободного места на жестком диске. Для нормальной работы Yocto требуется порядка 80 — 100 Гб свободного пространства и это обычно с учетом сборки только под одну платформу.

Yocto прекрасно справляется со своим основным назначением — поддержкой как можно большего количества различных аппаратных платформ и для этого требуется максимально гибкий механизм по переключению сборок. И этому механизму требуется место и время. Сборка дистрибутива в Yocto процесс не быстрый.

Итак, вся функциональность, для сборки «Мультимедиа центра» у меня находиться с отдельном слое:

(Название взято из моей любимой книги «Молот и крест», писателя Гарри Гаррисона.)
(Torvin также является персонажем данной книги.)

Структура слоя

конфигурация слоя

DISTRO_FEATURES_append += » wifi x11″

PREFERRED_VERSION_ffmpeg = «3.1.11»
SYSVINIT_ENABLED_GETTYS = «1»

состав recipes-berserk

состав recipes-core

Добавив расширение рецепта init-ifupdown, я заменяю штатный конфигурационный файл на собственный, и меняю порядок (приоритет) запуска скрипта для уровней исполнения

В настоящий момент, почти все современные Linux дистрибутивы включают в свой состав стартовую заставку. Обычно стартовая заставка показывает текущее состояние загрузки т.е. индикатор времени прошедшего с момента запуска системы. В этом плане Yocto не исключение и вы можете поменять изображение штатной стартовой заставки на произвольную картинку.

Для этого необходимо:

состав recipes-kernel

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

В самом простом случае эту базу можно включить непосредственно в ядро статически, указав параметр:
CONFIG_CFG80211_INTERNAL_REGDB=y
что собственно я и сделал, подключив патч c этой базой db.txt.patch

И еще: в Yocto существует такое понятие как фрагменты конфигураций ядра. Обычно фрагмент конфигурации, файл с расширением cfg, содержит только те параметры ядра, которые вам явно необходимы для определенных целей. И этот фрагмент конфигурации добавляется к параметрам по умолчанию, которые уже присутствуют в рецепте при сборке ядра.

В дополнении рецепта bbappend, также можно изменить параметры, которые передаются ядру во время запуска:

т.е. переопределить переменную
CMDLINE см. файл linux-raspberrypi_4.9.bbappend

состав recipes-mediacentre

состав recipes-multimedia

Дополнение рецепта для сборки «Kodi»

В слое OpenEmbedded находиться штатный рецепт для сборки Kodi, но он достаточно общий, а мне хотелось бы получить немного более стабильную и проверенную версию для платформы Raspberry Pi.

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

В мире OpenSource сообщества есть несколько хорошо известных проектов, использующих Kodi, лучшим из которых (на мой взляд) является LibreElec (OpenElec). У LibreElec есть хорошая сборка для платформы Raspberry Pi. Вот у них то и лучше всего взять патч обратного портирования для Kodi. Тем самым, можно избавиться от огромного количества проблем, даже не узнав об этом.

Мультимедиа центр Kodi заточен на проигрывание «Медиа» контекста, и на мой взгляд самым критичным компонентом является связка Kodi и FFmpeg, т.е. взаимодействие определенных версий этих программ, остальные библиотеки можно оставить из слоев Yocto и OpenEmbedded.

Для сборки я взял стабильную версия Kodi 17.6 и версию FFmpeg 3.1.11

Включаемый файл с описанием версии будет такой kodi-version.inc

Ветка Yocto и OpenEmbedded, которую я рассматриваю — rocko, содержит версию Kodi 17.3, и для того чтобы перейти к версии 17.6, достаточно добавить небольшое дополнение для рецепта — kodi_17.bbappend

Опция сборки «—enable-optical-drive» позволяет подключить удобный механизм оповещения, который используется в Kodi при подключении оптического диска. В этом случае модуль MediaManager(а) (xbmc/storage/MediaManager.cpp) отслеживает подключение/отключение новых дисковых разделов, и выводит на экран всплывающее сообщение об этом.

пример udev правила подключения/отключения дисков:

Добавление нового пункта в меню настроек Kodi

В Kodi 17.6, за отображение пунктов меню отвечают конфигурационные xml файлы. Для добавления еще одного под пункта в меню «Settings», достаточно подкорректировать файл:
kodi/addons/skin.estuary/xml/Settings.xml

где skin.estuary — тема оформления меню по умолчанию

описание пункта выглядит так:

label — название пункта меню
onclick — обработка событие нажатия на кнопку меню
(запуск плагина, с передачей первым аргументом строки «butnetwork»)
icon — иконка пункта меню (путь к png изображению)

Указанная выше функциональность, а также подключение нескольких дополнительных Kodi плагинов интегрирована с помощью файла bs-menu.patch

Максимальные настройки буферизации для видео

В мультимедиа центре Kodi для увеличения производительности можно указать максимальные настройки буферизации:

buffermode=1
— буферизировать запросы для всех файловых систем (включая локальную)

readfactor
— регулирует скорость загрузки на основе среднего битрейта видео. Так, например, если вы воспроизводите видео со средней скоростью передачи данных 5 Мбит/с и устанавливаете коэффициент чтения буфера на 2.0, это ограничит скорость загрузки (и, следовательно, скорость заполнения кеша) примерно до 10 Мбит/с, таким образом:

readfactor=20
снимает ограничение на скорость загрузки

memorysize =139460608
— размер буфера составляет 133 МБайт, при этом используется 133*3 оперативной памяти т.е. около 400 Мбайт оперативной памяти

Просмотр телевидения по протоколу IPTV

Медиацентр Kodi является очень мощным инструментом для просмотра цифрового контента.

Основной функцией, для которой я собирал «Медиацентр» является функция просмотра цифрового телевидения по протоколу IPTV (Internet Protocol Television) т.е. телевидение по протоколу интернета. С помощью данной функции вы можете просматривать цифровое телевидение от вашего интернет провайдера.

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

Для поддержки IPTV в Kodi существует несколько вариантов плагинов, из которых я остановился на плагине pvr.iptvsimple

Для сборки плагина используется рецепт:

Плагин подключается/настраивается через:
Основное меню Kodi => «Дополнения» => «Мои дополнения» => «Клиенты PVR» => «PVR IPTV Simple Client»

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

Просмотр Youtube с помощью Kodi плагина

Программисты, которые разработали «Kodi», предусмотрели возможность гибкого расширения его функций. Это сделано для того что бы любой энтузиаст при желании мог добавить в Kodi то, что ему ну очень нужно. И плагинов этих для Kodi тьма тьмущая. Ну вы поняли. Их настолько много, что это заслуживает описания в отдельной статье.

Плагины устанавливаются очень просто, достаточно подключить Kodi к интернету и нажать пару кнопок в меню. Об этом вы можете почитать на любом из форумов посвященным Kodi. Но сборка, есть сборка, и еще один плагин я включу в дистрибутив в качестве примера.

Самым интересным и распространенным plugin(ом) для Kodi по моему убеждению является плагин просмотра Youtube. Kodi же мультимедиа центр, а Youtube самое огромное хранилище этого самого мультимедиа контента, так что плагин Youtube для Kodi почти обязателен.

Плагин написан на языке python, и это штатный механизм плагинов, вам не нужно ничего компилировать, достаточно просто скопировать готовый плагин в корневой каталог с плагинами, и указать имя плагина в xml файле манифеста:
«system/addon-manifest.xml»

Плагин взят из официального репозитория, и его исходный код включен в архив:
recipes-mediacentre/kodi-plugins/files/plugin.video.youtube.tar.gz

Расположение рецепта сборки плагина см. выше в главе «состав recipes-mediacentre»

Консольное shell расширение конфигурации сети

Так как дистрибутив собираемый в рамках данной статьи является демонстрационным, то и требования к настройки «Сетевых интерфейсов» к нему минимальны. Мне не хотелось тащить для этого, какой либо тяжелый сетевой менеджер, сильно мне не понятный и сильно громоздкий, и поэтому я написал два shell скрипта, дополняющих настройку штатного механизма конфигурации:

Для удобной настройки Ethernet/WLAN сетевых интерфейсов через GUI, у меня используется еще один небольшой Kodi плагин «script.berserk.network». Это почти единственный Kodi plugin, в котором я разобрался, но для этого мне пришлось его написать. Он предельно компактный и минималистичный и написан на языке «python».

Оба этих компонента, собираются с помощью рецептов:

Для автоматического подключения к WiFi точке доступа при старте системы, у меня используется udev правило: /etc/udev/rules.d/80-wifi-start.rules

Рецепт сборки дистрибутива

В Yocto Project предусмотрен механизм повторного использования. Есть классы, от которых вы можете наследоваться (директива «inherit»), и есть базовые рецепты, которые вы можете подключить (директива «include»).

Покажу наследование на примере класса:
poky/meta/clasess/core-image.bbclass

Класс отвечает за описание групп пакетов, которые вы можете включить в тот или иной рецепт. Для этого достаточно указать в начале рецепта конструкцию:
inherit core-image

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

Особенности образа указываются так:

Еще есть DISTRO_FEATURES — особенности дистрибутива, которые можно указать в конфигурационном файле слоя. Это функции уровня дистрибутива, и если вы например поменяете какую то особенность (например x11), то последующая сборка начнет пересобирать все пакеты, которые зависят от этой опции (это может занимать достаточно длительное время).

Основной базовый рецепт, который я использую:
poky/meta/recipes-core/images/core-image-minimal.bb

Хотел бы уточнить, что например пакет «kernel-modules», установит
все модули ядра указанные в файле defconfig в образ дистрибутива.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *