Introduction au projet Yocto
Yocto Project est un projet Open Source collaboratif visant à simplifier le développement de distributions pour les systÚmes embarqués. Yocto contient un grand nombre de modÚles, de métadonnées et d'outils de construction. Dans Yocto Project, vous pouvez connecter un grand nombre de couches BSP (Platform Support Package) pour toutes sortes de plates-formes matérielles.
L'objectif principal de l'article est une tentative de montrer l'assemblage d'un package de distribution typique dans le projet Yocto en utilisant le célÚbre centre multimédia Kodi, version 17.6 pour un ordinateur Raspberry Pi 3B à carte unique à titre d'exemple.
Si, quelque part au fond de votre Ăąme, vous sentez que vous ĂȘtes un collectionneur, mais que vous n'avez pas encore dĂ©cidĂ© ce que vous souhaitez collecter, cet article est pour vous. Si vous utilisez dĂ©jĂ le projet Yocto dans votre travail quotidien, vous pouvez faire dĂ©filer cet article. Allez directement au dernier chapitre et prĂ©parez-vous.
L'article est purement pratique et démontre la possibilité d'utiliser les réalisations du projet Yocto et d'OpenEmbedded pour construire le centre multimédia "Kodi". Les couches Yocto sont gérées à l'aide de l'utilitaire Repo de Google. Un article dans le document cette série.
Alors: allons-y.
Contenu:
Installer Yocto Project sur Ubuntu
Moteur de construction de distribution dans le projet Yocto
Utilisation d' OpenEmbedded avec le projet Yocto
Package de support de plateforme (BSP)
Gérer les calques Yocto avec Repo
Installer Repo
Manifeste de création de distribution
Contenu du manifeste
Description du manifeste
Structure du manifeste
BSInitialisation des variables Poky
Initialisation du référentielSynchronisation de référentiel
Création d' une configuration de projet Yocto
Fichier de
configuration build / conf / local.conf
Fichier de
configuration build / conf / bblayers.conf
Couche pour assembler un centre multimédia
Structure de couche
Configuration de la couche
Composition de recettes-berserk
Composition des recettes-core
Composition des recettes-noyau
Recettes de
composition -Mediacentre
Composition de recettes-multimédia
Kodi Build
Recipe SupplementAjout d'un nouvel élément au menu des paramÚtres Kodi
ParamĂštres de mise
en mémoire tampon
maximum pour la vidéo
Regarder la télévision sur IPTV
Regarder Youtube avec le plugin Kodi
Extension de configuration réseau du shell de la
consoleRecette de construction de distribution
Un bref guide pour créer une image de distribution
PostscriptInstaller Yocto Project sur Ubuntu
Pour créer la distribution à l'aide du projet Yocto sur Ubuntu, vous devez installer les packages suivants:
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
Les packages sont installés à l'aide de la commande
apt-get install et de la
commande élévation de privilÚges
sudo . Dans le systÚme Ubuntu, c'est une pratique répandue lorsque la commande sudo est utilisée pour effectuer des actions administratives (lors de la création de l'utilisateur principal du systÚme, elle est automatiquement enregistrée dans le groupe «sudo»).
Vous pouvez voir des instructions d'installation plus détaillées
ici:Moteur de construction de distribution dans le projet Yocto
Dans le projet Yocto, chaque unité de programme est décrite à l'aide d'une recette d'assemblage. Le langage de description de recette ressemble à «bash» avec la possibilité d'insérer des morceaux de code dans le langage python. Vous pouvez obtenir des informations de syntaxe de base dans
le manuel du projet Yocto . Un ensemble de recettes d'assemblage, selon le but, peut ĂȘtre combinĂ© en couches d'assemblage distinctes.
Les couches sont divisées en couches dépendantes du matériel - couches BSP, couches UI (interface utilisateur), couches Yocto spécifiques, ainsi que des couches qui implémentent certaines fonctionnalités:
par exemple, couches d'OpenEmbedded => multimédia, python, perl, ruby, réseau, systemd, serveur Web, etc.
Utilisation d'OpenEmbedded avec le projet Yocto
Et pourtant, si vous utilisez le projet Yocto, vous aurez certainement besoin de couches avec des fonctionnalités supplémentaires, c'est-à -dire Un large éventail de recettes pour toutes les occasions. Et il existe un tel ensemble - ce sont des recettes d'OpenEmbedded. OpenEmbedded est une infrastructure de construction de packages pour Linux embarqué.
OpenEmbedded est entiĂšrement compatible avec le projet Yocto, car ce projet a Ă©tĂ© pris comme base pour le projet Yocto. C'est peut-ĂȘtre pour cela que le projet Yocto a une stabilitĂ© lĂ©gĂšrement meilleure, une meilleure documentation et un support lĂ©gĂšrement meilleur (mais en gros c'est toujours le mĂȘme OpenEmbedded).
Package de support de plateforme (BSP)
Le Board Support Package est une ou plusieurs couches distinctes et spécialisées pour une carte spécifique qui définit les caractéristiques matérielles de la plate-forme, c'est-à -dire implémente les éléments spécifiques qui distinguent une carte d'une autre: fonctionnalités du processeur, interruptions, adressage, fonctionnalités du chargeur de démarrage, fonctionnalités de l'adaptateur vidéo (GPU), etc.
Cet article utilise la couche BSP -
meta-raspberrypiLe référentiel de couches est situé à :
git.yoctoproject.org/git/meta-raspberrypiGérer les calques Yocto avec Repo
Yocto Project peut utiliser un grand nombre de couches de diffĂ©rents fournisseurs - dĂ©veloppeurs d'Ă©quipements, et tout cela doit ĂȘtre gĂ©rĂ© d'une maniĂšre ou d'une autre. Imaginez que vous ayez une douzaine de cartes diffĂ©rentes, et chaque carte est livrĂ©e avec un rĂ©fĂ©rentiel git BSP distinct, et cela ne compte pas l'infrastructure du projet Yocto lui-mĂȘme, ainsi que les fonctionnalitĂ©s supplĂ©mentaires possibles d'OpenEmbedded.
Dans cette situation, vous ne vous en sortirez pas avec un script d'installation simple séparé. Willy-nilly, doit chercher des outils qui peuvent bien le faire. Encore plus que bien. L'un des meilleurs outils de ce type est l'utilitaire Google - Repo.
Repo est le principal outil de gestion des référentiels GIT lors de la construction du systÚme d'exploitation Android avec sa grande base de code. Repo vous permet de gérer une douzaine, sinon une centaine de référentiels git séparés dans un projet, dont vous pouvez spécifier soigneusement les versions dans un fichier xml du
Manifesteet pour la synchronisation correcte de toutes les versions de tous les référentiels, il vous suffit d'exécuter une seule commande
synchronisation de repoInstaller Repo
En utilisant l'ensemble de commandes suivant, vous pouvez installer Repo dans votre répertoire personnel
~ / bin(la commande curl peut ĂȘtre installĂ©e sĂ©parĂ©ment: sudo apt-get install curl)
PATH=${PATH}:~/bin mkdir ~/bin curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo
et Ă l'avenir, vous aurez juste besoin d'utiliser la commande dans la console:
repoou alors
si le répertoire HOME / bin n'est pas ajouté automatiquement avec le chemin de démarrage standard
voir le fichier HOME / .profile
$
$ PATH = $ {PATH}: ~ / bin
$ repo
$
Manifeste de création de distribution
La distribution recueillie dans le cadre de l'article, je dois l'appeler quelque chose. Que ce soit le nom
Torvin . Nom de code Torvin, il contiendra une distribution Linux minimaliste avec l'assemblage d'un seul programme. Cela fait référence à un programme utilisateur d'application - Kodi, et rien de plus (tout le reste est un niveau systÚme). Pour un centre multimédia, à mon avis, cela suffit.
Contenu du manifeste
Le fichier
torvin-0.2.5.xml est utilisé pour gérer les couches de distribution
. <?xml version="1.0" encoding="UTF-8"?> <manifest> <default sync-j="4" revision="rocko"/> <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/rocko"/> </project> <project remote="yocto" revision="rocko" name="poky" path="sources/poky"/> <project remote="oe" revision="rocko" name="meta-openembedded" \ path="sources/meta-openembedded"/> <project remote="yocto" revision="rocko" name="meta-raspberrypi" \ path="sources/meta-raspberrypi"/> <project remote="bs" revision="rocko" name="berserk" path="sources/berserk"/> </manifest>
Description du manifeste
Au début du manifeste,
les balises
distantes désignent deux référentiels GIT principaux et un auxiliaire:
https: ââgit.yoctoproject.org / git - DĂ©pĂŽt Yocto nommĂ©
yoctohttps: ââgithub.com / openembedded - RĂ©fĂ©rentiel OpenEmbedded nommĂ©
oehttps: ââgithub.com / berserktv - rĂ©fĂ©rentiel GIT auxiliaire nommĂ©
bsDans la partie suivante du manifeste, en utilisant une dénomination abrégée, nous travaillons avec des projets situés dans ces référentiels, la balise de
projet contient les attributs suivants:
remote - le nom du référentiel nommé distant
revision - le nom de la version de branche ou de hachage
name - nom du projet dans le référentiel spécifié
path - le chemin du projet local dans votre systĂšme de fichiers
<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
Dans le corps de la balise de
projet , j'ai indiqué des commandes pour créer des liens symboliques vers l'infrastructure de scripts auxiliaires d'initialisation initiale et de démarrage régulier du systÚme de construction
Poky dont j'ai
besoin 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/rocko"> </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/rocko base
Structure du manifeste BS
âââ COPYING.MIT
âââ framboise
â âââ rocko
â â âââ conf
â â â âââ bblayers.conf
â â â âââ local.conf
â â âââ torvin-0.2.5.xml
â âââ shell.sh
âââ README.md
âââ environnement de configuration
Le projet
bs-manifest est utilisé pour une gestion de configuration flexible, en tenant compte des assemblages de différentes versions de la distribution. J'ai cette version - 0.2.5
Initialisation des variables Poky
L'
environnement de configuration du script d'initialisation est issu du projet Freescale Community (dans l'environnement yocto, c'est une solution courante). Le script est responsable de l'initialisation des variables du systÚme de construction Poky, le script crée une structure de répertoire dans laquelle il est trÚs bien divisé:
- build - répertoire de construction
- source - code source des recettes d'assemblage
- download - répertoire pour télécharger le code du programme (bases de données git, archives tar.gz)
Le contenu du script setup-environment peut ĂȘtre consultĂ©
ici:Contenu du script Shell.sh Ce script racine sert à initialiser les variables de configuration de l'environnement de génération et est généralement appelé au début d'une session.
Initialisation du référentiel
Pour initialiser le dépÎt, vous devez exécuter la commande:
mkdir torvin cd torvin repo init -u https:ââgithub.com/berserktv/bs-manifest -m raspberry/rocko/torvin-0.2.5.xml
oĂč
-u https: ââgithub.com / berserktv / bs-manifest indique Ă GIT le chemin vers le projet de manifeste
remarque: vous pouvez également spécifier
-b nom_arbre(si vous ne spécifiez pas le commutateur -b, la branche principale est supposée (par défaut))
oĂč le chemin
-m framboise / rocko / torvin-0.2.5.xml vers le fichier de configuration indique ce qui suit:
- Le nom de la plate-forme matérielle pour laquelle l'assemblage est effectué - framboise
- Le nom de la principale branche de travail Yocto / OpenEmbedded est rocko
- Le nom de code de la version est torvin (toutes les versions de la série 0.2.x)
- Le numéro de version numérique en cours d'assemblage est 0,2,5
Synchronisation de référentiel
pour démarrer ou synchroniser ultérieurement, il suffit d'exécuter la commande:
repo sync
qui rĂ©cupĂ©rera toutes les derniĂšres versions des projets GIT spĂ©cifiĂ©es dans le fichier manifeste (les branches sont gĂ©nĂ©ralement indiquĂ©es), si vous avez un commit de hachage ou un nom de balise dans l'attribut de rĂ©vision, la version de ce rĂ©fĂ©rentiel git ne changera pas. Le nom de la balise peut ĂȘtre spĂ©cifiĂ© comme ceci: revision = "refs / tags / v0.2.5"
Création d'une configuration de projet Yocto
Une fois la commande repo sync exécutée, vous pouvez commencer à créer la configuration principale du projet Yocto:
./shell.sh
une fois le script terminé, le répertoire
build / conf sera créé:
avec deux fichiers principaux:
- local.conf - Variables de contrĂŽle d'assemblage:
nom de la plateforme, type de packages de distribution et de build, etc. - bblayers.conf - configuration des couches connectées du projet Yocto
par défaut, le script setup-environment recherche les
sources / base / confconfiguration initiale et si les
fichiers local.conf et
bblayers.confexistent, ils sont copiés dans
build / conf(voir la variable TEMPLATES dans setup-environment)
c'est-Ă -dire les fichiers proviennent de sources / bs-manifest / raspberry / rocko / conf
voir créer un lien symbolique vers la base
Fichier de configuration build / conf / local.conf
Afficher / masquer 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/"
Fichier de configuration build / conf / bblayers.conf
les principales variables du fichier local.conf - auxquelles vous devez faire attention:
- MACHINE - le nom de la plate-forme sous laquelle l'assemblage est effectué
- DISTRO - nom de la catégorie de distribution
- PACKAGE_CLASSES - format de package pour l'installation du logiciel
- LICENSE_FLAGS_WHITELIST - utilisation de licences supplémentaires
paramÚtres spécifiques pour la famille de cartes Raspberry Pi
- GPU_MEM = "128" - la quantité de mémoire vidéo pour l'adaptateur vidéo GPU (allouée à partir de la RAM)
- GPU_MEM_256 = "112" - le mĂȘme que pour les cartes avec une taille totale de RAM = 256 Mo
- GPU_MEM_512 = "160" - le mĂȘme que pour les cartes avec une taille totale de RAM = 512 Mo
- GPU_MEM_1024 = "320" - il en va de mĂȘme pour les cartes avec une taille totale de RAM = 1024 Mo
note:
par exemple, si vous ne laissez que la variable GPU_MEM = "128",
puis pour toutes les cartes RPI, RPI2, RPI3
quelle que soit la quantité de RAM réelle
sur la carte sera toujours alloué pour le GPU - 128 Mo
(et la taille totale de la RAM diminue de cette valeur)
si toutes les variables sont spécifiées, les directives GPU_MEM_256, GPU_MEM_512, GPU_MEM_1024 sont plus prioritaires.
Pour l'assemblage du Multimedia Center, en plus des couches Yocto réguliÚres, voir le fichier bblayers.conf
${BSPDIR}/sources/poky/meta \ ${BSPDIR}/sources/poky/meta-poky \ ${BSPDIR}/sources/poky/meta-yocto-bsp \
J'ai connecté quatre couches avec des fonctionnalités supplémentaires d'OpenEmbedded.
Kodi Multimedia Center - est un programme complexe qui utilise un grand nombre de bibliothÚques externes et vous devez créer chaque bibliothÚque en utilisant la recette de construction, donc si possible j'utiliserai toutes les recettes d'OpenEmbedded dans la catégorie
MultimédiaDonc, j'ai une couche multimédia connectée et les couches dont elle dépend
${BSPDIR}/sources/meta-openembedded/meta-oe \ ${BSPDIR}/sources/meta-openembedded/meta-python \ ${BSPDIR}/sources/meta-openembedded/meta-networking \ ${BSPDIR}/sources/meta-openembedded/meta-multimedia \
puis une autre couche OpenEmbedded est connectée pour fonctionner avec les systÚmes de fichiers
${BSPDIR}/sources/meta-openembedded/meta-filesystems \
en outre connecté la couche BSP principale de la plate-forme Raspberry Pi
${BSPDIR}/sources/meta-raspberrypi \
Eh bien, à la toute fin, une couche supplémentaire est connectée, qui est chargée d'assembler l'image de distribution avec les fonctionnalités du "Multimedia Center"
${BSPDIR}/sources/berserk/meta-berserk \
Couche pour assembler un centre multimédia
à mon avis, le projet Yocto est une combinaison industrielle pour créer des distributions intégrées. Mais si vous avez déjà travaillé avec le systÚme de construction Buildroot, alors Yocto peut vous sembler lourd. Il utilise une énorme quantité d'espace libre sur le disque dur. Pour un fonctionnement normal, Yocto nécessite environ 80 à 100 Go d'espace libre, et cela ne prend généralement en compte l'assemblage que pour une seule plate-forme.
Yocto fait face à son objectif principal - prendre en charge autant de plates-formes matérielles différentes que possible, et cela nécessite le mécanisme le plus flexible pour commuter les assemblages. Et ce mécanisme a besoin de temps et de lieu. Construire une distribution dans Yocto n'est pas un processus rapide.
Donc, toutes les fonctionnalités d'assemblage du "Multimedia Center" que j'ai avec une couche séparée:
https://github/berserktv/berserk
(Titre tiré de mon livre préféré, The Hammer and the Cross, de Harry Harrison.)
(Torvin est également un personnage de ce livre.)
Pour créer les fonctionnalités dont j'ai besoin, j'utiliserai les soi-disant modules complémentaires pour les recettes, qui se trouvent dans des fichiers avec l'extension .bbappend
dans le fichier .bbappend, vous pouvez ajouter vos propres appels de commande pour la méthode de recette de génération standard, par exemple, à la méthode do_configure, do_compile, do_install, etc.
Structure de couche
âââ COPYING.MIT
âââ meta-berserk
â âââ conf
â â âââ layer.conf
â âââ recettes-berserk
â â âââ bs-net
â â âââ premiĂšre manche
â â âââ images
â â âââ tv
â âââ recettes-core
â â âââ init-ifupdown
â â âââ psplash
â âââ noyau de recettes
â â âââ linux
â âââ recettes-mediacentre
â â âââ kodi
â â âââ plugins kodi
â âââ recettes-multimĂ©dia
â âââ ffmpeg
âââ README.md
âââ changelog.txt
Composition de couche:
- conf - configuration des couches
- recipes-berserk - recette de construction de distribution, tv, réseau et premiÚres recettes de lancement
- recipes-core - recettes de base, en particulier une modification de la recette de démarrage
- recipes-kernel - Recettes de construction de noyau Linux
- recipes-mediacentre - recettes pour construire Kodi et ses plugins
- recipes-multimedia - recettes multimédias, assemblage ffmpeg
configuration des couches
inclut le fichier layer.conf Le fichier contient une indication de la version de la bibliothÚque ffmpeg, le numéro de version du noyau linux, ainsi que le nombre de consoles virtuelles (tty), et inclut les fonctionnalités du kit de distribution - wifi x11
DISTRO_FEATURES_append + = "wifi x11"
PREFERRED_VERSION_ffmpeg = "3.1.11"
SYSVINIT_ENABLED_GETTYS = "1"
PREFERRED_VERSION_linux-raspberrypi? = "4.9%"
composition de recettes-berserk
âââ bs-net
â âââ bs-net_0.1.3.bb
âââ premiĂšre manche
â âââ fichiers
â â âââ first-run.sh
â âââ first-run.bb
âââ images
â âââ berserk-image.bb
âââ tv
âââ fichiers
â âââ berserk.m3u8
âââ tv-config.bb
âââ tv-dir.inc
oĂč:
- bs-net_0.1.3.bb - recette pour la construction d'extensions shell pour les interfaces WLAN / Ethernet
- first-run.bb - recette pour la premiÚre exécution, partitionnement de disque supplémentaire
- first-run.sh - script shell de la premiÚre exécution (exécution au niveau d'exécution S)
- berserk-image.bb - recette pour construire l'image de distribution
- tv-config.bb - recette pour configurer les chaßnes de télévision en utilisant IPTV
- berserk.m3u8 - configuration des chaßnes de télévision publiques (format m3u8)
recettes-composition de base
âââ init-ifupdown
â âââ fichiers
â â âââ interfaces
â âââ init-ifupdown_1.0.bbappend
âââ psplash
âââ fichiers
â âââ psplash-berserk-img.h
âââ psplash_git.bbappend
oĂč:
- interfaces - fichier avec le paramÚtre réseau actuel
- init-ifupdown_1.0.bbappend - extension pour la recette de configuration du réseau
- psplash-berserk-img.h - image de l'économiseur d'écran de démarrage
fichier d'en-tĂȘte obtenu Ă l'aide de l'utilitaire gdk-pixbuf-csource - psplash_git.bbappend - extension de la recette pour dĂ©marrer l'Ă©conomiseur d'Ă©cran de dĂ©marrage
La configuration réseau sur le périphérique cible se trouve dans le fichier:
/etc/network/interfaces
AprÚs avoir ajouté l'extension de la recette init-ifupdown, je remplace le fichier de configuration normal par le mien et change l'ordre (priorité) du script exécuté pour les niveaux d'exécution
INITSCRIPT_PARAMS = "start 98 2 3 4 5 . stop 10 0 6 1 ."
à l'heure actuelle, presque toutes les distributions Linux modernes incluent un écran de démarrage. En rÚgle générale, l'économiseur d'écran de démarrage affiche l'état actuel du téléchargement, c'est-à -dire indicateur du temps écoulé depuis le démarrage du systÚme. à cet égard, Yocto ne fait pas exception et vous pouvez changer l'image de l'économiseur d'écran de démarrage standard en une image arbitraire.
Pour ce faire, vous devez:
- FILESEXTRAPATHS_prepend - ajoute un répertoire pour les ressources
- SRC_URI - ajouter un fichier d'en-tĂȘte avec une image arbitraire
- SPLASH_IMAGES - modifier la variable de contrĂŽle du package
et plus loin dans la recette d'image "berserk-image.bb", il est nécessaire d'ajouter l'image de démarrage de démarrage comme caractéristiques de l'image
IMAGE_FEATURES += "splash"
composition de recettes-noyau
âââ linux
âââ fichiers
â âââ db.txt.patch
â âââ rbpi.cfg
âââ linux-raspberrypi_4.9.bbappend
oĂč:
- db.txt.patch - correctif avec la base du domaine réglementaire (utilisé pour le WiFi)
- rbpi.cfg - Fragment de configuration du noyau Linux
- linux-raspberrypi_4.9.bbappend - extension de la recette de construction du noyau 4.9 pour Raspberry Pi
Les appareils Wi-Fi fonctionnent à certaines fréquences et pour eux, il existe un domaine réglementaire - c'est le paramÚtre qui indique le pays dans lequel cet appareil est censé fonctionner.
Le noyau Linux possÚde une base de données complémentaire dans laquelle les fréquences autorisées et la puissance autorisée pour celles-ci sont enregistrées pour chaque pays.
Dans le cas le plus simple, cette base de donnĂ©es peut ĂȘtre directement incluse statiquement dans le noyau en spĂ©cifiant un paramĂštre:
CONFIG_CFG80211_INTERNAL_REGDB = yc'est
exactement ce que j'ai fait en connectant un patch à cette base de données
db.txt.patchEt encore une chose: dans Yocto, il existe des fragments de configurations de noyau. Habituellement, un fragment de configuration, un fichier avec l'extension cfg, contient uniquement les paramÚtres du noyau dont vous avez clairement besoin à certaines fins. Et ce morceau de configuration est ajouté aux paramÚtres par défaut qui sont déjà présents dans la recette lors de la construction du noyau.
En plus de la recette bbappend, vous pouvez également modifier les paramÚtres qui sont passés au noyau lors du démarrage:
c'est-Ă -dire remplacer la variable
CMDLINE voir fichier linux-raspberrypi_4.9.bbappend
Contenu rbpi.cfg # 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
linux-raspberrypi_4.9.bbappend recipes-mediacentre
âââ kodi â âââ kodi â âââ kodi_17.bbappend â âââ kodi-dir.inc â âââ kodi-runner.bb â âââ kodi-settings.bb â âââ kodi-version.inc âââ kodi-plugins âââ files âââ kodi-language-ru_3.0.10.bb âââ kodi-pvr-iptvsimple.bb âââ plugin-video-youtube_5.5.1.bb âââ screensaver-kodi-universe_0.1.2.bb âââ script-berserk-network_0.2.5.bb âââ script-module-requests_2.12.4.bb
oĂč:
- kodi/
- kodi â icon,run,settings
- kodi_17.bbappend â Kodi
- kodi-dir.inc â Kodi
- kodi-runner.bb â Kodi
- kodi-settings.bb â Kodi
- kodi-version.inc â Kodi
- kodi-plugins/
- files â tar.gz
- kodi-language-ru_3.0.10.bb â ( Kodi)
- kodi-pvr-iptvsimple.bb â Kodi pvr-iptvsimple
- plugin-video-youtube_5.5.1.bb â Kodi «Youtube»
- screensaver-kodi-universe_0.1.2.bb â screensaver-kodi-universe
- script-berserk-network_0.2.5.bb â
- script-module-requests_2.12.4.bb â Youtube
recipes-multimedia
âââ ffmpeg
âââ ffmpeg
â âââ 0001-ffmpeg-Call-get_format-to-fix-an-issue-with-MMAL-ren.patch
â âââ h264_parser.patch
â âââ pfcd_hevc_optimisations.patch
âââ ffmpeg_3.1.11.bb
oĂč:
- 0001-ffmpeg-Call-get_format-to-fix-an-issue-with-MMAL-ren.patch â ffmpeg
- h264_parser.patch â h264
- pfcd_hevc_optimisations.patch â Raspberry Pi
- ffmpeg_3.1.11.bb â ffmpeg (, )
FFmpeg - bibliothÚque OpenSource pour l'encodage / décodage d'un grand nombre de formats vidéo et audio. FFmpeg prend en charge prÚs de 400 codecs (ffmpeg -codecs)et plus de 300 formats (ffmpeg-formats).Ajout d'une recette de construction Kodi
La couche OpenEmbedded a une recette rĂ©guliĂšre pour construire Kodi, mais elle est assez gĂ©nĂ©rale, et j'aimerais obtenir une version lĂ©gĂšrement plus stable et testĂ©e pour la plate-forme Raspberry Pi.Les dĂ©veloppeurs de logiciels ont un patch de port inversĂ©. Le logiciel est constamment mis Ă jour et chaque nouvelle version comprend Ă la fois de nouvelles fonctionnalitĂ©s et la correction d'erreurs connues. Le patch de portage inverse vous permet de transfĂ©rer certaines des modifications de la nouvelle version du programme vers une ancienne, la rendant ainsi plus stable. Mais c'est un travail trĂšs dur et laborieux, qui est toujours effectuĂ© par un grand nombre de dĂ©veloppeurs.Dans le monde de la communautĂ© OpenSource, il existe plusieurs projets bien connus utilisant Kodi, dont le meilleur (Ă mon avis) est LibreElec (OpenElec). LibreElec a une bonne version pour la plate-forme Raspberry Pi. Ici, ils l'ont et il est prĂ©fĂ©rable de prendre le patch de port inverse pour Kodi. Ainsi, vous pouvez vous dĂ©barrasser d'un grand nombre de problĂšmes sans mĂȘme en avoir connaissance.Le centre multimĂ©dia Kodi se concentre sur la lecture du contexte «Media», et Ă mon avis, la composante la plus critique est la combinaison de Kodi et FFmpeg, c'est-Ă -dire l'interaction de certaines versions de ces programmes, d'autres bibliothĂšques peuvent ĂȘtre laissĂ©es Ă partir des couches Yocto et OpenEmbedded.Pour l'assemblage, j'ai pris la version stable de Kodi 17.6 et la version FFmpeg 3.1.11Remarque: , , systemD. ( ( )). , LibreElec :
Le fichier de description de version inclus sera tel kodi-version.inc FILESEXTRAPATHS_prepend := "${THISDIR}/kodi:"
La branche Yocto et OpenEmbedded que je considĂšre - rocko , contient Kodi version 17.3, et pour passer Ă la version 17.6, il suffit d'ajouter un petit ajout Ă la recette - kodi_17.bbappend require kodi-version.inc
L'option de construction "--enable-Optical-Drive" vous permet de connecter le mécanisme de notification pratique que Kodi utilise lors de la connexion d'un disque optique. Dans ce cas, le module MediaManager (a) (xbmc / storage / MediaManager.cpp) surveille la connexion / déconnexion des nouvelles partitions de disque et affiche un message contextuel à ce sujet.Exemple udev de connexion / déconnexion de disques: ACTION=="add" SUBSYSTEM=="block" ENV{ID_FS_TYPE}=="vfat" \ KERNEL=="sd[az][0-9]" \ RUN+="/bin/mkdir -p /media/%k", \ RUN+="/bin/mount -o iocharset=utf8,noatime /dev/%k /media/%k" ACTION=="add" SUBSYSTEM=="block" ENV{ID_FS_TYPE}=="ntfs" \ KERNEL=="sd[az][0-9]" \ RUN+="/bin/mkdir -p /media/%k", \ RUN+="/usr/bin/ntfs-3g -o \ iocharset=utf8,noatime,windows_names /dev/%k /media/%k" ACTION=="add" SUBSYSTEM=="block" ENV{ID_FS_TYPE}=="ext2|ext3|ext4" \ KERNEL=="sd[az][0-9]" \ RUN+="/bin/mkdir -p /media/%k", \ RUN+="/bin/mount -o noatime /dev/%k /media/%k" ACTION=="remove" SUBSYSTEM=="block" KERNEL=="sd[az][0-9]" \ RUN+="/bin/umount /media/%k", RUN+="/bin/rmdir /media/%k"
: rmdir , ( Linux - ) .
Ajout d'un nouvel élément au menu des paramÚtres Kodi
Dans Kodi 17.6, les fichiers de configuration xml sont responsables de l'affichage des Ă©lĂ©ments de menu. Pour ajouter un Ă©lĂ©ment supplĂ©mentaire dans le menu "ParamĂštres", ajustez simplement le fichier:kodi / addons / skin.estuary / xml / Settings.xmloĂč skin.estuary est le thĂšme de conception de menu par dĂ©faut, ladescription de l'Ă©lĂ©ment ressemble Ă ceci:<item>
<label> $ LOCALIZE [13279] </label>
<onclick> RunAddon (script.berserk.network, butnetwork) </onclick>
<icon> icĂŽnes / paramĂštres / bs-network.png </icon>
</item>
oĂč:
étiquette - nom de l'élément de menuonclick - gestion de l'événement en appuyant sur le bouton de menu(lancement du plug-in, avec le premier argument passant la chaßne "butnetwork")icÎne - icÎne de l'élément de menu (chemin vers l'image png)La fonctionnalité ci-dessus, ainsi que la connexion de plusieurs plug-ins Kodi supplémentaires, est intégrée à en utilisant le fichier bs-menu.patchAfficher / masquer diff -Naur a/addons/skin.estuary/xml/Settings.xml b/addons/skin.estuary/xml/Settings.xml --- a/addons/skin.estuary/xml/Settings.xml 2018-02-01 18:17:45.000000000 +0300 +++ b/addons/skin.estuary/xml/Settings.xml 2018-03-08 12:06:50.000000000 +0300 @@ -134,6 +134,11 @@ <icon>icons/settings/interface.png</icon> </item> <item> + <label>$LOCALIZE[13279]</label> + <onclick>RunAddon(script.berserk.network,butnetwork)</onclick> + <icon>icons/settings/bs-network.png</icon> + </item> + <item> <label>$LOCALIZE[20077]</label> <onclick>ActivateWindow(SkinSettings)</onclick> <icon>icons/settings/skin.png</icon> diff -Naur a/system/addon-manifest.xml b/system/addon-manifest.xml --- a/system/addon-manifest.xml 2018-03-07 15:58:24.000000000 +0300 +++ b/system/addon-manifest.xml 2018-05-14 14:06:58.000000000 +0300 @@ -27,6 +27,7 @@ <addon>resource.uisounds.kodi</addon> <addon>screensaver.xbmc.builtin.black</addon> <addon>screensaver.xbmc.builtin.dim</addon> + <addon>screensaver.kodi.universe</addon> <addon>script.module.pil</addon> <addon>service.xbmc.versioncheck</addon> <addon>skin.estuary</addon> @@ -43,4 +44,8 @@ <addon>xbmc.python</addon> <addon>xbmc.webinterface</addon> <addon optional="true">peripheral.joystick</addon> + <addon>script.berserk.network</addon> + <addon>resource.language.ru_ru</addon> + <addon>script.module.requests</addon> + <addon>plugin.video.youtube</addon> </addons>
ParamÚtres de mise en mémoire tampon maximum pour la vidéo
Dans Kodi Multimedia Center, pour maximiser les performances, vous pouvez spécifier les paramÚtres de mise en mémoire tampon maximum: <advancedsettings> <cache> <buffermode>1</buffermode> <memorysize>139460608</memorysize> <readfactor>20</readfactor> </cache> </advancedsettings>
buffermode = 1- demandes de tampon pour tous les systÚmes de fichiers (y compris lereadfactor local)- ajuste la vitesse de téléchargement en fonction du débit binaire vidéo moyen. Ainsi, par exemple, si vous lisez une vidéo avec un taux de transfert de données moyen de 5 Mbit / s et définissez le taux de lecture du tampon sur 2,0, cela limitera la vitesse de téléchargement (et donc le taux de remplissage du cache) à environ 10 Mbit / s, donc:readfactor = 20supprime la restriction sur la vitesse de téléchargementmemorysize = 139460608- la taille du tampon est de 133 Mo, tout en utilisant 133 * 3 RAM, c'est-à -dire environ 400 Mo de RAMRegarder la télévision sur IPTV
Kodi Media Center est un outil trĂšs puissant pour visualiser le contenu numĂ©rique.La fonction principale pour laquelle j'ai collectĂ© "Media Center" est la fonction de regarder la tĂ©lĂ©vision numĂ©rique en utilisant IPTV (Internet Protocol Television) ie tĂ©lĂ©vision sur le protocole Internet. Avec cette fonction, vous pouvez regarder la tĂ©lĂ©vision numĂ©rique depuis votre fournisseur Internet.C'est l'option la plus moderne et optimale Ă la fois en termes de qualitĂ© d'image et en termes de fonctionnalitĂ©s supplĂ©mentaires, c'est-Ă -dire services fournis. Par exemple, des chaĂźnes de tĂ©lĂ©vision peuvent ĂȘtre fournies dans l'archive, dans laquelle l'enregistrement vidĂ©o souhaitĂ© est disponible pendant un certain temps aprĂšs la diffusion.Pour prendre en charge IPTV dans Kodi, il existe plusieurs options de plugin, dont je me suis installĂ© sur le pluginpvr.iptvsimplePour construire le plugin, utilisez la recette: âââ plugins kodi
âââ kodi-pvr-iptvsimple.bb
Le plug-in est connecté / configuré via:Menu principal Kodi => «Modules complémentaires» => «Mes modules complémentaires» => «Clients PVR» => «PVR IPTV Simple Client»Pour vérifier le fonctionnement de la télévision IPTV dans le cadre de Kodi, j'ai pris plusieurs chaßnes d'actualités publiques et les a ajoutés à la liste au format m3u8, et ont également activé le lancement automatique du plugin «pvr.iptvsimple» au début du media center.Regarder Youtube avec le plugin Kodi
Les programmeurs qui ont développé Kodi ont fourni la flexibilité nécessaire pour étendre ses fonctions. Ceci est fait pour que tout passionné, s'il le souhaite, puisse ajouter à Kodi ce dont il a vraiment besoin. Et ces plugins pour Kodi sont l'obscurité. Eh bien, vous obtenez le point.
Il y en a tellement qu'ils méritent une description dans un article séparé.Les plugins sont installés trÚs simplement, connectez simplement Kodi à Internet et appuyez sur quelques boutons dans le menu. Vous pouvez le lire sur l'un des forums dédiés à Kodi. Mais l'assemblage, il y a l'assemblage, et je vais inclure un autre plugin dans le kit de distribution comme exemple.Le plugin (ohm) le plus intéressant et le plus répandu pour Kodi est à mon avis le plugin de vue Youtube. Kodi est un centre multimédia, et Youtube est le plus grand référentiel de ce contenu trÚs multimédia, donc le plug-in Youtube pour Kodi est presque obligatoire.Le plugin est écrit en python, et c'est un mécanisme de plug-in normal, vous n'avez pas besoin de compiler quoi que ce soit, copiez simplement le plug-in terminé dans le répertoire racine avec les plug-ins et spécifiez le nom du plug-in dans le fichier manifeste xml:"System / addon-manifest.xml"Le plugin provient du dépÎt officiel, et son code source est inclus dans l'archive:recipes-mediacentre / kodi-plugins / files / plugin.video.youtube.tar.gz Voir l'emplacement de la recette d'assemblage du plugin dans chapitre "recettes-composition du mediacentre"Extension de configuration réseau du shell de la console
Ătant donnĂ© que le kit de distribution collectĂ© dans le cadre de cet article est une dĂ©mo, les exigences de configuration des «Interfaces rĂ©seau» sont minimales. Je ne voulais pas faire glisser de gestionnaire de rĂ©seau lourd pour cela, ce qui Ă©tait trĂšs incomprĂ©hensible pour moi et trĂšs lourd, et j'ai donc Ă©crit deux scripts shell qui complĂštent la configuration du mĂ©canisme de configuration normal:
Pour configurer facilement les interfaces rĂ©seau Ethernet / WLAN via l'interface graphique, j'utilise un autre petit plugin Kodi "script.berserk.network". C'est presque le seul plugin Kodi que j'ai compris, mais pour cela, j'ai dĂ» l'Ă©crire. Il est extrĂȘmement compact et minimaliste et est Ă©crit en langage python.Ces deux composants sont collectĂ©s Ă l'aide de recettes:- recipes-berserk / bs-net / bs-net_0.1.3.bb
- recipes-mediacentre / kodi-plugins / script-berserk-network_0.2.5.bb
à ce stade, je voudrais m'attarder sur les détails. Ainsi, toute la flexibilité d'utilisation de Yocto réside dans différents ensembles de recettes, c'est-à -dire connecté un ensemble de recettes - le gestionnaire de réseau le plus simple a été ajouté au kit de distribution, connecté un autre ensemble - ajouté votre gestionnaire de réseau préféré en utilisant par exemple systemD, etc.Pour me connecter automatiquement à un point d'accÚs WiFi au démarrage du systÚme, j'utilise la rÚgle 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"
Le script wlan-runner exécute simplement les commandes:/ etc / network / wlan $ IFACE upou
/ etc / network / wlan $ IFACE downRecette de construction de distribution
Le projet Yocto dispose d'un mĂ©canisme de rĂ©utilisation. Il existe des classes dont vous pouvez hĂ©riter (directive "hĂ©riter"), et il existe des recettes de base que vous pouvez connecter (directive "inclure").Je montrerai l'hĂ©ritage en utilisant l'exemple de classe:poky / meta / clasess / core-image.bbclassLa classe est chargĂ©e de dĂ©crire les groupes de packages que vous pouvez inclure dans une recette particuliĂšre. Pour ce faire, il suffit d'indiquer la construction au dĂ©but de la recette:hĂ©riter core-imageMĂȘme dans le texte de cette classe, vous pouvez voir les fonctionnalitĂ©s de l'image, chaque fonctionnalitĂ© est responsable d'un groupe de fonctions incluses dans l'image, et chaque groupe dĂ©crit finalement un ensemble de programmes ou de bibliothĂšques installĂ©s.Les caractĂ©ristiques de l'image sont indiquĂ©es comme suit: IMAGE_FEATURES += "ssh-server-dropbear splash"
Il existe Ă©galement DISTRO_FEATURES - fonctionnalitĂ©s de distribution qui peuvent ĂȘtre spĂ©cifiĂ©es dans le fichier de configuration de couche. Ce sont des fonctions au niveau de la distribution, et si par exemple vous modifiez une fonctionnalitĂ© (par exemple x11), l'assembly suivant commencera Ă rĂ©assembler tous les packages qui dĂ©pendent de cette option (cela peut prendre un certain temps).La recette de base de base que j'utilise:poky / meta / recipes-core / images / core-image-minimal.bbrecette de construction d'image Je voudrais prĂ©ciser que, par exemple , le package kernel-modules installeratous les modules du noyau spĂ©cifiĂ©s dans le fichier defconfig dans l'image de distribution.Mais si vous personnalisez fortement quelque chose, alors bien sĂ»r, vous n'aurez peut-ĂȘtre mĂȘme pas besoin de tous les modules du noyau, auquel cas il est pratique d'ajouter chaque module par son nom, comme indiquĂ© dans la variable BS_WLAN , c'est comme une feuille de triche, spĂ©cifiez uniquement ce dont vous avez besoin et aprĂšs avoir vĂ©rifiĂ© le package "Kernel-modules" supprimer, vĂ©rifier, etc.Un bref guide pour crĂ©er une image de distribution
1) Installez les dépendances du projet Yocto dans Ubuntu: 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
2) Téléchargez et installez Repo: mkdir ~/bin curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo
3) Téléchargez le projet depuis github: PATH=${PATH}:~/bin mkdir torvin cd torvin repo init -u https://github.com/berserktv/bs-manifest \ -m raspberry/rocko/torvin-0.2.5.xml repo sync
4) Construisez le projet: ./shell.sh bitbake berserk-image
5) Ăcrivez l'image de distribution sur la carte mĂ©moire:
torvin/build/tmp/deploy/images/raspberrypi3
:
berserk-image-raspberrypi3.rpi-sdimg
c
c UTC
dd
:
«microSDHC»
.
$ sudo bash
$ cd torvin/build/tmp/deploy/images/raspberrypi3
$ dd if=berserk-image-raspberrypi3.rpi-sdimg of=/dev/sdX bs=1M
$ sync
/dev/sdX:
X a,b,c ..
:
Windows,
Win32 Disk Imager :
:
Remarque: N , "" , git (.. "") : - Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz - 8 - USB-3.0 1T - 4 05 - 1 - 274.8 M torvin/build (cache , , , , , ..) - 42 torvin/downloads - 9.1 (git tar.gz ) rootfs - 550 /lib/firmware - 212 /lib/modules - 53 : firmware ( ) , 200
Postscript
Les capacitĂ©s d'OpenSource ces derniĂšres annĂ©es ne font qu'augmenter.Mais ces opportunitĂ©s ne sont pas petites, pour des exemples vous n'avez mĂȘme pas besoin d'aller loin. Il est peu probable que le mĂȘme "Microsoft" s'attendait Ă ce que la technologie OpenSource la rejette du marchĂ© des systĂšmes d'exploitation mobiles. Je veux dire l'OS de Google - "Android", qui a jetĂ© du jour au lendemain le "Pionnier" des systĂšmes mobiles. Et il n'est pas clair si Microsoft pourra y revenir Ă nouveau.Bien sĂ»r, "Google", une Ă©norme sociĂ©tĂ© avec des finances presque illimitĂ©es et d'excellents dĂ©veloppeurs, mais toujours, comme on dit "sans le Core et pas ici et lĂ ".Les meilleurs projets OpenSource au fil du temps deviennent une Ćuvre d'art (par exemple Kodi, Openelec / libre, etc.)Et aujourd'hui, tout le monde peut rejoindre les meilleures pratiques en OpenSource, pour ainsi dire sans sortir de Github (a). Cet article est Ă ce sujet.Ayez beaucoup d'assemblages bons et diffĂ©rents pour vous, et souvenez-vous que "le monde de l'Internet des objets arrive".