Будучи проектом совместного сотрудничества (иногда такие проекты называются "зонтичными"), Yocto Project охватывает различные составляющие процесса разработки. Эти составляющие именуются проектами в рамках общего проекта Yocto Project и включают в себя инструменты для сборки, метаданные инструкций по сборке (называемые рецептами), библиотеки, утилиты и графические интерфейсы.
Poky – это эталонная система сборки в рамках проекта Yocto Project. Она включает в себя BitBake, OpenEmbedded-Core, пакет поддержки платформы (Board Support Package, BSP), а также прочие пакеты и компоненты, объединенные в единую сборку. Название Poky также относится к эталонному дистрибутиву Linux, который создается этой системой сборки и может быть чрезвычайно минималистичным (core-image-minimal) или же представлять собой полноценную систему Linux с графической оболочкой (core-image-sato)
Систему сборки Poky можно рассматривать как эталонную систему для всего проекта – рабочий пример реального процесса. При загрузке Yocto Project фактически вы получаете экземпляр этих инструментов, утилит, библиотек, вспомогательных средств и метаданных, которые можно использовать для создания системы по умолчанию, как это описывается в нашей статье. Как эталонная система, так и эталонный дистрибутив, который она создает, называются Poky. Вы можете использовать Poky как начальную точку для создания ваших собственных дистрибутивов, которые, конечно же, могут называться как угодно.
Для всех систем сборки требуется наличие инструментария toolchain, состоящего из компилятора, ассемблера, линковщика и прочих двоичных утилит, необходимых для создания исполняемых файлов для той или иной архитектуры. Poky использует набор GNU Compiler Collection (GCC), но вы можете указать и другие наборы компиляторов. В Poky используется механизм кросс-компиляции: использование набора компиляторов одной архитектуры для создания исполняемых файлов другой архитектуры (например, сборка ARM-дистрибутива, выполняемая на компьютере с x86-архитектурой). Разработчики часто используют кросс-компиляцию при разработке встраиваемых систем, поскольку их рабочие компьютеры намного мощнее, чем типичная встраиваемая система.
Набор метаданных разделен на слои, каждый из которых обладает дополнительной функциональностью по отношению к нижележащим слоям. Базовый слой называется OpenEmbedded-Core (или oe-core) и содержит общие рецепты, классы и связанные с ними функции, необходимые для любой сборки. Эти сборки впоследствии можно настраивать под собственные нужды, добавляя новые слои поверх слоя oe-core.
OpenEmbedded-Core совместно поддерживается проектами Yocto Project и OpenEmbedded. Слой, отделяющий проект Yocto Project от проекта OpenEmbedded, называется meta-yocto и содержит конфигурацию дистрибутива Poky, а также базовый набор эталонных BSP-пакетов. Сам по себе проект OpenEmbedded является отдельным Open Source-проектом, обладающим собственными схожими рецептами и задачами, но со своей отдельной командой руководителей и областью применения.
XBMC (Xbox Media Center) — изначально задуманный и разрабатывающийся как открытый мультимедиа плеер для игровой приставки XBox, позже портированный на GNU / Linux. За более чем десятилетний срок разработки приложение не один раз сменило имя, в августе 2014 года было принято решение дать проекту имя Kodi, сохраняя порядок версий и функционал.
Kodi имеет интуитивно понятный пользовательский интерфейс с графическими эффектами и поддерживающий смену темы оформления. Множественные настройки, возможность расширения плагинами и скриптами позволяют гибко настроить приложение для наиболее комфортного использования.
Расширения Kodi имеет открытый API, что позволяет сторонним разработчикам создавать множество расширений: плагины, скрипты, темы оформления, Web-интерфейсы и многое другое. Разработчики Kodi поощряют создание и распространение пользовательских расширений, предоставляя возможность их установки непосредственно из Kodi. Последние релизы построены по новой архитектуре Addons Framework’а, включают в себя Addons Manager GUI, клиент децентрализованного распространения расширений, который использует сторонние сервисы, предоставляющие контент для Kodi. «Addons Manager» («Addons Browser») позволяет пользователям напрямую загружать расширения.
Введение в Yocto Project Установка 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-devtools Состав recipes-extended Состав recipes-kernel Состав recipes-mediacentre Описание хранителя экрана Консольное shell расширение bs-net Состав recipes-multimedia Состав recipes-support Расположение дистрибутива после сборки Пример записи образа дистрибутива с помощью команды dd Запись дистрибутива на карту памяти "microSDHC" в Ubuntu Запись дистрибутива на карту памяти "microSDHC" в Windows Загрузка дистрибутива Berserk
Yocto Project - это совместный Open Source проект для упрощения разработки дистрибутивов для встраиваемых систем. Yocto содержит большое количество шаблонов, метаданных и инструментальных средств сборки, и поддерживает очень большое количество аппаратных платформ.
Poky – это эталонная система сборки в рамках проекта Yocto Project. Название Poky также относится к эталонному дистрибутиву Linux, который создается этой системой сборки и может быть чрезвычайно минималистичным (core-image-minimal).
В данном обзоре мы будем руководствоваться шаблоном core-image-minimal и на его основе создадим рецепт сборки дистрибутива, включающего мультимедиа центр "Kodi" для одноплатного компьютера Raspberry Pi
Для сборки дистрибутива с помощью Yocto Project в Ubuntu вам необходимо установить следующие пакеты:
Пакеты устанавливаются с помощью команды apt-get install и команды повышения привилегий - sudo. В системе Ubuntu это широко распространенная практика, когда для выполнения административных действий используется команда sudo (при создании основного пользователя системы, он автоматически прописывается в группу "sudo").
sudo apt-get install -y --no-install-suggests --no-install-recommends \
gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \
xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
xterm
Более подробную инструкцию по установки вы можете посмотреть здесь:
здесь:
В Yocto Project каждая программная единица описывается с помощью рецепта сборки. Язык описания рецепта напоминает "bash" c возможностью вставок частей кода на языке "python". Основную информацию по синтаксису вы можете почерпнуть из руководства Yocto Project . Набор рецептов сборки в зависимости от назначения можно объединять в отдельные слои сборки.
Слои разделяются на аппаратно зависимые - BSP слои (смотрите ниже, через одну главу),
UI слои (пользовательского интерфейса),
специфические Yocto слои, а также слои реализующие определенную функциональность:
например слои из OpenEmbedded => multimedia, python, perl, ruby, networking, systemd, webserver
и т.д.
sudo apt-get install -y --no-install-suggests --no-install-recommends \ gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential \ chrpath socat cpio python python3 python3-pip python3-pexpect \ xz-utils debianutils iputils-ping python3-git python3-jinja2 \ libegl1-mesa libsdl1.2-dev xterm
mkdir ~/bin curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo
mkdir torvin cd torvin repo init -u https://github.com/berserktv/bs-manifest -m raspberry/krogoth/torvin-0.2.1.xml repo sync
./shell.sh bitbake berserk-image
Время сборки образа дистрибутива достаточно длительное и может занимать от четырех до N часов в зависимости от производительности компьютера, также в процессе сборки из "Интернета" должны быть загружены исходные коды всех программ входящих в дистрибутив, часто это полные git базы (т.е. время сборки также зависит от скорости подключения сети "Интернет") например на машине: Процессор - Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz ОЗУ - 8 Гбайт Жесткий диск - внешний USB-3.0 1Tбайт Время сборки - 4 часа 08 минут Размер образа - 692 Мбайт Размер каталога torvin/build после завершения сборки (cache сборки, исходный код программ, промежуточные файлы сборки, объектные файлы, дополнительные мета данные, файлы пакетов и т.п.) Занимает примерно 41 ГБайт Размер каталога torvin/downloads (git базы приложений и tar.gz архивы) Занимают 20 Гбайт
И еще, если вы используете Yocto Project, то наверняка вам необходимы слои с дополнительной функциональностью т.е. библиотека с большим набор рецептов на все случае жизни. И такая библиотека есть - это рецепты из OpenEmbedded. OpenEmbedded — инфраструктура для сборки пакетов для встраиваемого Linux.
OpenEmbedded полностью совместим с Yocto Project, так как этот проект был взят за основу для Yocto Project. Возможно поэтому Yocto Project отличается немного лучшей стабильностью, лучшей документацией и немного лучшей поддержкой (но в основе своей это все тотже OpenEmbedded)
OpenEmbedded предлагает решение в классе сред для кросс-компиляции. Он позволяет разработчикам создавать целостные дистрибутивы Linux для встраиваемых систем.
Некоторыми преимуществами OpenEmbedded являются:Изначально проект содержал и разрабатывал набор рецептов для BitBake, схожих с правилами ebuild для Gentoo.
Рецепты состоят из URL на исходный код пакета, зависимостей сборки и установки и опций компилирования и установки. Во время процесса сборки они используются для отслеживания зависимостей, кросс-компилирования пакета и его запаковывания, годного для установки на целевое устройство. Также возможно создавать полные образы, состоящие из корневой файловой системы и ядра. На первом шаге при сборке компилируется набор пакетов GNU toolchain, созданных для целевой платформы.
Пакет поддержки платформы (Board Support Package, BSP) - это отдельный, специализированный слой для конкретной платы, который определяет аппаратные особенности платформы т.е. реализует те специфические вещи, которые отличают одну плату от другой: особенности процессора, прерывания, адресация, особенности загрузчика, особенности видео адаптера (GPU) и т.д.
Yocto Project может использовать большое количество слоев от разных поставщиков - разработчиков оборудования, и всем этим необходимо как то управлять. Представьте себе, что у вас есть десяток различных плат, и к каждой плате поставляется отдельный BSP гит репозиторий, и это не считая инфраструктуры самого Yocto проекта, плюс возможная дополнительная функциональность из OpenEmbedded (зачем писать что то с нуля, если хорошенько поискав в OpenEmbedded вы наверняка это найдете).
В такой ситуации отдельным простым скриптом установки уже не отделаешься. Волей, неволей приходиться искать инструменты, которые умеют это делать хорошо. Даже более чем хорошо. Одним из лучших инструментом такого рода является утилита Google - Repo.
Repo - это основной инструмент для управления GIT репозиториями при сборки операционной системы "Андроид" с его огромной кодовой базой. Repo позволяет в одном проекте управлять десятком, если не сотней отдельных гит репозиториев, версии которых вы можете аккуратно указать в одном xml файле Манифеста
и для правильной синхронизации всех версий всех репозиториев вам достаточно выполнить одну команду
repo syncc помощью следующего набора команд вы можете установить Repo в ваш домашний каталог ~/bin (команду curl можно установить отдельно: sudo apt-get install curl)
mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
Примечание:
в ОС Ubuntu каталог HOME/bin должен добавляться с стандартный путь запуска автоматически,
вы можете в этом убедиться проверив файл HOME/.profile
пример наличие строки:
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
и в дальнейшем вам достаточно использовать в консоли команду: repo
Нашу сборку Kodi надо как то обозвать, назовем ее Torvin
Под кодовым названием Torvin будет содержаться минималистический
Linux дистрибутив со сборкой одной единственной программы.
Имеется ввиду одна прикладная пользовательская программа - Kodi,
и ничего лишнего (все остальное системный уровень).
Для мультимедиа центра этого вполне достаточно.
История названия
Показать/Скрыть
Примечание hehehe: Это не тот Torvin, который дуболом, а тот Torvin который дубощит или скорее этот: Перед ним небольшая долина, укрытая от взглядов. На земле кругом сидят сорок-пятьдесят человек. У всех мечи или топоры, но копья воткнуты в землю, щиты лежат. Они сидят в пределах огороженного пространства. По краям воткнуты копья, между ними протянуты нити. А на нитях яркие гроздья рябины, теперь, осенью, они уже красные. В центре огороженного пространства горит костер, вокруг него и сидят люди. Рядом с костром одно копье, острием вверх, наконечник блестит серебром. У костра и копья стоит человек спиной к тайным зрителям, он говорит о чем-то, убеждая, приказывая. В отличие от всех остальных, его одежда не из естественной окраски домотканой материи, она не окрашена в зеленый, синий или коричневый цвет. Одежда ослепительно белая, как белок яйца. На боку у человека молот, с короткой рукоятью, с двусторонней головкой, – кузнецкий молот. ... "Гарри-Гаррисон, роман: Молот и крест"
Для управления слоями дистрибутива используется файл torvin-0.2.1.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<default sync-j="4" revision="krogoth"/>
<remote fetch="https://git.yoctoproject.org/git" name="yocto"/>
<remote fetch="https://github.com/openembedded" name="oe"/>
<remote fetch="https://github.com/berserktv" name="bs"/>
<project remote="bs" revision="master" name="bs-manifest" path="sources/bs-manifest">
<linkfile dest="setup-environment" src="../setup-environment"/>
<linkfile dest="shell.sh" src="../raspberry/shell.sh"/>
<linkfile dest="sources/base" src="../raspberry/krogoth"/>
</project>
<project remote="yocto" revision="krogoth" name="poky" path="sources/poky"/>
<project remote="oe" revision="krogoth" name="meta-openembedded" path="sources/meta-openembedded"/>
<project remote="yocto" revision="krogoth" name="meta-raspberrypi" path="sources/meta-raspberrypi"/>
<project remote="bs" revision="krogoth" name="berserk" path="sources/berserk"/>
</manifest>
Пример работы тега <project remote="bs" revision="master" name="bs-manifest" path="sources/bs-manifest"> </project> данный xml тег описывает выполнение следующей команды: git clone https://github.com/berserktv/bs-manifest -b master sources/bs-manifest
В теле тега project можно указать команды создания символических ссылок на нужную нам инфраструктуру вспомогательных скриптов начальной инициализации и штатного запуска системы сборки Poky
Пример указания тегов linkfile <project remote="bs" revision="master" name="bs-manifest" path="sources/bs-manifest"> <linkfile dest="setup-environment" src="../setup-environment"> <linkfile dest="shell.sh" src="../raspberry/shell.sh"> <linkfile dest="sources/base" src="../raspberry/krogoth"> </project> Создание символической ссылки разворачивается примерно в следующую команду: ln -s src dest т.е. # создание двух ссылок на файлы ln -s sources/bs-manifest/setup-environment setup-environment ln -s sources/bs-manifest/raspberry/shell.sh shell.sh # создание ссылки на каталог, разворачивается # примерно в следующий набор команд cd sources ln -s bs-manifest/raspberry/krogoth base
├── COPYING.MIT ├── raspberry │ ├── krogoth │ │ ├── conf │ │ │ ├── bblayers.conf │ │ │ └── local.conf │ │ └── torvin-0.2.1.xml │ └── shell.sh ├── README.md └── setup-environment
Проект bs-manifest используется для гибкого управления конфигурациями, с учетом сборок разных версий дистрибутива. Начнем сборку с первой версии, у нас это Torvin v0.2.1
Скрипт начальной инициализации setup-environment был взят из одного проекта Freescale Community. Скрипт отвечает за стартовую инициализацию переменных системы сборки Poky, скрипт создает структуру каталогов, в которой очень хорошо разделяется:
#!/bin/sh
# -*- mode: shell-script; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
#
# Copyright (C) 2012, 2013, 2016 O.S. Systems Software LTDA.
# Authored-by: Otavio Salvador <otavio@ossystems.com.br>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Add options for the script
# Copyright (C) 2013 Freescale Semiconductor, Inc.
CWD=`pwd`
PROGNAME="setup-environment"
usage()
{
echo -e "\nUsage: source $PROGNAME <build-dir>
<build-dir>: specifies the build directory location (required)
If undefined, this script will set \$MACHINE to 'imx6qsabresd'.
"
ls sources/poky/*/conf/machine/*.conf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "
Supported machines: `echo; ls sources/poky/*/conf/machine/*.conf \
| sed s/\.conf//g | sed -r 's/^.+\///' | xargs -I% echo -e "\t%"`
To build for a machine listed above, run this script as:
MACHINE=<machine> source $PROGNAME <build-dir>
"
fi
}
clean_up()
{
unset EULA LIST_MACHINES VALID_MACHINE
unset CWD TEMPLATES SHORTOPTS LONGOPTS ARGS PROGNAME
unset generated_config updated
unset MACHINE SDKMACHINE DISTRO OEROOT
}
# get command line options
SHORTOPTS="h"
LONGOPTS="help"
ARGS=$(getopt --options $SHORTOPTS \
--longoptions $LONGOPTS --name $PROGNAME -- "$@" )
# Print the usage menu if invalid options are specified
if [ $? != 0 -o $# -lt 1 ]; then
usage && clean_up
return 1
fi
eval set -- "$ARGS"
while true;
do
case $1 in
-h|--help)
usage
clean_up
return 0
;;
--)
shift
break
;;
esac
done
if [ "$(whoami)" = "root" ]; then
echo "ERROR: do not use the BSP as root. Exiting..."
fi
if [ -z "$MACHINE" ]; then
usage && clean_up
return 1
fi
# Check the machine type specified
LIST_MACHINES=`ls -1 $CWD/sources/poky/*/conf/machine $CWD/sources/*/conf/machine`
VALID_MACHINE=`echo -e "$LIST_MACHINES" | grep ${MACHINE}.conf$ | wc -l`
if [ "x$MACHINE" = "x" ] || [ "$VALID_MACHINE" = "0" ]; then
echo -e "\nThe \$MACHINE you have specified ($MACHINE) is not supported by this build setup"
usage && clean_up
return 1
else
if [ ! -e $1/conf/local.conf.sample ]; then
echo "Configuring for ${MACHINE}"
fi
fi
if [ -z "$SDKMACHINE" ]; then
SDKMACHINE='i686'
fi
if [ -z "$DISTRO" ]; then
DISTRO='poky'
fi
OEROOT=$PWD/sources/poky
if [ -e $PWD/sources/oe-core ]; then
OEROOT=$PWD/sources/oe-core
fi
# Ensure all files in sources/base are kept in sync with project root
updated=
#for f in $CWD/sources/base/*; do
# file="$(basename $f)"
# if [ "$file" = "conf" ] || echo $file | grep -q '~$'; then
# continue
# fi
#
# if ! cmp -s "$file" "$f"; then
# updated="true"
# [ -e $file ] && chmod u+w $file
# cp $f $file
# fi
#done
if [ "$updated" = "true" ]; then
echo "The project root content has been updated. Please run '$PROGNAME' again."
return
fi
. $OEROOT/oe-init-build-env $CWD/$1 > /dev/null
# if conf/local.conf not generated, no need to go further
if [ ! -e conf/local.conf ]; then
clean_up && return 1
fi
# Clean up PATH, because if it includes tokens to current directories somehow,
# wrong binaries can be used instead of the expected ones during task execution
export PATH="`echo $PATH | sed 's/\(:.\|:\)*:/:/g;s/^.\?://;s/:.\?$//'`"
generated_config=
if [ ! -e conf/local.conf.sample ]; then
mv conf/local.conf conf/local.conf.sample
# Generate the local.conf based on the Yocto defaults
TEMPLATES=$CWD/sources/base/conf
grep -v '^#\|^$' conf/local.conf.sample > conf/local.conf
cat >> conf/local.conf <<EOF
DL_DIR ?= "\${BSPDIR}/downloads/"
EOF
# Change settings according environment
sed -e "s,MACHINE ??=.*,MACHINE ??= '$MACHINE',g" \
-e "s,SDKMACHINE ??=.*,SDKMACHINE ??= '$SDKMACHINE',g" \
-e "s,DISTRO ?=.*,DISTRO ?= '$DISTRO',g" \
-i conf/local.conf
cp $TEMPLATES/* conf/
for s in $HOME/.oe $HOME/.yocto; do
if [ -e $s/site.conf ]; then
echo "Linking $s/site.conf to conf/site.conf"
ln -s $s/site.conf conf
fi
done
generated_config=1
fi
cat <<EOF
Welcome to Freescale Community BSP
The Yocto Project has extensive documentation about OE including a
reference manual which can be found at:
http://yoctoproject.org/documentation
For more information about OpenEmbedded see their website:
http://www.openembedded.org/
You can now run 'bitbake <target>'
Common targets are:
core-image-minimal
meta-toolchain
meta-toolchain-sdk
adt-installer
meta-ide-support
EOF
if [ -n "$generated_config" ]; then
cat <<EOF
Your build environment has been configured with:
MACHINE=$MACHINE
SDKMACHINE=$SDKMACHINE
DISTRO=$DISTRO
EOF
else
echo "Your configuration files at $1 have not been touched."
fi
clean_up
#!/bin/bash
MACHINE='raspberrypi3' source ./setup-environment build
echo "you may try 'bitbake core-image-minimal'"
bash
Для инициализации repo необходимо выполнить команду:
mkdir torvin
cd torvin
repo init -u https://github.com/berserktv/bs-manifest -m raspberry/krogoth/torvin-0.2.1.xml
где -u https://github.com/berserktv/bs-manifest указывает GIT путь к проекту манифеста
примечание: можно еще указать -b имя_ветки , если ключ -b не указывать, то подразумевается ветка master (по умолчанию)где путь -m raspberry/krogoth/torvin-0.2.1.xml к конфигурационному файлу указывает следующее:
для начальной загрузки или последующей синхронизации достаточно выполнить команду:
которая заберет все последнии версии GIT проектов указанных в файле манифеста (обычно указываются ветки), если же у вас указан hash коммита в атрибуте revision, то версия для данного git репозитория не измениться.repo sync
После того, как будет выполнена команда repo sync, можно приступать к созданию основной конфигурации Yocto Project:
./shell.sh
после завершения скрипта, будет создан каталог build/conf:
c двумя основными файлами:MACHINE ??= 'raspberrypi3' DISTRO ?= 'poky' PACKAGE_CLASSES ?= "package_deb" EXTRA_IMAGE_FEATURES ?= "debug-tweaks" USER_CLASSES ?= "buildstats image-mklibs image-prelink" PATCHRESOLVE = "noop" BB_DISKMON_DIRS = "\ STOPTASKS,${TMPDIR},1G,100K \ STOPTASKS,${DL_DIR},1G,100K \ STOPTASKS,${SSTATE_DIR},1G,100K \ STOPTASKS,/tmp,100M,100K \ ABORT,${TMPDIR},100M,1K \ ABORT,${DL_DIR},100M,1K \ ABORT,${SSTATE_DIR},100M,1K \ ABORT,/tmp,10M,1K" PACKAGECONFIG_append_pn-qemu-native = " sdl" PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl" CONF_VERSION = "1" DL_DIR ?= "${BSPDIR}/downloads/" # size memory GPU for Raspberry Pi GPU_MEM = "128" GPU_MEM_256 = "112" GPU_MEM_512 = "160" GPU_MEM_1024 = "320" # for libs: "mpeg2dec libmad ffmpeg x264" LICENSE_FLAGS_WHITELIST += "commercial"
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf # changes incompatibly LCONF_VERSION = "6" POKY_BBLAYERS_CONF_VERSION = "2" BBPATH = "${TOPDIR}" BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}" BBFILES ?= "" BBLAYERS ?= " \ ${BSPDIR}/sources/poky/meta \ ${BSPDIR}/sources/poky/meta-poky \ ${BSPDIR}/sources/poky/meta-yocto \ ${BSPDIR}/sources/poky/meta-yocto-bsp \ ${BSPDIR}/sources/meta-openembedded/meta-oe \ ${BSPDIR}/sources/meta-openembedded/meta-python \ ${BSPDIR}/sources/meta-openembedded/meta-networking \ ${BSPDIR}/sources/meta-openembedded/meta-multimedia \ ${BSPDIR}/sources/meta-raspberrypi \ ${BSPDIR}/sources/berserk/meta-berserk \ "
основные переменные файла local.conf - на которые нужно обратить внимание:
Для сборки Мультимедиа центра, помимо штатных слоев Yocto см. файл bblayers.conf
${BSPDIR}/sources/poky/meta \ ${BSPDIR}/sources/poky/meta-poky \ ${BSPDIR}/sources/poky/meta-yocto \ ${BSPDIR}/sources/poky/meta-yocto-bsp \мы подключили четыре слоя с дополнительной функциональностью из OpenEmbedded.
${BSPDIR}/sources/meta-openembedded/meta-oe \ ${BSPDIR}/sources/meta-openembedded/meta-python \ ${BSPDIR}/sources/meta-openembedded/meta-networking \ ${BSPDIR}/sources/meta-openembedded/meta-multimedia \далее подключен основной BSP слой для платформы Raspberry Pi
${BSPDIR}/sources/meta-raspberrypi \ну и в самом конце подключен наш слой отвечающий за сборку образа дистрибутива с функциональностью <<Мультимедиа центра>> для платы Raspberry Pi (см. следующую главу)
${BSPDIR}/sources/berserk/meta-berserk \
Для того, чтобы создать образ дистрибутива для платы Raspberry Pi
мы создали отдельный под проект, который назвали Berserk.
История названия
Показать/Скрыть
“
Кутреда никогда не приходилось подбадривать, только сдерживать. До сих пор.
Теперь же он был молчалив, печален, дух скрытой угрозы, который всегда исходил от него, исчез.”
проект находиться по адресу: https://github/berserktv/berserk
исходный код проекта можно загрузить с помощью команды:
git clone https://github.com/berserktv/berserk -b krogoth
├── COPYING.MIT ├── meta-berserk │ ├── conf │ ├── recipes-berserk │ ├── recipes-core │ ├── recipes-devtools │ ├── recipes-extended │ ├── recipes-kernel │ ├── recipes-mediacentre │ ├── recipes-multimedia │ └── recipes-support └── README.mdИтак вся функциональность для сборки мультимедиа центра у нас находиться в слое meta-berserk
Состав слоя:
включает файл layer.conf
# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"
# We have a packages directory, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
${LAYERDIR}/recipes-*/*/*.bbappend"
# BerSerk
BBFILE_COLLECTIONS += "bs"
BBFILE_PATTERN_bs := "^${LAYERDIR}/"
BBFILE_PRIORITY_bs = "5"
DISTRO_FEATURES_append += " wifi x11 openglesv2"
PREFERRED_VERSION_ffmpeg = "2.6"
SYSVINIT_ENABLED_GETTYS = "1"
PREFERRED_VERSION_libcec = "3.1.%"
PREFERRED_VERSION_linux-raspberrypi ?= "4.1.21%"
PREFERRED_VERSION_ffmpeg = "2.6" PREFERRED_VERSION_libcec = "3.1.%" PREFERRED_VERSION_linux-raspberrypi ?= "4.1.21%" SYSVINIT_ENABLED_GETTYS = "1" DISTRO_FEATURES_append += " wifi x11 openglesv2"
├── bs-net │ └── bs-net_0.1.1.bb ├── first-run │ ├── files │ │ └── first-run.sh │ └── first-run.bb ├── images │ └── berserk-image.bb └── tv ├── files │ └── berserk.m3u8 ├── tv-config.bb └── tv-dir.incгде:
# Simple network "shell" extension for wlan/ethernet
# Project "Berserk", autor Alexander Demachev, site https://berserk.tv
# license - The MIT License (MIT)
DESCRIPTION = "Simple network shell extension for wlan/ethernet"
SECTION = "nets"
PR = "r1"
LICENSE = "MIT"
MD5_SUM = "md5=4d92cd373abda3937c2bc47fbc49d690"
MIT_SUM = "md5=3da9cfbcb788c80a0384361b4de20420"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;${MD5_SUM} \
file://${COREBASE}/meta/COPYING.MIT;${MIT_SUM}"
SRC_URI = "git://github.com/berserktv/bs-net.git;branch=master"
SRCREV = "f1598f827416071f2651034cf2b1a22b1befc378"
require recipes-mediacentre/kodi/kodi-dir.inc
NET_DIR = "/etc/network"
UDEV_DIR = "/etc/udev/rules.d"
ETH_CONFIGS = "${KODI_USERDATA}/eths"
WLAN_CONFIGS = "${KODI_USERDATA}/wlans"
S = "${WORKDIR}/git"
PACKAGES = "${PN}"
FILES_${PN} = "${NET_DIR} ${UDEV_DIR} ${KODI_HOME_DIR}"
RDEPENDS_${PN} += "ntp wpa-supplicant iw gawk"
do_install_append() {
install -d ${D}${UDEV_DIR}
install -d ${D}${sysconfdir}/network
install -d ${D}${ETH_CONFIGS}
install -d ${D}${WLAN_CONFIGS}
install -m 0755 ${S}${NET_DIR}/dh-func.sh ${D}${sysconfdir}/network
install -m 0755 ${S}${NET_DIR}/eth-manual ${D}${sysconfdir}/network
install -m 0755 ${S}${NET_DIR}/tools-wifi.sh ${D}${sysconfdir}/network
install -m 0755 ${S}${NET_DIR}/wlan ${D}${sysconfdir}/network
install -m 0755 ${S}${NET_DIR}/wlan-runner ${D}${sysconfdir}/network
install -m 0644 ${S}${NET_DIR}/eth0 ${D}${ETH_CONFIGS}
install -m 0644 ${S}${UDEV_DIR}/80-wifi-start.rules ${D}${UDEV_DIR}
install -m 0644 ${S}${UDEV_DIR}/85-automount.rules ${D}${UDEV_DIR}
}
DESCRIPTION = "First run script"
SECTION = "configs"
PR = "r1"
LICENSE = "MIT"
MD5_SUM = "md5=4d92cd373abda3937c2bc47fbc49d690"
MIT_SUM = "md5=3da9cfbcb788c80a0384361b4de20420"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;${MD5_SUM} \
file://${COREBASE}/meta/COPYING.MIT;${MIT_SUM}"
# секция установки скрипта первого запуска
SRC_URI = "file://first-run.sh"
inherit update-rc.d
S = "${WORKDIR}"
INITSCRIPT_NAME = "first-run.sh"
# вызов скрипта определяющего первое включение компьютера на уровень исполнения S
# вызывается после S03mountall.sh S04udev S05modutils.sh
# S06alignment.sh S06checkroot.sh S07bootlogd
INITSCRIPT_PARAMS = "start 07 S ."
PACKAGES = "${PN}"
FILES_${PN} = "first.bs.run /etc/init.d"
do_install_append() {
install -d ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/first-run.sh ${D}${sysconfdir}/init.d
# FIRST_RUN="/first.bs.run"
touch ${D}/first.bs.run
}
#!/bin/sh
# скрипт предназначен для создания нового раздела диска microSDHC
# диск создается при первом включении в неразмеченной области,
# autor Alexander Demachev, project: berserk (site: https://berserk.tv)
#
# исходная разметка диска /dev/sdX при создании образа:
# где sdX - обобщенное название карты памяти microSDHC, точное название см. /etc/fstab
# первый раздел /dev/sdX1 => fat16 будет содержать ядро, загрузчик и драйверы
# для поддержки Raspberry Pi (dtb образы)
# второй раздел /dev/sdX2 => ext3 будет содержать корневую файловую систему, rootfs
#
# оставшиеся место не занято,
# и здесь будет создан третий раздел /dev/sdX3 для хранения мультимедиа информации
# после создания, раздел будет монтироваться в каталог /media/data
#
# последовательность действий:
# в каталоге /etc/rcS.d необходимо создать символическую ссылку S07first-run.sh
# ссылка на файл ../init.d/first-run.sh
#
FIRST_RUN="/first.bs.run"
DISK_DEV=/dev/mmcblk0
DISK_ROOTFS=/dev/mmcblk0p2
DISK_MEDIA=/dev/mmcblk0p3
MOUNT_MEDIA=/media/data
#######################################################################
# section func
check_need_create() {
local disk="$1"
# в случае отсутствия раздела, его необходимо создать
if [ -b "$disk" ]; then return 1
else return 0; fi
}
create_partition_fat32() {
local dev_disk="$1"
local dev2="$2"
local dev3="$3"
local name="DATA"
local END2_MBYTE=`parted -s -m $dev_disk unit MB print \
| grep "^2:" | cut -d":" -f3 \
| tr "MB" " " | sed "s/\.[0-9]*//" `
local START_MBYTE="$END2_MBYTE"
#local START_MBYTE=`expr $END2_MBYTE + 1`
local com_args="-s -a optimal $dev_disk mkpart primary \
fat32 $START_MBYTE 100% print quit"
parted $com_args
local code=$?
sync
if [ $? -eq 0 ]; then echo "SUCCESS => parted $com_args"
else echo "FAIL => parted $com_args"; return 1; fi
com_args="-F 32 -n $name $dev3"
mkfs.vfat $com_args
code=$?
sync
if [ $code -eq 0 ]; then echo "SUCCESS => mkfs.vfat $com_args"
else echo "FAIL => mkfs.vfat $com_args"; fi
return $code
}
# отключил изменение размера rootfs (ext3),
# так как операция resize2fs /dev/раздел занимает 6-7минут (размер раздела 3GB)
# как нибудь посмотрю время изменения раздела ext4 через ioctl EXT4_IOC_RESIZE_FS
#if [ -d "/mnt/.psplash" ]; then
#echo "MSG Resizing the disk space on the first running ..." > $fifo;
#fi
#resize_root_partition $DISK_DEV
resize_root_partition() {
local dev_disk="$1"
local full_size_byte=`fdisk -l $dev_disk | grep "${dev_disk}:" | cut -d" " -f5`
if [ -z "$full_size_byte" ]; then return 1; fi
local END2_BYTE=`parted -s -m $dev_disk unit B print | grep "^2:" \
| cut -d":" -f3 | tr -d "B" | sed "s/\.[0-9]*//"`
local size_part=$(($full_size_byte-$END2_BYTE))
if [ $? -ne 0 ] || [ -z "$size_part" ]; then return 2; fi
local ten_persent=$(($size_part/10))
if [ $? -ne 0 ] || [ -z "$ten_persent" ]; then return 3; fi
local NEW_END2_BYTE=$(($END2_BYTE+$ten_persent))
local com_args="-s -a optimal $dev_disk unit B resizepart 2 $NEW_END2_BYTE"
parted $com_args
local code=$?
sync
if [ $code -eq 0 ]; then echo "SUCCESS => parted $com_args"; return 0;
else echo "FAIL => parted $com_args"; return 4; fi
}
mount_create_partition_fat32() {
local dev="$1"
local media="$2"
local code=1
if mount | grep -q "$media"; then
echo "$dev already mount on $media, exit"; return 0;
fi
if [ ! -d "$media" ]; then mkdir $media; fi
sync
com_args="-n -t vfat -o rw $dev $media"
mount $com_args
if mount | grep -q "$media"; then code=0;
else mount $com_args; code=$?; fi
if [ $code -eq 0 ]; then echo "SUCCESS => mount $com_args"
else echo "FAIL => mount $com_args"; fi
return $code
}
add_disk_in_fstab() {
local disk="$1"
local point="$2"
# example
#/dev/mmcblk0p /media/card auto defaults,sync,noauto 0 0
echo "$disk $point auto defaults 1 1" >> /etc/fstab
sync
}
#######################################################################
# section start
# в корне раздела находиться файл по которому определяется первое включение устройcтва
fifo="/mnt/.psplash/psplash_fifo"
if [ ! -f "$FIRST_RUN" ]; then
if [ -d "/mnt/.psplash" ]; then
echo "MSG ver 0.2.1 TORVIN \"Along Came a Hammersmith\"" > $fifo
fi
exit 0
fi
# файл используется для вывода окна настройки сети во время первого запуска Kodi
touch "/tmp/$FIRST_RUN"
if check_need_create $DISK_MEDIA; then
if create_partition_fat32 $DISK_DEV $DISK_ROOTFS $DISK_MEDIA; then
if [ -d "/mnt/.psplash" ]; then
echo "MSG Creating a new partition on the first running ..." > $fifo;
fi
if mount_create_partition_fat32 $DISK_MEDIA $MOUNT_MEDIA; then
add_disk_in_fstab $DISK_MEDIA $MOUNT_MEDIA;
else echo "ERROR_2, not mount_create_partition_fat32 $DISK_MEDIA $MOUNT_MEDIA"; fi
else
echo "ERROR_1, not create_partition_fat32 $DISK_DEV $DISK_ROOTFS $DISK_MEDIA"
fi
fi
rm -f "$FIRST_RUN"
exit 0
# Project: "Berserk" - build Kodi for the Raspberry Pi platform
# autor: Alexander Demachev, site: https://berserk.tv
# license - The MIT License (MIT)
DESCRIPTION = "Berserk - the image for the Raspberry PI"
LICENSE = "MIT"
MD5_SUM = "md5=4d92cd373abda3937c2bc47fbc49d690"
MIT_SUM = "md5=3da9cfbcb788c80a0384361b4de20420"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;${MD5_SUM} \
file://${COREBASE}/meta/COPYING.MIT;${MIT_SUM}"
IMAGE_FEATURES += "ssh-server-dropbear splash"
# немного увеличиваю размер rootfs в кило байтах (100000kB=~100Mb)
IMAGE_ROOTFS_EXTRA_SPACE_append += "+ 100000"
# BS - BerSerk, version 0.2.1 - "Torvin"
# Base this image on core-image-minimal
include recipes-core/images/core-image-minimal.bb
# Set default password for 'root' user
inherit extrausers
ROOTUSERNAME = "root"
ROOTPASSWORD = "berserk"
EXTRA_USERS_PARAMS = "usermod -P ${ROOTPASSWORD} ${ROOTUSERNAME};"
# стартовая заставка, которая выводиться во время загрузки
SPLASH = "psplash-berserk"
BS_DEBUG_TOOLS = "ldd strace ltrace"
BS_GLIBC = "glibc-thread-db \
glibc-gconv-utf-16 \
glibc-gconv-utf-32 \
glibc-gconv-koi8-r \
glibc-gconv-cp1251 \
glibc-gconv-ibm866 \
glibc-binary-localedata-en-us \
glibc-binary-localedata-ru-ru \
glibc-binary-localedata-ru-ru.koi8-r \
glibc-charmap-cp1251 \
glibc-charmap-koi8-r \
glibc-charmap-utf-8 \
"
BS_BASE = "kernel-modules \
lsb \
pciutils \
parted \
tzdata \
dosfstools \
ntp \
ntpdate \
e2fsprogs-resize2fs \
"
BS_WLAN = "kernel-module-rt2800usb \
kernel-module-rt2800lib \
kernel-module-rt2x00lib \
kernel-module-rt2x00usb \
kernel-module-cfg80211 \
kernel-module-nls-utf8 \
kernel-module-ath9k-common \
kernel-module-ath9k-hw \
kernel-module-ath9k-htc \
kernel-module-ctr \
kernel-module-ccm \
kernel-module-arc4 \
"
BS_WIFI_SUPPORT = " \
iw \
dhcp-client \
wireless-tools \
wpa-supplicant \
linux-firmware \
"
BS_SOFT = "mc \
kodi \
kodi-runner \
kodi-settings \
kodi-language-ru \
kodi-pvr-iptvsimple \
bs-net \
tv-config \
first-run \
script-berserk-network \
screensaver-kodi-universe \
"
# Include modules in rootfs
IMAGE_INSTALL += " \
${BS_BASE} \
${BS_WLAN} \
${BS_WIFI_SUPPORT} \
${BS_GLIBC} \
${BS_SOFT} \
${BS_DEBUG_TOOLS} \
"
ROOTFS_POSTPROCESS_COMMAND += "fix_ntpdate; "
# FIXME: быстрая заплатка (перенести в версию bs-net)
fix_ntpdate() {
sed -i "s|/usr/bin/ntpdate|/usr/sbin/ntpdate|g" \
${IMAGE_ROOTFS}/etc/network/dh-func.sh
}
DESCRIPTION = "TV config for Berserk Image"
SECTION = "configs"
PR = "r1"
LICENSE = "MIT"
MD5_SUM = "md5=4d92cd373abda3937c2bc47fbc49d690"
MIT_SUM = "md5=3da9cfbcb788c80a0384361b4de20420"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;${MD5_SUM} \
file://${COREBASE}/meta/COPYING.MIT;${MIT_SUM}"
require tv-dir.inc
S = "${WORKDIR}"
SRC_URI += " \
file://${TV_CONFIG} \
"
PACKAGES = "${PN}"
FILES_${PN} += "${TV_CONFIG_DIR} \
"
do_install() {
install -d "${D}${TV_CONFIG_DIR}"
install -m 0644 "${S}/${TV_CONFIG}" "${D}${TV_CONFIG_DIR}/${TV_CONFIG}"
}
#EXTM3U
#EXTINF:0 group-title="Новости",ABC News English
http://abclive.abcnews.com/i/abc_live4@136330/master.m3u8?b=500,300,700,900,1200
#EXTINF:0 audio-track="ru" group-title="Новости",EuroNews Russian
rtsp://ewns-hls-b-stream.hexaglobe.net/rtpeuronewslive/ru_vidan750_rtp.sdp
#EXTINF:0 group-title="NASA ISS HD Earth Viewing",NASA ISS HD Earth Viewing
http://iphone-streaming.ustream.tv/uhls/17074538/streams/live/iphone/playlist.m3u8
#EXTINF:0 group-title="Новости",France 24 English
http://static.france24.com/live/F24_EN_LO_HLS/live_ios.m3u8
#EXTINF:0 group-title="Новости",Deutsche Welle German
http://www.metafilegenerator.de/DWelle/tv/ios/master.m3u8
#EXTINF:0 group-title="Новости",Tagesschau24
http://tagesschau-lh.akamaihd.net/i/tagesschau_1@119231/master.m3u8
#EXTINF:0 group-title="Новости",France 24 French
http://static.france24.com/live/F24_FR_LO_HLS/live_ios.m3u8
#EXTINF:0 group-title="Новости",EuroNews Arabic
rtsp://ewns-hls-b-stream.hexaglobe.net/rtpeuronewslive/ar_vidan750_rtp.sdp
#EXTINF:0 group-title="Новости",EuroNews English
rtsp://ewns-hls-b-stream.hexaglobe.net/rtpeuronewslive/en_vidan750_rtp.sdp
#EXTINF:0 group-title="Новости",EuroNews French
rtsp://ewns-hls-b-stream.hexaglobe.net/rtpeuronewslive/fr_vidan750_rtp.sdp
#EXTINF:0 group-title="Новости",EuroNews German
rtsp://ewns-hls-b-stream.hexaglobe.net/rtpeuronewslive/de_vidan750_rtp.sdp
#EXTINF:0 group-title="Новости",EuroNews Italian
rtsp://ewns-hls-b-stream.hexaglobe.net/rtpeuronewslive/it_vidan750_rtp.sdp
#EXTINF:0 group-title="Новости",EuroNews Portuguese
rtsp://ewns-hls-b-stream.hexaglobe.net/rtpeuronewslive/pt_vidan750_rtp.sdp
#EXTINF:0 group-title="Новости",EuroNews Spanish
rtsp://ewns-hls-b-stream.hexaglobe.net/rtpeuronewslive/es_vidan750_rtp.sdp
#EXTINF:0 group-title="Новости",EuroNews Turkish
rtsp://ewns-hls-b-stream.hexaglobe.net/rtpeuronewslive/tr_vidan750_rtp.sdp
#EXTINF:0 group-title="Новости",Deutsche Welle North America
http://www.metafilegenerator.de/DWelle/tv-northamerica/ios/master.m3u8
#EXTINF:0 group-title="Новости",Deutsche Welle Arabia
http://www.metafilegenerator.de/DWelle/tv-arabia/ios/master.m3u8
#EXTINF:0 group-title="Новости",Deutsche Welle Asia
http://www.metafilegenerator.de/DWelle/tv-asia/ios/master.m3u8
#EXTINF:0 group-title="Новости",Deutsche Welle Latinoamerica
http://www.metafilegenerator.de/DWelle/tv-latinoamerica/ios/master.m3u8
└── psplash ├── files │ └── psplash-berserk-img.h └── psplash_git.bbappendгде:
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://psplash-berserk-img.h"
SPLASH_IMAGES = "file://psplash-berserk-img.h;outsuffix=berserk"
Для того, чтобы поменять изображение штатной стартовой заставки psplash на произвольную картинку необходимо выполнить следующее:
и далее в рецепте образа "berserk-image.bb" необходимо добавить
в качестве особенностей дистрибутива - стартовую заставку splash
IMAGE_FEATURES += "splash"
и переменную с указанием конкретного названия пакета стартовой заставки
SPLASH = "psplash-berserk"
└── cmake └── cmake-native_3.4.3.bbappendгде:
# при сборке проекта использующего функцию cmake ExternalProject_add
# получил сообщение об ошибке:
# unsupported protocol" log: libcurl was built with SSL disabled, https
CMAKE_EXTRACONF +=" \
-DCMAKE_USE_OPENSSL=ON \
"
Рецепты инструментальных средств разработки содержат один файл с расширением рецепта cmake, для native сборки пакета, т.е. для версии которая собирается под архитектурой host машины сборки и участвует в дальнейшем в качестве инструмента сборки других пакетов
Наличие этого файла устраняет ошибку сборки
unsupported protocol" log: libcurl was built with SSL disabled, https
которая проявилась во время сборки kodi plugin(a) c помощью cmake и одним
из правил cmake было правило загрузки исходного кода plugin(а)
по протолу https посредством вызова libcurl
├── libcec │ ├── files │ │ └── python-install-location.patch │ └── libcec_git.bb └── p8platform └── p8platform_git.bbгде:
SUMMARY = "USB CEC Adaptor communication Library"
HOMEPAGE = "http://libcec.pulse-eight.com/"
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://COPYING;md5=e61fd86f9c947b430126181da2c6c715"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INHIBIT_PACKAGE_STRIP = "1"
DEPENDS = "p8platform udev lockdev ncurses swig-native python3"
DEPENDS += "\
${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libx11 libxrandr', '', d)}"
DEPENDS_append_rpi = "\
${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', '', ' userland', d)}"
PV = "3.1.0+gitr${SRCPV}"
SRCREV = "bb09230246469b36c3a87b911aec32df31538d43"
SRC_URI = "git://github.com/Pulse-Eight/libcec.git \
file://python-install-location.patch"
S = "${WORKDIR}/git"
inherit cmake pkgconfig
# Create the wrapper for python3
PACKAGES += "python3-${BPN}"
FILES_python3-${BPN} = "${libdir}/python3*"
# cec-client and xbmc need the .so present to work :(
FILES_${PN} += "${libdir}/*.so"
INSANE_SKIP_${PN} = "dev-so"
# Adapter shows up as a CDC-ACM device
RRECOMMENDS_${PN} = "kernel-module-cdc-acm"
SUMMARY = "Platform support library used by libCEC and binary add-ons for Kodi"
HOMEPAGE = "http://libcec.pulse-eight.com/"
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://src/os.h;md5=752555fa94e82005d45fd201fee5bd33"
PV = "2.1.0"
SRC_URI = "git://github.com/Pulse-Eight/platform.git"
SRCREV = "d7bceb64541cb046421cbcd4c98d91e9bf24822f"
S = "${WORKDIR}/git"
inherit cmake pkgconfig
EXTRA_OECMAKE += "-DCMAKE_INSTALL_LIBDIR=${libdir} -DCMAKE_INSTALL_LIBDIR_NOARCH=${libdir}"
FILES_${PN}-dev += "${libdir}/p8-platform"
Протокол управления электронными устройствами CEC предназначен для того, чтобы вы с помощью вашего обычного пульта от "Телевизора" могли управлять мультимедиа центром Kodi. Протокол должен поддерживаться вашим телевизором, т.е. телевизор получив сигнал от пульта, должен его ретранслировать по управляющим линиям HDMI кабеля и мультимедиа центр Kodi с помощью библиотеки libcec интерпретирует этот сигнал, определяет его наличие и выполняет соответствующие действия, например перемещение позиции выделенного списка на экране при нажатие кнопки ВНИЗ на пульте.
Обычно управляющими кнопками являются кнопки джойстика т.е. кнопка ВВЕРХ, ВНИЗ, ВПРАВО, ВЛЕВО, центральная кнопка OK (кнопка выбора), и кнопка НАЗАД или ВОВЗРАТ (часто помечается как полукруглая стрелка, указывающая направление cправо налево)
В ветке Krogoth в слое OpenEmbedded уже присутствует рецепт сборки libcec.bb версии 2.1.4,
sources/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_git.bb
но с нашей версией Kodi 15.2 он не совместим, поэтому был взят рецепт libcec
версии 3.1.0 и его зависимость, библиотека p8platform
└── linux ├── files │ ├── db.txt.patch │ └── rbpi.cfg └── linux-raspberrypi_4.1.bbappendгде:
# use statically compiled regulatory rules database
CONFIG_CFG80211_INTERNAL_REGDB=y
# поддержка Wifi сетевого Asus USB-N53 chipset Ralink RT3572
CONFIG_RT2800USB=m
# поддержка wifi адаптера на чипсете Atheros D-Link DWA-126 802.11n (AR9271),
# NetGear WNDA3200, NetGear WNA1100, TP-Link TL-WN722N (AR9271),
# TL-WN322G v3, TL-WN422G и т.д. см. cateee.net
CONFIG_ATH9K_HW=m
CONFIG_ATH9K_HTC=m
# настройка Wifi драйверов для работы wpa_supplicant
CONFIG_WIRELESS=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_CRYPTO_AES=y
# поддержка семейства протоколов IPSec, без этих модулей Wifi авторизация
# при подключении wpa_supplicant не работает
CONFIG_CRYPTO_CCM=m
CONFIG_CRYPTO_CTR=m
CONFIG_CRYPTO_ARC4=m
#########################
# оценка производительности
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_EVENTS=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LATENCYTOP=y
# This option adds support for ASIX AX88xxx
# based USB 2.0 10/100 Ethernet adapters.
CONFIG_USB_NET_AX8817X=m
# дополнительный параметры конфигурации описываются в rpbi.cfg
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://db.txt.patch;patch=1 \
file://rbpi.cfg \
"
# в BSP слое meta-raspberrypi не работают фрагменты конфигураций
# https://github.com/agherzan/meta-raspberrypi/issues/14
# поэтому делаю напрямую
# в методе do_kernel_configme конфигурация ядра
# копируется из базы архитектур arch/ в рабочий каталог
do_kernel_configme_append() {
cat ${WORKDIR}/rbpi.cfg >> ${WORKDIR}/defconfig
}
# CMDLINE for raspberrypi
# default CMDLINE = "dwc_otg.lpm_enable=0 console=serial0,115200
# root=/dev/mmcblk0p2 rootfstype=ext4 rootwait"
CMDLINE = "quiet dwc_otg.lpm_enable=0 console=serial0,115200 \
root=/dev/mmcblk0p2 rootfstype=ext4 rootwait"
Wi-Fi устройства работают на определенных частотах и для них существует такое понятие как управляющий домен (regulatory domain) – именно в этом параметре указана страна, в котором, как предполагается, работает данное устройство.
В ядре Linux имеется сопутствующая база данных, в которой для каждой страны прописаны разрешённые частоты и разрешённая для них мощность.
В самом простом случае эту базу можно включить непосредственно в ядро
статически, указав параметр:
CONFIG_CFG80211_INTERNAL_REGDB=y
что собственно мы и сделали, подключив патч c этой базой db.txt.patch
И еще:
в Yocto существует такое понятие как фрагменты конфигураций ядра.
Обычно фрагмент конфигурации, файл с расширением cfg, содержит только те параметры ядра,
которые вам явно необходимы для определенных целей. И этот фрагмент
конфигурации добавляется к параметрам по умолчанию, которые уже
присутствуют в рецепте при сборке ядра.
do_kernel_configme_append() { cat ${WORKDIR}/rbpi.cfg >> ${WORKDIR}/defconfig }
В дополнении рецепта bbappend, также можно изменить параметры, которые передаются ядру во время запуска: т.е. переопределить переменную CMDLINE см. файл linux-raspberrypi_4.1.bbappend
├── kodi │ ├── jsonschemabuilder-native.bb │ ├── kodi │ │ ├── kodi-isengard-rpb-backports.patch │ │ ├── network-menu.patch │ │ ├── run │ │ │ ├── kodi.init │ │ │ └── restarter.sh │ │ └── settings │ │ ├── advancedsettings.xml │ │ ├── guisettings.xml │ │ └── settings-pvr-iptvsimple.xml │ ├── kodi-dir.inc │ ├── kodi_git.bb │ ├── kodi-runner.bb │ ├── kodi-settings.bb │ └── kodi-version.inc └── kodi-plugins ├── files │ └── resource.language.ru_ru.tar.gz ├── kodi-language-ru_1.0.5.bb ├── kodi-pvr-iptvsimple.bb ├── screensaver-kodi-universe_0.1.1.bb └── script-berserk-network_0.2.3.bbгде:
SUMMARY = "Native depends JsonSchemaBuilder for Kodi multimedia center"
LICENSE = "GPL-2.0"
MD5_SUM = "md5=801f80980d171dd6425610833a22dbe6"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses\
/GPL-2.0;${MD5_SUM}"
require kodi-version.inc
inherit autotools gettext native
S = "${WORKDIR}/git"
JSON_SCHEMA_DIR = "${S}/tools/depends/native/JsonSchemaBuilder"
do_configure() {
make -C ${JSON_SCHEMA_DIR}
}
do_compile() {
cd ${JSON_SCHEMA_DIR}/native
make all
}
do_install() {
cd ${JSON_SCHEMA_DIR}/native
make install
install -d ${D}${STAGING_DIR_NATIVE}${prefix_native}/bin
install -m 0755 ${JSON_SCHEMA_DIR}/bin/* \
${D}${STAGING_DIR_NATIVE}${prefix_native}/bin
}
#!/bin/sh
### BEGIN INIT INFO
# Provides: bs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Required-Start:
# Required-Stop:
# Short-Description: Kodi multimedia center
### END INIT INFO
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Kodi runner script"
NAME=kodi
KODIROOT=/usr
DAEMON=$KODIROOT/bin/$NAME
DAEMON_ARGS="--standalone"
PIDFILE=/var/run/$NAME/$NAME
SCRIPTNAME=/etc/init.d/$NAME
HOME=/home/root
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
case "$1" in
start)
reset > /dev/tty1
echo > /dev/tty1
echo "ver 0.2.1 Torvin" > /dev/tty1
setterm --background black --foreground black --cursor off > /dev/tty1
/etc/init.d/restarter.sh $DAEMON $DAEMON_ARGS > /dev/null 2>&1 &
;;
stop)
;;
restart|force-reload)
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
#!/bin/sh
# Very Simple Restarter
SIGSEGV=139
SIGINT=130
# меню Kodi:
# Выход
# Выключить систему
# Выключение по таймеру
# перезагрузка
KODI_EXIT=0
KODI_POWEROFF=64
KODI_TIMER=0
KODI_REBOOT=66
while /bin/true; do
$1 $2 $3 $4 $5
rc=$?
if [ $rc = $SIGSEGV ]; then
echo "Segmentation fault :)"
else
echo "Return code $rc"
fi
sleep 1
if [ $rc -eq $KODI_EXIT ]; then poweroff;
elif [ $rc -eq $KODI_POWEROFF ]; then poweroff;
elif [ $rc -eq $KODI_TIMER ]; then poweroff;
elif [ $rc -eq $KODI_REBOOT ]; then reboot;
fi
if [ $rc = $SIGINT ]; then
echo "Quitting"
break
fi
done
1
139460608
20
<settings>
<setting id="epgCache" value="true" />
<setting id="epgPath" value="" />
<setting id="epgPathType" value="1" />
<setting id="epgTSOverride" value="false" />
<setting id="epgTimeShift" value="0" />
<setting id="epgUrl" value="" />
<setting id="logoBaseUrl" value="" />
<setting id="logoFromEpg" value="0" />
<setting id="logoPath" value="" />
<setting id="logoPathType" value="1" />
<setting id="m3uCache" value="true" />
<setting id="m3uPath" value="" />
<setting id="m3uPathType" value="0" />
<setting id="m3uUrl" value="" />
<setting id="sep1" value="" />
<setting id="sep2" value="" />
<setting id="sep3" value="" />
<setting id="startNum" value="1" />
</settings>
KODI_HOME_DIR = "/home/root/.kodi"
KODI_USERDATA = "${KODI_HOME_DIR}/userdata"
KODI_ADDON_DIR = "${KODI_HOME_DIR}/addons"
SUMMARY = "KODI Media Center"
LICENSE = "GPLv2"
MD5_SUM = "md5=930e2a5f63425d8dd72dbd7391c43c46"
LIC_FILES_CHKSUM = "file://LICENSE.GPL;${MD5_SUM}"
# официальная позиция коdi, испльзование только ffmpeg
RCONFLICTS_${PN} = "libav"
# используется userland
RCONFLICTS_${PN} = "mesa"
require kodi-version.inc
DEPENDS = "libusb1 libcec libplist expat yajl gperf-native libxmu \
fribidi mpeg2dec samba fontconfig curl python libass libmodplug \
libmicrohttpd wavpack libmms cmake-native \
virtual/egl mysql5 sqlite3 libmms faad2 \
libcdio libpcre boost lzo enca \
avahi libsamplerate0 libxinerama libxtst bzip2 \
jasper zip-native zlib libtinyxml libmad \
libbluray libnfs swig-native libvorbis tiff \
libxslt taglib libssh rtmpdump shairplay ffmpeg \
libsquish x264 libtheora git-replacement-native \
jsonschemabuilder-native \
"
# убрал зависимости
# virtual/libsdl \
# libsdl-image libsdl-mixer
RDEPENDS_${PN} += "python-json"
inherit autotools-brokensep gettext python-dir
S = "${WORKDIR}/git"
# breaks compilation
CCACHE = ""
CACHED_CONFIGUREVARS += " \
ac_cv_path_PYTHON="${STAGING_BINDIR_NATIVE}/python-native/python" \
"
# предусматриваю параметр "openglesv2" в layer.conf
PACKAGECONFIG ??= "${@base_contains('DISTRO_FEATURES', \
'openglesv2', 'openglesv2', '', d)} "
PACKAGECONFIG[openglesv2] = "--enable-gles,,userland"
#PACKAGECONFIG ??= "${@base_contains('DISTRO_FEATURES',
# 'opengl', 'opengl', 'openglesv2', d)}"
#PACKAGECONFIG[opengl] = "--enable-gl,--enable-gles,glew"
#PACKAGECONFIG[openglesv2] = "--enable-gles,,"
# FIXME:
# убрать явное указание --disable-gl и --disable-gl, проверить что бы зависили
# от DISTRO_FEATURES => "openglesv2"
EXTRA_OECONF = " \
--disable-static \
--enable-shared \
gl_cv_func_gettimeofday_clobber=no \
ac_cv_lib_bluetooth_hci_devid=no \
--disable-debug \
--disable-optimizations \
--disable-gl \
--enable-gles \
--enable-openmax \
--disable-vdpau \
--disable-vaapi \
--disable-vtbdecoder \
--disable-tegra \
--disable-profiling \
--enable-joystick=no \
--enable-libcec \
--enable-udev \
--disable-libusb \
--disable-goom \
--disable-rsxs \
--disable-projectm \
--disable-waveform \
--disable-spectrum \
--disable-fishbmc \
--disable-x11 \
--disable-ccache \
--enable-alsa \
--disable-pulse \
--enable-rtmp \
--enable-samba \
--enable-nfs \
--disable-libcap \
--enable-dvdcss \
--disable-mid \
--enable-avahi \
--enable-upnp \
--enable-mysql \
--enable-ssh \
--enable-airplay \
--enable-airtunes \
--enable-non-free \
--disable-asap-codec \
--enable-webserver \
--enable-optical-drive \
--enable-libbluray \
--disable-texturepacker \
--with-ffmpeg=shared \
--with-platform=raspberry-pi \
--enable-player=omxplayer \
"
# так же убрал --enable-texturepacker
#
FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations \
-fomit-frame-pointer -O4 -ffast-math"
BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
###EXTRA_OECONF_append_armv7a = " --cpu=cortex-a8 "
# for python modules
export HOST_SYS
export BUILD_SYS
export STAGING_LIBDIR
export STAGING_INCDIR
export PYTHON_DIR
do_configure() {
sh bootstrap
oe_runconf
}
do_compile_prepend() {
for i in $(find . -name "Makefile") ; do
sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' $i
done
for i in $(find . -name "*.mak*" -o -name "Makefile") ; do
sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' \
-e 's:-rpath \$(libdir):-rpath ${libdir}:g' $i
done
}
INSANE_SKIP_${PN} = "rpaths"
# on ARM architectures xbmc will use GLES which will
# make the regular wrapper fail, so start it directly
###do_install_append_arm() {
### sed -i -e 's:Exec=xbmc:Exec=${libdir}/xbmc/xbmc.bin:g' \
### ${D}${datadir}/applications/xbmc.desktop
###}
do_install_append() {
# исправляю путь в cmake файле
# ${STAGING_DIR_TARGET}/usr/lib/kodi/kodi-config.cmake
# иначе при сборке addons не будет найден
# addon-helpers (как сделать более правильно ???)
sed -i "s| /usr/lib/kodi| ${STAGING_DIR_TARGET}/usr/lib/kodi|g" \
${D}/usr/lib/kodi/kodi-config.cmake
sed -i "s| /usr/include/kodi| ${STAGING_DIR_TARGET}/usr/include/kodi|g" \
${D}/usr/lib/kodi/kodi-config.cmake
}
PACKAGES = " \
${PN}-dbg \
${PN}-dev \
${PN}-doc \
${PN} \
"
PROVIDES = "${PACKAGES}"
FILES_${PN}-doc = "${docdir}"
FILES_${PN}-dev = "${includedir}"
FILES_${PN}-dbg = "${libdir}/kodi/.debug \
${libdir}/kodi/*/.debug \
${libdir}/kodi/*/*/.debug \
${libdir}/kodi/*/*/*/.debug \
${libdir}/kodi/addons/library.xbmc.addon/.debug \
${prefix}/src/debug \
"
FILES_${PN} = "${bindir} \
${libdir}/kodi \
${libdir}/xbmc \
${datadir}/xbmc \
${datadir}/icons \
${datadir}/xsessions \
${datadir}/applications \
${datadir}/kodi/media \
${datadir}/kodi/system \
${datadir}/kodi/addons \
${datadir}/kodi/userdata \
"
RRECOMMENDS_${PN}_append = " libcec \
python \
python-lang \
python-re \
python-netclient \
libcurl \
xdpyinfo "
RRECOMMENDS_${PN}_append_libc-glibc = " glibc-charmap-ibm850 glibc-gconv-ibm850"
DESCRIPTION = "runner for KODI Media Center"
SECTION = "configs"
PR = "r1"
LICENSE = "MIT"
MD5_SUM = "md5=4d92cd373abda3937c2bc47fbc49d690"
MIT_SUM = "md5=3da9cfbcb788c80a0384361b4de20420"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;${MD5_SUM} \
file://${COREBASE}/meta/COPYING.MIT;${MIT_SUM}"
FILESEXTRAPATHS_prepend := "${THISDIR}/kodi:"
# секция установки скрипта запуска
SRC_URI = "file://run/kodi.init file://run/restarter.sh"
inherit update-rc.d
S = "${WORKDIR}/run"
INITSCRIPT_NAME = "kodi"
INITSCRIPT_PARAMS = "start 01 2 3 4 5 . stop 90 0 1 6 ."
PACKAGES = "${PN}"
FILES_${PN} = "/etc/init.d"
do_install_append() {
# скрипт запуска
install -d ${D}/etc/init.d
install -m 0755 ${S}/kodi.init ${D}/etc/init.d/kodi
install -m 0755 ${S}/restarter.sh ${D}/etc/init.d/restarter.sh
}
DESCRIPTION = "settings for KODI Media Center"
SECTION = "configs"
PR = "r1"
LICENSE = "MIT"
MD5_SUM = "md5=4d92cd373abda3937c2bc47fbc49d690"
MIT_SUM = "md5=3da9cfbcb788c80a0384361b4de20420"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;${MD5_SUM} \
file://${COREBASE}/meta/COPYING.MIT;${MIT_SUM}"
FILESEXTRAPATHS_prepend := "${THISDIR}/kodi:"
S = "${WORKDIR}"
require kodi-dir.inc
require recipes-berserk/tv/tv-dir.inc
PVR_IPTVSIMPLE_SETTINGS = "${KODI_USERDATA}/addon_data/pvr.iptvsimple"
SRC_URI += " \
file://settings/guisettings.xml \
file://settings/settings-pvr-iptvsimple.xml \
file://settings/advancedsettings.xml \
"
PACKAGES = "${PN}"
FILES_${PN} += "${KODI_USERDATA} \
"
FIND_M3U_PATH = "m3uPath. value=."
REPLACE_M3U_PATH = "${TV_CONFIG_DIR}/${TV_CONFIG}"
do_install() {
# Kodi guisettings
install -d "${D}${KODI_USERDATA}"
install -m 0644 "${S}/settings/guisettings.xml" "${D}${KODI_USERDATA}"
install -m 0644 "${S}/settings/advancedsettings.xml" "${D}${KODI_USERDATA}"
# addon pvr.iptvsimple settings
install -d "${D}${PVR_IPTVSIMPLE_SETTINGS}"
# change path show tv-config.bb
sed -i "s|${FIND_M3U_PATH}|&${REPLACE_M3U_PATH}|" \
"${S}/settings/settings-pvr-iptvsimple.xml"
install -m 0644 "${S}/settings/settings-pvr-iptvsimple.xml" \
"${D}${PVR_IPTVSIMPLE_SETTINGS}/settings.xml"
}
# ветка Isengard
SRCREV = "02e7013889e08d608363f2909ebeccdb9ea3b7c9"
FILESEXTRAPATHS_prepend := "${THISDIR}/kodi:"
PV = "15.0+gitr${SRCPV}"
PR = "r0"
SRC_URI = "git://github.com/xbmc/xbmc.git;branch=Isengard \
file://kodi-isengard-rpb-backports.patch \
file://network-menu.patch \
"
DESCRIPTION = "resource.language.ru_ru for KODI Media Center"
# как альтернативный вариант можно взять русскую локализацию
# из официального репозитория "https://github.com/xbmc/translations.git"
# но проект весит 1.2 Гб вместе с базой git, что не очень быстро загружается
# поэтому локализацию пока добавил в качестве архива
SECTION = "configs"
PR = "r0"
LICENSE = "GPL-2.0"
MD5_SUM = "md5=801f80980d171dd6425610833a22dbe6"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses\
/GPL-2.0;${MD5_SUM}"
require ../kodi/kodi-dir.inc
LANG_PACKAGE = "resource.language.ru_ru"
SRC_URI = "file://${LANG_PACKAGE}.tar.gz"
S = "${WORKDIR}"
PACKAGES = "${PN}"
FILES_${PN} += "${KODI_ADDON_DIR}"
do_install() {
# Kodi addons
install -d "${D}${KODI_ADDON_DIR}/${LANG_PACKAGE}"
install -d "${D}${KODI_ADDON_DIR}/${LANG_PACKAGE}/resources"
install -m 0644 ${S}/${LANG_PACKAGE}/icon.png \
${D}${KODI_ADDON_DIR}/${LANG_PACKAGE}
install -m 0644 ${S}/${LANG_PACKAGE}/addon.xml \
${D}${KODI_ADDON_DIR}/${LANG_PACKAGE}
install -m 0755 ${S}/${LANG_PACKAGE}/resources/* \
${D}${KODI_ADDON_DIR}/${LANG_PACKAGE}/resources
chown root:root -R ${D}
}
SUMMARY = "pvr.iptvsimple addons for KODI Media Center"
ADDONS_NAME = "pvr.iptvsimple"
LICENSE = "GPL-2.0"
MD5_SUM = "md5=801f80980d171dd6425610833a22dbe6"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses\
/GPL-2.0;${MD5_SUM}"
require ../kodi/kodi-dir.inc
require ../kodi/kodi-version.inc
FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations \
-fomit-frame-pointer -O4 -ffast-math"
BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
inherit cmake gettext
S = "${WORKDIR}/git"
DEPENDS = "gettext bcm2835-bootfiles kodi"
RDEPENDS_${PN} = "userland"
PACKAGES = "${PN}-dbg ${PN}"
PROVIDES = "${PACKAGES}"
FILES_${PN} = "/lib /share ${KODI_ADDON_DIR}"
FILES_${PN}-dbg = "/lib/kodi/addons/${ADDONS_NAME}/.debug"
INSANE_SKIP_${PN} = "dev-so"
PARALLEL_MAKE = ""
# явно указываю firmware для Raspberry PI см. recipes-bsp/common/firmware.inc
# bitbake -s | grep "bcm2835-bootfiles" | cut -d":" -f2
VERSION_BCM2835 = "20160622-r3"
GIT_DIR_BCM2835 = "bcm2835-bootfiles/${VERSION_BCM2835}/git"
WORK_DIR_BCM2835 = "${BASE_WORKDIR}/${MACHINE}-${DISTRO}-${TARGET_OS}"
EXTRA_OECONF = " \
--with-platform=raspberry-pi \
--host=${HOST_SYS} \
--build=${BUILD_SYS} \
--prefix=${STAGING_DIR_TARGET}/usr/lib/kodi \
--with-toolchain=${STAGING_DIR_TARGET} \
--with-firmware=${WORK_DIR_BCM2835}/${GIT_DIR_BCM2835} \
"
KODI_GEN_TOOLCHAIN = "${WORKDIR}/git/tools/depends/target/Toolchain.cmake"
# генерация Toolchain.cmake, сами зависимости не собираю,
# для сборки kodi они беруться из yocto project см. kodi_git.bb => DEPENDS
do_configure_prepend() {
cd ${WORKDIR}/git/tools/depends
sh bootstrap
sh configure ${EXTRA_OECONF}
}
# явно указываю корневой системный каталог,
# иначе cmake тесты компилятора не проходят
CXXFLAGS += "--sysroot=${STAGING_DIR_TARGET}"
CFLAGS += "--sysroot=${STAGING_DIR_TARGET}"
# можно тоже самое сделать вот так
# echo "SET( CMAKE_SYSROOT ${STAGING_DIR_TARGET})" >> ${KODI_GEN_TOOLCHAIN}
do_configure() {
echo "SET( OVERRIDE_PATHS 1)" >> ${KODI_GEN_TOOLCHAIN}
cd ${B}
cmake -DADDONS_TO_BUILD=${ADDONS_NAME} \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=${KODI_GEN_TOOLCHAIN} \
-DBUILD_DIR=${B} \
-DCMAKE_INSTALL_PREFIX=${D} \
-DPACKAGE_ZIP=1 \
${S}/project/cmake/addons
}
do_compile_append() {
install -d ${D}/${KODI_ADDON_DIR}
cp -vfR ${D}/pvr.iptvsimple ${D}/${KODI_ADDON_DIR}
rm -fr ${D}/pvr.iptvsimple
}
# отключаю метод, так как после сборки
# файлы уже располагаются в CMAKE_INSTALL_PREFIX=${D}
do_install[noexec] = "1"
# Very simple Screensaver for Kodi mediacenter
# autor Alexander Demachev (https://berserk.tv)
DESCRIPTION = "Screensaver Kodi Universe"
SECTION = "configs"
PR = "r1"
LICENSE = "GPL-2.0"
MD5_SUM = "md5=801f80980d171dd6425610833a22dbe6"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses\
/GPL-2.0;${MD5_SUM}"
GIT_REPO_DIR = "github.com/berserktv"
require ../kodi/kodi-dir.inc
KODI_ADDON_NAME = "screensaver.kodi.universe"
KODI_ADDON_PATH = "${KODI_ADDON_DIR}/${KODI_ADDON_NAME}"
KODI_MEDIA_PATH = "${KODI_ADDON_PATH}/resources/skins/default\
/media/kodi-universe.mkv"
KODI_ADDON_VIDEO = "https://${GIT_REPO_DIR}/bs-res/raw/master/kodi-plugins\
/${KODI_ADDON_NAME}/isengard/kodi-universe.mkv"
SRC_URI = "${KODI_ADDON_VIDEO};protocol=https;name=kodi-video \
git://${GIT_REPO_DIR}/${KODI_ADDON_NAME}.git;\
branch=master;name=kodi-addon"
SRCREV_kodi-addon = "d32bcb5101f179c1b2a1db833936832519468ea1"
SRC_URI[kodi-video.md5sum] = "98f941a6ad29fe7ad4735e8a0eedd4dc"
SHA_SUM = "45e6a93eee87b8506d351d13214ffbfe005526b6a146a2d0086e88050aa44785"
SRC_URI[kodi-video.sha256sum] = "${SHA_SUM}"
S = "${WORKDIR}/git"
PACKAGES = "${PN}"
FILES_${PN} = "${KODI_HOME_DIR}"
do_install_append() {
install -d ${D}/${KODI_ADDON_PATH}
rm -fr ${S}/.git
cp -vfR ${S}/* ${D}/${KODI_ADDON_PATH}
install -m 0644 ${WORKDIR}/kodi-universe.mkv ${D}/${KODI_MEDIA_PATH}
}
# Plugin for Kodi mediacenter
# "Network Manager" is a network management software
# for Ethernet and Wifi network connections
# Project "Berserk" - build Kodi for the Raspberry Pi platform
# autor Alexander Demachev, site https://berserk.tv
# license - The MIT License (MIT)
DESCRIPTION = "Network Manager is a network management \
software for Ethernet and Wifi network connections"
SECTION = "configs"
PR = "r1"
LICENSE = "MIT"
MD5_SUM = "md5=4d92cd373abda3937c2bc47fbc49d690"
MIT_SUM = "md5=3da9cfbcb788c80a0384361b4de20420"
LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;${MD5_SUM} \
file://${COREBASE}/meta/COPYING.MIT;${MIT_SUM}"
SRC_URI = "git://github.com/berserktv/script.berserk.network.git;branch=master"
SRCREV = "a68597d06254f0923ee567a72399102ca6d7edde"
require ../kodi/kodi-dir.inc
KODI_ADDON_NAME = "script.berserk.network"
KODI_ADDON_PATH = "${KODI_ADDON_DIR}/${KODI_ADDON_NAME}"
S = "${WORKDIR}/git"
PACKAGES = "${PN}"
FILES_${PN} = "${KODI_HOME_DIR}"
RDEPENDS_${PN} += "python-subprocess python-fcntl"
do_install_append() {
install -d ${D}/${KODI_ADDON_PATH}
install -m 0644 ${S}/addon.xml ${D}/${KODI_ADDON_PATH}
install -m 0644 ${S}/changelog.txt ${D}/${KODI_ADDON_PATH}
install -m 0644 ${S}/default.py ${D}/${KODI_ADDON_PATH}
install -m 0644 ${S}/icon.png ${D}/${KODI_ADDON_PATH}
install -m 0644 ${S}/service.py ${D}/${KODI_ADDON_PATH}
cp -vfR ${S}/resources ${D}/${KODI_ADDON_PATH}
}
Формат JSON предназначен для представления структурированных объектов в текстовом виде.
JSON - Schema позволяет автоматизировать процесс проверки документов JSON.
Компонент JsonSchemaBuilder необходим для работы со схемами JSON на этапе сборки Kodi.
Инструмент собирается нативно т.е. под архитектурой host машины сборки и в дальнейшем участвует в сборке других компонентов.
Патч обратного портирования это важные изменения кода, применяемые к официальной стабильной версии Kodi (15.2), данный патч был взят из всем известного проекта - OpenELEC
Обычно патчи обратного портирования содержат новую функциональность и исправление уже известных ошибок (у нас патч взят для платформы Raspberry Pi).
В Kodi за отображение пунктов меню отвечают конфигурационные xml файлы. Для добавление еще
одного под пункта в основное меню "СИСТЕМА", достаточно подкорректировать файл:
kodi/addons/skin.confluence/720p/IncludesHomeMenuItems.xml
и у нас появиться под меню "Сеть", событие нажатия на кнопку меню которого описывается как:
<onclick>RunAddon(script.berserk.network,butnetwork)</onclick>что приведет к передачи управления плагину script.berserk.network, первым аргументом которого будет строка "butnetwork" и плагин обработает этот вызов в соответствии со своей логикой работы (откроется окно настроек плагина opensettings).
if arg.startswith('butnetwork'): __addon__.openSettings()
Скрипт начального запуска kodi.init (sysvinit) у нас немного не стандартный, так как по сути программа Kodi для сборки Torvin является единственным пользовательским приложением, и для ее перезапуска используется shell скрипт restarter.sh. Это сделано для того, чтобы не тащить в дистрибутив достаточно сложный и большой компонент запуска приложений systemD.
В мультимедиа центре Kodi для увеличения производительности во время просмотра видео
можно указать максимальные настройки буферизации:
buffermode=1
- буферизировать запросы для всех файловых систем (включая локальную)
readbufferfactor
- регулирует скорость загрузки на основе среднего битрейта видео.
Так, например, если вы воспроизводите видео со средней скоростью передачи данных 5 Мбит/с
и устанавливаете коэффициент чтения буфера на 2.0,
это ограничит скорость загрузки (и, следовательно,
скорость заполнения кеша) примерно 10 Мбит/с, таким образом:
readbufferfactor=20
снимает ограничение на скорость загрузки
cachemembuffersize =139460608
- размер буфера составляет 133 МБайт, при этом используется 133*3 оперативной памяти
т.е. около 400 Мбайт оперативной памяти
Для просмотра телевидения через интернет по протоколу "IPTV", у нас используется
Kodi плагин - "pvr-iptvsimple",
настройки плагина содержаться в файле settings-pvr-iptvsimple.xml
например настройка с тегом m3uPath будет содержать путь к файлу
/home/root/tvconfig/berserk.m3u8 - с конфигурацией телевизионных каналов по умолчанию
см. рецепт kodi-settings.bb
Версия первого варианта рецепта сборки Kodi - kodi_git.bb, у нас выглядит немного грязноватой и в дальнейшем мы ее доведем до нормального вида (но для самой первой сборки это приемлемо).
Наша конфигурация Kodi состоит из трех файлов и рецепт kodi-settings.bb, скопирует их по следующим путям:
screensaver.kodi.universe вы можете посмотреть здесь
Kodi плагин script.berserk.network - является GUI надстройкой
над shell расширением WLAN/Ethernet сетевых интерфейсов,
исходный код расширения располагается здесь
Также исходный код вы можете посмотреть с помощью команды:
git clone https://github.com/berserktv/bs-net
############################################################## # пример возможного использования в /etc/network/interfaces: ############################################################## auto eth0 iface eth0 inet manual up /etc/network/eth-manual $IFACE up down /etc/network/eth-manual $IFACE down auto wlan0 iface wlan0 inet manual up /etc/network/wlan $IFACE up down /etc/network/wlan $IFACE down
Создание файла идентификатора для WiFi точки доступа, можно осуществить с помощью следующего скрипта (скрипт выполняется от имени администратора). Имя файла идентификатора должно быть таким же, как и название вашего "SSID" т.е. совпадает с именем вашей точки доступа.
#!/bin/sh ssid="идентификатор_вашей_точки_доступа" pass="пароль_вашей_точки_доступа" # Примечание: так как расширение используется для Kodi, то и пути хранения настроек # WLAN/Ethernet привязаны к конфигурации Kodi # W_DIR="/home/root/.kodi/userdata/wlans" mkdir -p ${W_DIR} wpa_passphrase "$ssid" "$pass" > "${W_DIR}/$ssid" chmod 600 "${W_DIR}/$ssid"
После создания файла идентификатора, вы можете вручную подключиться к вашей точке доступа с помощью следующей команды: (где wlan0 название WiFi интерфейса, в системе)
sudo /etc/network/wlan wlan0 upили отключиться
ПРИМЕЧАНИЕ: пример выше может быть использован, если у вас запущена только консольная версия расширения bs-net т.е. как таковой GUI режим отсутствует
Для автоматического подключения к WiFi точки доступа при старте системы
используется udev правило:
/etc/udev/rules.d/80-wifi-start.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNEL=="wlan*", \ RUN+="/etc/network/wlan-runner $env{INTERFACE} up" SUBSYSTEM=="net", ACTION=="remove", DRIVERS=="?*", KERNEL=="wlan*", \ RUN+="/etc/network/wlan-runner $env{INTERFACE} down"
Для настройки сетевого Ethernet интерфейса, именованного как eth0 достаточно создать файл:
/home/root/.kodi/userdata/eths/eth0
следующего содержания:
ETH_IP=dhcp ETH_NETMASK="" ETH_GATEWAY="" ETH_DNS1="" ETH_DNS2=""в примере выше сетевой интерфейс настраивается с помощью "DHCP" протокола или же можно явно указать IP адрес, сетевую маску, адрес шлюза, адрес первого DNS сервера и адрес второго DNS сервера
├── ffmpeg │ ├── ffmpeg_2.6.bb │ ├── ffmpeg.inc │ └── files │ └── 0001-mpeg4video-Signal-unsupported-GMC-with-more-than-one.patch ├── libsquish │ └── libsquish.bb └── shairplay └── shairplay_git.bbгде:
require ffmpeg.inc
LIC_FILES_CHKSUM = "file://COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \
file://COPYING.LGPLv2.1;md5=bd7a443320af8c812e4c18d1b79df004 \
file://COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02"
SRC_URI = "git://source.ffmpeg.org/ffmpeg.git;branch=${SRCBRANCH} \
file://0001-mpeg4video-Signal-unsupported-GMC-with-more-than-one.patch \
"
SRCBRANCH = "release/2.6"
SRCREV = "${AUTOREV}"
S = "${WORKDIR}/git"
DEFAULT_PREFERENCE = "-1"
SUMMARY = "A complete, cross-platform solution to record, \
convert and stream audio and video"
HOMEPAGE = "http://ffmpeg.org/"
SECTION = "libs"
LICENSE = "GPLv2+"
LICENSE_FLAGS = "commercial"
ARM_INSTRUCTION_SET = "arm"
DEPENDS = "zlib libogg libvorbis libtheora yasm-native"
RCONFLICTS_ffmpeg = "libav"
INC_PR = "r8"
inherit autotools pkgconfig
FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -fomit-frame-pointer \
-O4 -ffast-math"
BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
EXTRA_FFCONF_armv7a = "--cpu=cortex-a8"
EXTRA_FFCONF ?= ""
PACKAGECONFIG ??= "bzip2 x264 \
${@base_contains('DISTRO_FEATURES', 'x11', 'x11', '', d)}"
PACKAGECONFIG[jack] = "--enable-indev=jack,--disable-indev=jack,jack"
PACKAGECONFIG[bzip2] = "--enable-bzlib,--disable-bzlib,bzip2"
PACKAGECONFIG[schroedinger] = "--enable-libschroedinger,\
--disable-libschroedinger,schroedinger"
PACKAGECONFIG[gsm] = "--enable-libgsm,--disable-libgsm,libgsm"
PACKAGECONFIG[x264] = "--enable-libx264,--disable-libx264,x264"
PACKAGECONFIG[vpx] = "--enable-libvpx,--disable-libvpx,libvpx"
PACKAGECONFIG[mp3lame] = "--enable-libmp3lame,--disable-libmp3lame,lame"
PACKAGECONFIG[faac] = "--enable-libfaac,--disable-libfaac,faac"
PACKAGECONFIG[x11] = "--enable-x11grab,--disable-x11grab,virtual/libx11 \
libxfixes libxext xproto virtual/libsdl"
EXTRA_OECONF = " \
--disable-stripping \
--disable-debug \
--enable-shared \
--enable-pthreads \
--enable-gpl \
--enable-avfilter \
\
--cross-prefix=${TARGET_PREFIX} \
--prefix=${prefix} \
\
--enable-ffserver \
--enable-ffplay \
--ld="${CCLD}" \
--enable-libtheora \
--enable-libvorbis \
--arch=${TARGET_ARCH} \
--target-os="linux" \
--enable-cross-compile \
--extra-cflags="${TARGET_CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \
--extra-ldflags="${TARGET_LDFLAGS}" \
--sysroot="${STAGING_DIR_TARGET}" \
--enable-hardcoded-tables \
${EXTRA_FFCONF} \
--libdir=${libdir} \
--shlibdir=${libdir} \
"
# remove the "--build=x86_64-linux" option automatically passed to configure
do_configure() {
${S}/configure ${EXTRA_OECONF}
}
FFMPEG_LIBS = "libavcodec libavdevice libavformat \
libavutil libpostproc libswscale libavfilter libswresample"
FILES_${PN} = "${bindir} ${datadir}/ffprobe.xsd"
FILES_${PN}-dev = "${includedir}/${PN}"
FILES_${PN}-dev = "${includedir}"
LEAD_SONAME = "libavcodec.so"
PACKAGES += "ffmpeg-x264-presets \
libavcodec libavcodec-dev libavcodec-dbg \
libavdevice libavdevice-dev libavdevice-dbg \
libavformat libavformat-dev libavformat-dbg \
libavutil libavutil-dev libavutil-dbg \
libpostproc libpostproc-dev libpostproc-dbg \
libswscale libswscale-dev libswscale-dbg \
libavfilter libavfilter-dev libavfilter-dbg \
libavcore libavcore-dev libavcore-dbg \
libswresample libswresample-dev libswresample-dbg \
ffmpeg-examples \
"
FILES_ffmpeg-x264-presets = "${datadir}/*.ffpreset"
FILES_${PN}-dev = "${includedir}"
FILES_libavcodec = "${libdir}/libavcodec*.so.*"
FILES_libavcodec-dev = "${libdir}/libavcodec*.so ${libdir}/pkgconfig/libavcodec.pc \
${libdir}/libavcodec*.a"
FILES_libavcodec-dbg += "${libdir}/.debug/libavcodec*"
FILES_libavdevice = "${libdir}/libavdevice*.so.*"
FILES_libavdevice-dev = "${libdir}/libavdevice*.so ${libdir}/pkgconfig/libavdevice.pc \
${libdir}/libavdevice*.a"
FILES_libavdevice-dbg += "${libdir}/.debug/libavdevice*"
FILES_libavformat = "${libdir}/libavformat*.so.*"
FILES_libavformat-dev = "${libdir}/libavformat*.so ${libdir}/pkgconfig/libavformat.pc \
${libdir}/libavformat*.a"
FILES_libavformat-dbg += "${libdir}/.debug/libavformat*"
FILES_libavutil = "${libdir}/libavutil*.so.*"
FILES_libavutil-dev = "${libdir}/libavutil*.so ${libdir}/pkgconfig/libavutil.pc \
${libdir}/libavutil*.a"
FILES_libavutil-dbg += "${libdir}/.debug/libavutil*"
FILES_libpostproc = "${libdir}/libpostproc*.so.*"
FILES_libpostproc-dev = "${libdir}/libpostproc*.so \
${libdir}/pkgconfig/libpostproc.pc \
${libdir}/libpostproc*.a ${includedir}/postproc"
FILES_libpostproc-dbg += "${libdir}/.debug/libpostproc*"
FILES_libswscale = "${libdir}/libswscale*.so.*"
FILES_libswscale-dev = "${libdir}/libswscale*.so ${libdir}/pkgconfig/libswscale.pc \
${libdir}/libswscale*.a"
FILES_libswscale-dbg += "${libdir}/.debug/libswscale*"
FILES_libavfilter = "${libdir}/libavfilter*.so.*"
FILES_libavfilter-dev = "${libdir}/libavfilter*.so ${libdir}/pkgconfig/libavfilter.pc \
${libdir}/libavfilter*.a"
FILES_libavfilter-dbg += "${libdir}/.debug/libavfilter*"
FILES_libavcore = "${libdir}/libavcore*.so.*"
FILES_libavcore-dev = "${libdir}/libavcore*.so ${libdir}/pkgconfig/libavcore.pc \
${libdir}/libavcore*.a"
FILES_libavcore-dbg += "${libdir}/.debug/libavcore*"
FILES_libswresample = "${libdir}/libswresample*.so.*"
FILES_libswresample-dev = "${libdir}/libswresample*.so \
${libdir}/pkgconfig/libswresample.pc \
${libdir}/libswresample*.a"
FILES_libswresample-dbg += "${libdir}/.debug/libswresample*"
FILES_ffmpeg-examples = "${datadir}/examples/*"
DESCRIPTION = "libCEC allows you in combination with the right hardware \
to control your device with your TV remote control. \
Utilising your existing HDMI cabling"
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://README;md5=2a51a796ca47e91336a4d198147ba58f"
PR = "r0"
inherit autotools pkgconfig
SRC_URI = "git://github.com/OpenELEC/libsquish.git"
SRCREV = "52e7d93c5947f72380521116c05d97c528863ba8"
S = "${WORKDIR}/git"
do_configure_append() {
# Removed INSTALL_DIR from config because it conflicts with bitbake
sed -i "s|INSTALL_DIR ?= @PREFIX@|#&|" "${S}/config"
}
do_install() {
cd ${S}
install -d ${D}/usr/lib/pkgconfig
install -d ${D}/usr/include
export INSTALL_DIR=${D}/usr
make install
}
DESCRIPTION = "Free portable AirPlay server implementation"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://LICENSE;md5=7fff59c88f17faa814f26f26b06a7100"
PR = "r0"
inherit autotools pkgconfig
SRC_URI = "git://github.com/juhovh/shairplay.git"
SRCREV="64d59e3087f829006d091fa0d114efb50972a2bf"
S = "${WORKDIR}/git"
FILES_${PN} += "${libdir}/*.so"
FFmpeg - OpenSource библиотека для кодирования / декодирования
огромного количества видео и аудио форматов
libsquish - это библиотека для сжатия текстур DXT с потерями.
AirPlay — наименование технологии и протокола, разработанных Apple, при использовании которых обеспечивается беспроводная потоковая передача медиаданных (аудио, видео, изображений) между устройствами. Поддержка AirPlay реализована на основе сервера Shairplay
├── libbluray │ ├── libaacs_git.bb │ ├── libbluray_1.0.0.bb │ ├── libbluray.inc │ ├── libdca_0.0.5.bb │ └── libdvdcss_1.3.0.bb ├── libgcrypt │ └── libgcrypt_1.6.5.bbappend ├── libnfs │ └── libnfs.bb └── libtinyxml ├── files │ └── tinyxml.pc └── libtinyxml_2.6.2.bbappendгде:
SUMMARY = "Open implementation of the AACS specification"
SECTION = "libs/multimedia"
LICENSE = "LGPLv2.1+"
LIC_FILES_CHKSUM = "file://COPYING;md5=4b54a1fd55a448865a0b32d41598759d"
SRCREV = "0fffa67066f16e22967e06c92fb63c79b5a9a5fe"
PV = "0.8.1"
SRC_URI = "git://git.videolan.org/${PN}.git;protocol=git \
"
S = "${WORKDIR}/git"
inherit autotools-brokensep lib_package pkgconfig
DEPENDS += "libgcrypt"
require libbluray.inc
DEPENDS += "libaacs libdca libdvdcss"
RDEPENDS_${PN} += "libaacs libdca libdvdcss"
SRCREV="491c7e8501d7e7ea853700a2f35a18f11ad40a5b"
LIC_FILES_CHKSUM="file://COPYING;md5=435ed639f84d4585d93824e7da3d85da"
PR = "${INC_PR}.2"
do_package_qa() {
}
DESCRIPTION = "libbluray for oe."
SECTION = "misc"
HOMEPAGE = "http://videolan.org"
DEPENDS = ""
LICENSE = "GPLv2"
INC_PR = "r5"
S="${WORKDIR}/git"
SRC_URI = "git://git.videolan.org/libbluray.git;branch=master;protocol=git \
"
inherit autotools-brokensep
FILES_${PN} = "/"
SUMMARY = "decoding library for DTS Coherent Acoustics streams"
SECTION = "libs/multimedia"
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
SRC_URI = "http://download.videolan.org/pub/videolan/libdca/${PV}/libdca-${PV}.tar.bz2"
SRC_URI[md5sum] = "dab6b2795c66a82a6fcd4f8343343021"
SRC_URI[sha256sum] = "dba022e022109a5bacbe122d50917769ff27b64a7bba104bd38ced8de8510642"
S = "${WORKDIR}/${PN}-${PV}"
inherit autotools lib_package pkgconfig
do_configure_prepend() {
QUILT_PATCHES="debian/patches quilt push -a"
# single precision is enough and speeds up libdca by about 10-15%
sed -i -e "s/double/sample_t/g" ${S}/libdca/*.c ${S}/libdca/*.h
}
DESCRIPTION = "libdvdcss is a simple library designed for accessing DVDs \
like a block device without having to bother about the decryption."
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
SRC_URI = "http://download.videolan.org/pub/libdvdcss/${PV}/libdvdcss-${PV}.tar.bz2"
inherit autotools
EXTRA_OECONF = " --disable-doc "
SRC_URI[md5sum] = "7f0fdb3ff91d638f5e45ed7536f7eb67"
SRC_URI[sha256sum] = "7c414acd520c4e4dd7267952f72d738ff50321a7869af4d75c65aefad44f1395"
# change binconfig-disabled on enabled
inherit autotools texinfo binconfig pkgconfig
SUMMARY = "LIBNFS is a client library for accessing NFS shares over a network."
SECTION = "network"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=a8375400e512ca525d061f32fb28b83a"
inherit autotools
PR = "r1"
SRCREV="libnfs-1.9.2"
SRC_URI = "git://github.com/sahlberg/libnfs;protocol=git;branch=master;tag=${SRCREV} \
"
S = "${WORKDIR}/git"
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: libtinyxml
Description: A simple, small, minimal, C++ XML parser
URL: http://sourceforge.net/projects/tinyxml/
Version: 2.6.2
Libs: -L${libdir} -ltinyxml
Cflags: -I${includedir}
# дополнительный параметр настройки tinyxml через pkgconfig
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://tinyxml.pc"
do_install_append() {
install -d ${D}${libdir}/pkgconfig
install -m 0644 ${WORKDIR}/tinyxml.pc ${D}${libdir}/pkgconfig/tinyxml.pc
}
Еще совсем недавно в медиа пространстве активно использовался формат оптических дисков Blu Ray.
В настоящее время эти технологии немного устарели и почти не используются.
Kodi большая и многофункциональная программа, в которой также есть поддержка
проигрывания и Blu Ray дисков.
AACS это способ шифрования контента в большинстве лицензионных Blu Ray дисков, с использованием закрытых ключей. Изначально производители лицензионного контента пытались сделать так, чтобы защита дисков встраивалась в приводы Blu Ray на аппаратном уровне. По замыслу создателей технологии, они должны быть доступны только создателям аппаратных и программных проигрывателей, а также создателям таких дисков.
libaacs — библиотека предназначена для реализации возможности ограниченного копирования оптических дисков. Библиотека поддерживает стандарт "Advanced Access Content System" (AACS - cистема расширенного доступа к содержимому).
libbluray — библиотека для интеграции в приложения функций по проигрыванию дисков в формате Blu-Ray. Поддерживает такие возможности, как навигацию, парсинг списка воспроизведения и работу с меню.
libdca — библиотека обеспечивает низкоуровневый интерфейс для декодирования аудиокадров, закодированных с использованием когерентной акустики DTS. Когерентная акустика DTS используется для кодирования звуковых дорожек на DVD дисках, libdca также обеспечивает понижающее микширование и динамическое сжатие диапазона для различных конфигураций вывода.
libdvdcss — библиотека системы защиты цифрового медиаконтента (Content Scramble System), используется для видео дешифровки при доступе к DVD Video содержимому.
libgcrypt — библиотека предоставляет высокоуровневый интерфейс к большому количеству алгоритмов криптографии т.е. библиотека предназначена для шифрования / дешифрования данных.
libnfs - библиотека для поддержки протокола NFS (Network File System). NFS — протокол сетевого доступа к файловым системам. Основан на протоколе вызова удалённых процедур (ONC RPC). Протокол позволяет подключать (монтировать) удалённые файловые системы через сеть.
libtinyxml - очень маленькая, компактная библиотека для быстрого разбора XML документов.
Собранный образ после сборки будет располагаться по пути
torvin/build/tmp/deploy/images/raspberrypi3
На последний успешно собранный образ всегда будет указывать
символическая ссылка:
berserk-image-raspberrypi3.rpi-sdimg
т.е. torvin/build/tmp/deploy/images/raspberrypi3/berserk-image-raspberrypi3.rpi-sdimg,
cам файл будет содержать достаточно длинное имя c датой создания и временем в UTC
например такое:
berserk-image-raspberrypi3-20170519214432.rootfs.rpi-sdimg
более подробно, команда описывается с следующей главе:
ПРЕДУПРЕЖДЕНИЕ:sudo bash cd torvin/build/tmp/deploy/images/raspberrypi3 dd if=berserk-image-raspberrypi3.rpi-sdimg of=/dev/sdX bs=1M sync
Для записи дистрибутива на карту памяти используется команда dd. Запуск команды dd выполняется от имени администратора, при этом необходимо указать входной файл if=имя_файла, далее устройство подключения карты памяти "microSDHC" of=имя_устройства, например /dev/sdX, где X может быть a,b,c и т.д. в зависимости от предыдущих подключенных дисковых разделов, и указать количество байт, которые будут записаны за раз bs=1M (например 1Мбайт)
Проще всего название устройства подключения карты памяти определить по выводу команды blkid
наберите команду sudo blkid до подключения карты памяти - "microSDHC"
и далее
наберите команду sudo blkid после подключения карты памяти - "microSDHC"
и тот новый раздел который появился в выводе последней команды и будет искомым
Отмонтируйте разделы карты памяти - "microSDHC" например так, если разделов несколько
umount /dev/sdX1 umount /dev/sdX2
В команде dd указывается имя диска целиком т.е. без номера раздела так как в образе содержатся таблицы двух разделов:
Для записи дистрибутива в архиве на карту памяти необходимо
вначале выполнить команду
gzip -dc имя_файла_архива
где ключ d означает распаковать архив
а ключ с означает результат распаковки направить в выходной поток
Перейдите в каталог содержащий архив дистрибутива (файл с расширением zip) и наберите команду:
ВНИМАНИЕ: все предыдущие данные на карте памяти "microSDHC"
после выполнения операции записи будут удалены.
sudo bash gzip -dc berserk-raspberrypi3-torvin-v0.2.1.rpi-sdimg.zip | dd of=/dev/sdX bs=1M sync
с сайта https://sourceforge.net/projects/win32diskimager
распакуйте zip дистрибутив в любую удобную для вас папку, например c:/projects
далее запустите приложение Win32 Disk Imager
Выберите Image File, c учетом того, что расширение нужно указать "*.*"
(иначе файл с дистрибутивом "berserk-raspberrypi3-torvin-v0.2.1.rpi-sdimg" вы не увидите)
Примечание: название файла на картинке может отличаться (в зависимости от версии)
Вставьте карту памяти microSDHC на которую вы хотите записать образ,
выберите устройство записи: Device
удостоверьтесь что вы выбрали именно карту памяти microSDHC на которую
планируете записать образ
Нажмите кнопку записи: Write
после этого вы получите предупреждение
что все данные на карте памяти будут перезаписаны
и далее нажмите на кнопку подтверждения, начнется процесс записи, после
окончания которого вы можете извлечь карту памяти, вставить ее в ваше
устройство Raspberry Pi и загрузить его.
Вы можете загрузить следующие версии образа дистрибутива:
Changelog Показать/Скрыть
v0.2.6 - 08/07/2018
- firmware 20180619
- support for WiFi module CYW43455 (Raspberry Pi 3B Plus)
v0.2.5 - 30/06/2018
- Linux Kernel 4.9.80
- Kodi 17.6 (Krypton)
- FFmpeg 3.1.11
- bcm2835-bootfiles 20180313-r3
- python package for addons Plex and Weather:
(python-xml python-misc python-db)
- Kodi addons pvr.iptvsimple 2.4.14
- Network Manager v0.2.5
- ntfs-3g v2017.3.23
Build
- Poky 2.4.1 (Rocko)
v0.2.4 - 28/04/2018
- add addons Kodi
(plugin.video.youtube, script.module.requests)
- python package
(ctypes lang re io netserver netclient html difflib zlib shell)
(sqlite3 urllib3 compression datetime crypt threading math email misc)
- add mount ext4 (udev rules)
- ntfs-3g-ntfsprogs v2013.1.13
- bs-net v0.1.3
v0.2.3 - 25/07/2017
- Network Manager v0.2.4
- Screensaver v0.1.2
- bs-net v0.1.2
v0.2.2 - 23/06/2017
- Separation of the assembly
in Kodi recipe, for boards:
Raspberry Pi and Raspberry Pi 2
v0.2.1 - 17/05/2017
- Linux Kernel 4.1.21
- Kodi 15.2
- bcm2835-bootfiles 20160622-r3
- Network Manager v0.2.3
- Screensaver v0.1.1
- Dosfstools 3.0.28
- FFmpeg 2.6
Build
- Poky 2.1.3 (Krogoth)
- version 0.2.x - codename "Torvin"
версия - v0.2.6 Torvin описание - Мультимедиа центр Kodi 17.6 на Raspberry Pi (собран в Yocto Project) aрхитектура - ARM платы - Raspberry Pi 3 Model "B+" (B Plus) - Raspberry Pi 3 Model "B" - Raspberry Pi 2 Model "B" дата - от 09.07.2018 MD5 - 16b3b2c2952f7ccf1a5c99b9d9e3fcaa (контрольная сумма MD5 zip архива) размер архива 316.8 Мбайт имя файла - berserk-raspberrypi3-torvin-v0.2.6.rpi-sdimg.zip
версия - v0.2.5 Torvin описание - Мультимедиа центр Kodi 17.6 на Raspberry Pi aрхитектура - ARM платы - Raspberry Pi 3 Model "B" - Raspberry Pi 2 Model "B" дата - от 01.07.2018 MD5 - 99c25e60674e2b3c8f6f56d58e433dff (контрольная сумма MD5 zip архива) размер архива 274.8 Мбайт имя файла - berserk-raspberrypi3-torvin-v0.2.5.rpi-sdimg.zip
версия - v0.2.4 Torvin описание - мультимедиа центр Kodi 15.2 на Raspberry Pi aрхитектура - ARM платы - Raspberry Pi 3 Model "B" - Raspberry Pi 2 Model "B" дата - от 28.04.2018 MD5 - 0f39bd2b9c6ae2c29e4f9c0128185791 (контрольная сумма MD5 zip архива) размер архива 229.3 Мбайт имя файла - berserk-raspberrypi3-torvin-v0.2.4.rpi-sdimg.zip
версия - v0.2.3 Torvin описание - мультимедиа центр Kodi 15.2 на Raspberry Pi aрхитектура - ARM платы - Raspberry Pi 3 Model "B" - Raspberry Pi 2 Model "B" дата - от 25.07.2017 MD5 - 5075aea63586034f5cf6072c5a23bcfa (контрольная сумма MD5 zip архива) размер архива 225.0 Мбайт имя файла - berserk-raspberrypi3-torvin-v0.2.3.rpi-sdimg.zip
версия - v0.2.1 Torvin описание - мультимедиа центр Kodi 15.2 на Raspberry Pi aрхитектура - Raspberry Pi 3 Model "B" - Raspberry Pi 2 Model "B" дата - от 19.05.2017 MD5 - b03d0ff3456a3c2fd4a3a24cf120753a (контрольная сумма MD5 zip архива) размер архива 225.0 Мбайт имя файла - berserk-raspberrypi3-torvin-v0.2.1.rpi-sdimg.zip
Описание дистрибутива вы можете посмотреть в статье
версия - v0.3.2.1 кодовое имя - Brand описание - Сборка Kodi 17.6 в связке с Chromium 67.0.3396.99 для платы Raspberry Pi 3B Plus (RPI 3B+) ( изменение по сравнению с v0.3.2: исправлен запуск Kodi плагинов "Yahoo! Weather" и "Plex" ) плата - Raspberry Pi 3 Model "B" Plus Raspberry Pi 3 Model "B" Raspberry Pi 2 Model "B" дата - от 20.06.2019 MD5 - fdf56a8ff606592e4032aa26c6595d89 (контрольная сумма MD5 zip архива) размер архива 376.7 Мбайт имя файла - berserk-raspberrypi3-brand-v0.3.2.1.rpi-sdimg.zip
версия - v0.3.2 кодовое имя - Brand описание - Сборка Kodi 17.6 в связке с Chromium 67.0.3396.99 для самой новой платы Raspberry Pi 3B Plus (RPI 3B+) плата - Raspberry Pi 3 Model "B" Plus Raspberry Pi 3 Model "B" Raspberry Pi 2 Model "B" дата - от 03.08.2018 MD5 - b177257c921c5b1875b9966c1593f76f (контрольная сумма MD5 zip архива) размер архива 376.3 Мбайт имя файла - berserk-raspberrypi3-brand-v0.3.2.rpi-sdimg.zip
версия - v0.3.1 кодовое имя - Brand описание - Сборка Kodi 17.6 в связке с Chromium 63.0.3239.132 плата - Raspberry Pi 3 Model "B" и Raspberry Pi 2 Model "B" дата - от 17.06.2018 MD5 - 7902adccc33a3cd95943b23486253433 (контрольная сумма MD5 zip архива) размер архива 370.7 Мбайт имя файла - berserk-raspberrypi3-brand-v0.3.1.rpi-sdimg.zip