Multimedia Center "Kodi" und Yocto Project


EinfĂŒhrung in das Yocto-Projekt


Yocto Project ist ein kollaboratives Open Source-Projekt zur Vereinfachung der Entwicklung von Distributionen fĂŒr eingebettete Systeme. Yocto enthĂ€lt eine große Anzahl von Vorlagen, Metadaten und Build-Tools. In Yocto Project können Sie eine große Anzahl von BSP-Schichten (Platform Support Package) fĂŒr alle Arten von Hardwareplattformen verbinden.

Der Hauptzweck des Artikels ist der Versuch, die Zusammenstellung eines typischen Distributionspakets im Yocto-Projekt am Beispiel des bekannten Multimedia-Centers Kodi, Version 17.6, fĂŒr einen Raspberry Pi 3B-Computer mit einer Karte zu zeigen.

Wenn Sie sich irgendwo tief in Ihrer Seele als Sammler fĂŒhlen, sich aber noch nicht entschieden haben, was Sie sammeln möchten, dann ist dieser Artikel fĂŒr Sie. Wenn Sie das Yocto-Projekt bereits in Ihrer tĂ€glichen Arbeit verwenden, können Sie durch diesen Artikel scrollen. Gehen Sie direkt zum letzten Kapitel und machen Sie sich bereit.

Der Artikel ist rein praktisch und zeigt die Möglichkeit, die Erfolge des Yocto-Projekts und von OpenEmbedded fĂŒr den Aufbau des Multimedia-Centers "Kodi" zu nutzen. Yocto-Ebenen werden mit dem Repo-Dienstprogramm von Google verwaltet. Ein Artikel im Dokument dieser Reihe.

Also: lass uns gehen.

Inhalt:


Installieren Sie Yocto Project unter Ubuntu
Distributions-Build- Engine in Yocto Project
Verwenden von OpenEmbedded mit dem Yocto-Projekt
Platform Support Package (BSP)
Verwalten Sie Yocto-Ebenen mit Repo
Installieren Sie Repo
Verteilungserstellungsmanifest
Manifestierter Inhalt
Manifest Beschreibung
Bs-Manifest- Struktur
Poky-Variablen initialisieren
Repo- Initialisierung
Repo Sync
Erstellen einer Yocto-Projektkonfiguration
Konfigurationsdatei build / conf / local.conf
Konfigurationsdatei build / conf / bblayers.conf
Ebene zum Zusammenbau eines Multimedia-Centers
Schichtstruktur
Ebenenkonfiguration
Zusammensetzung der Rezepte-Berserker
Zusammensetzung des Rezeptkerns
Zusammensetzung des Rezeptkerns
Kompositionsrezepte -Medienzentrum
Zusammensetzung der Rezepte-Multimedia
Kodi Build Rezept ErgÀnzung
HinzufĂŒgen eines neuen Elements zum Kodi-EinstellungsmenĂŒ
Maximale Puffereinstellungen fĂŒr Video
Fernsehen ĂŒber IPTV
Youtube mit dem Kodi Plugin ansehen
Konsolen- Shell-Netzwerkkonfigurationserweiterung
Verteilungserstellungsrezept
Eine kurze Anleitung zum Erstellen eines Verteilungsimages
Nachtrag

Installieren Sie Yocto Project unter Ubuntu


Um die Distribution mit dem Yocto Project unter Ubuntu zu erstellen, mĂŒssen Sie die folgenden Pakete installieren:

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 

Pakete werden mit dem Befehl apt-get install und dem Befehl skalo zur Eskalation von Berechtigungen installiert . Im Ubuntu-System ist dies eine weit verbreitete Praxis, wenn der Befehl sudo zum AusfĂŒhren von Verwaltungsaktionen verwendet wird (beim Erstellen des Hauptbenutzers des Systems wird er automatisch in der sudo-Gruppe registriert).

Detaillierte Installationsanweisungen finden Sie hier:

Distributions-Build-Engine in Yocto Project


Im Yocto-Projekt wird jede Programmeinheit anhand eines Montagerezeptes beschrieben. Die Rezeptbeschreibungssprache Ă€hnelt "bash" mit der Möglichkeit, Codeteile in die Python-Sprache einzufĂŒgen. Grundlegende Syntaxinformationen finden Sie im Yocto Project-Handbuch . Je nach Verwendungszweck kann eine Reihe von Baugruppenrezepten zu separaten Montageschichten kombiniert werden.

Die Ebenen sind in hardwareabhÀngige Ebenen unterteilt: BSP-Ebenen, UI-Ebenen (BenutzeroberflÀche), bestimmte Yocto-Ebenen sowie Ebenen, die bestimmte Funktionen implementieren:
B. Ebenen von OpenEmbedded => Multimedia, Python, Perl, Ruby, Networking, Systemd, Webserver usw.

Verwenden von OpenEmbedded mit dem Yocto-Projekt


Wenn Sie jedoch das Yocto-Projekt verwenden, benötigen Sie mit Sicherheit Ebenen mit zusĂ€tzlichen Funktionen, d. H. Eine große Auswahl an Rezepten fĂŒr alle Gelegenheiten. Und es gibt so ein Set - das sind Rezepte von OpenEmbedded. OpenEmbedded ist eine Infrastruktur zum Erstellen von Paketen fĂŒr Embedded Linux.

OpenEmbedded ist vollstĂ€ndig kompatibel mit dem Yocto-Projekt, da dieses Projekt als Grundlage fĂŒr das Yocto-Projekt verwendet wurde. Vielleicht hat das Yocto-Projekt deshalb etwas bessere StabilitĂ€t, bessere Dokumentation und etwas besseren Support (aber im Grunde ist es immer noch dasselbe OpenEmbedded).

Platform Support Package (BSP)


Das Board Support Package ist eine separate, spezialisierte Schicht (en) fĂŒr eine bestimmte Karte, die die Hardwarefunktionen der Plattform definiert, d. H. implementiert die spezifischen Dinge, die eine Karte von einer anderen unterscheiden: Prozessorfunktionen, Interrupts, Adressierung, Bootloaderfunktionen, Videoadapterfunktionen (GPU) usw.

Dieser Artikel verwendet die BSP-Schicht - meta-raspberrypi
Das Layer-Repository befindet sich unter: git.yoctoproject.org/git/meta-raspberrypi

Verwalten Sie Yocto-Ebenen mit Repo


Yocto Project kann eine große Anzahl von Ebenen von verschiedenen Lieferanten - GerĂ€teentwicklern - verwenden, und all dies muss irgendwie verwaltet werden. Stellen Sie sich vor, Sie haben ein Dutzend verschiedene Boards und jedes Board verfĂŒgt ĂŒber ein separates BSP-Git-Repository. Dies berĂŒcksichtigt nicht die Infrastruktur des Yocto-Projekts selbst sowie mögliche zusĂ€tzliche Funktionen von OpenEmbedded.

In einer solchen Situation kommen Sie nicht mit einem separaten einfachen Installationsskript davon. Willy-nilly, muss nach Werkzeugen suchen, die es gut können. Noch mehr als gut. Eines der besten Tools dieser Art ist das Google-Dienstprogramm Repo.

Repo ist das Hauptwerkzeug zum Verwalten von GIT-Repositorys beim Erstellen des Android-Betriebssystems mit seiner großen Codebasis. Mit Repo können Sie ein Dutzend, wenn nicht hundert separate Git-Repositorys in einem Projekt verwalten, deren Versionen Sie sorgfĂ€ltig in einer XML-Datei des Manifests angeben können

und fĂŒr die korrekte Synchronisation aller Versionen aller Repositorys mĂŒssen Sie nur einen Befehl ausfĂŒhren

Repo-Synchronisierung

Installieren Sie Repo


Mit den folgenden Befehlen können Sie Repo in Ihrem ~ / bin -Ausgangsverzeichnis installieren
(Der Befehl curl kann separat installiert werden: 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 


und in Zukunft mĂŒssen Sie nur noch den Befehl in der Konsole verwenden: repo

oder so
Wenn das Verzeichnis HOME / bin nicht automatisch mit dem Standardstartpfad hinzugefĂŒgt wird
siehe Datei HOME / .profile

$
$ PATH = $ {PATH}: ~ / bin
$ repo
$

Verteilungserstellungsmanifest


Die im Rahmen des Artikels gesammelte Distribution muss ich so nennen. Lass es der Name Torvin sein . Mit dem Codenamen Torvin wird es eine minimalistische Linux-Distribution mit einem einzigen Programm enthalten. Dies bezieht sich auf ein Anwendungsbenutzerprogramm - Kodi und nichts weiter (alles andere ist eine Systemebene). FĂŒr ein Multimedia-Center ist dies meiner Meinung nach völlig ausreichend.

Manifestierter Inhalt


Die Datei torvin-0.2.5.xml wird zum Verwalten von Verteilungsebenen verwendet .

  <?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> 

Manifest Beschreibung


Zu Beginn des Manifests bezeichnen Remote- Tags zwei Haupt-GIT-Repositorys und ein Hilfs-Repository:

https: ⁄⁄git.yoctoproject.org / git - Yocto-Repository mit dem Namen yocto
https: ⁄⁄github.com / openembedded - OpenEmbedded-Repository mit dem Namen oe
https: ⁄⁄github.com / berserktv - Hilfs-GIT-Repository mit dem Namen bs

Im nĂ€chsten Teil des Manifests arbeiten wir mit abgekĂŒrzter Benennung mit Projekten, die sich in diesen Repositorys befinden. Das Projekt- Tag enthĂ€lt die folgenden Attribute:

remote - Der Name des Remote-Repositorys
Revision - Der Name des Zweigs oder der Hash-Version
name - Name des Projekts im angegebenen Repository
Pfad - Der lokale Projektpfad in Ihrem Dateisystem

    <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 

Im Hauptteil des Projekt- Tags habe ich Befehle zum Erstellen symbolischer Links zur Infrastruktur von Hilfsskripten fĂŒr die Erstinitialisierung und den regelmĂ€ĂŸigen Start des von mir benötigten Poky- Build-Systems angegeben

    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 

Bs-Manifest-Struktur


 ├── COPYING.MIT
 ├── Himbeere
 │ ├ rocko
 │ │ ├── conf
 Bl │ │ ├ bblayers.conf
 │ │ │ └ local.conf
 Vin │ └ torvin-0.2.5.xml
 │ └ shell.sh
 ├── README.md
 └── Setup-Umgebung


Das bs-manifest- Projekt wird fĂŒr ein flexibles Konfigurationsmanagement verwendet, wobei die Assemblys verschiedener Versionen der Distribution berĂŒcksichtigt werden. Ich habe diese Version - 0.2.5

Poky-Variablen initialisieren


Die Setup-Umgebung fĂŒr das Initialisierungsskript wurde aus dem Freescale Community-Projekt ĂŒbernommen (in der Yocto-Umgebung ist dies eine gĂ€ngige Lösung). Das Skript ist fĂŒr die Initialisierung der Variablen des Poky-Build-Systems verantwortlich. Das Skript erstellt eine Verzeichnisstruktur, in die es sehr gut unterteilt ist:

  • build - Build- Verzeichnis
  • Quellcode fĂŒr Assembly-Assembly-Rezepte
  • download - Verzeichnis zum Herunterladen von Programmcode (Git-Datenbanken, tar.gz-Archive)

Der Inhalt des Setup-Umgebungsskripts kann hier angezeigt werden:

Inhalt des Shell.sh-Skripts
  #!/bin/bash MACHINE='raspberrypi3' source ./setup-environment build echo "you may try 'bitbake core-image-minimal'" bash 


Dieses Root-Skript dient zum Initialisieren der Konfigurationsvariablen der Build-Umgebung und wird normalerweise zu Beginn einer Sitzung aufgerufen.

Repo-Initialisierung


Um Repo zu initialisieren, mĂŒssen Sie den folgenden Befehl ausfĂŒhren:

 mkdir torvin cd torvin repo init -u https:⁄⁄github.com/berserktv/bs-manifest -m raspberry/rocko/torvin-0.2.5.xml 

Dabei teilt -u https: ⁄⁄github.com / berserktv / bs-manifest GIT den Pfad zum Manifestprojekt mit

Hinweis: Sie können auch -b Baumname angeben
(Wenn Sie den Schalter -b nicht angeben, wird der Hauptzweig angenommen (standardmĂ€ĂŸig))

Dabei gibt der Pfad -m Himbeere / Rocko / Torvin-0.2.5.xml zur Konfigurationsdatei Folgendes an:

  1. Der Name der Hardwareplattform, fĂŒr die die Montage ausgefĂŒhrt wird - Himbeere
  2. Der Name des Hauptarbeitszweigs von Yocto / OpenEmbedded lautet rocko
  3. Der Codename der Version lautet torvin (alle Versionen der 0.2.x-Serie)
  4. Die digitale Versionsnummer, die zusammengebaut wird, ist 0.2.5

Repo Sync


FĂŒhren Sie zum Booten oder anschließende Synchronisieren einfach den folgenden Befehl aus:

 repo sync 

Wenn Sie im Revisionsattribut einen Hash-Commit- oder Tag-Namen haben, Ă€ndert sich die Version fĂŒr dieses Git-Repository nicht. Dabei werden alle neuesten Versionen von GIT-Projekten abgerufen, die in der Manifestdatei angegeben sind (Zweige werden normalerweise angegeben). Der Tag-Name kann wie folgt angegeben werden: revision = "refs / tags / v0.2.5"

Erstellen einer Yocto-Projektkonfiguration


Nachdem der Befehl repo sync ausgefĂŒhrt wurde, können Sie mit der Erstellung der Hauptkonfiguration des Yocto-Projekts beginnen:

 ./shell.sh 

Nach Abschluss des Skripts wird das Verzeichnis build / conf erstellt:
mit zwei Hauptdateien:

  • local.conf - Assembly- Steuervariablen :
    Plattformname, Art der Verteilung und Build-Pakete usw.
  • bblayers.conf - Konfiguration der verbundenen Ebenen des Yocto-Projekts

StandardmĂ€ĂŸig sucht das Setup-Umgebungsskript nach source / base / conf
Erstkonfiguration und wenn local.conf und bblayers.conf Dateien
existieren, werden sie nach build / conf kopiert
(Siehe die Variable TEMPLATES in der Setup-Umgebung.)

d.h. Dateien stammen aus den Quellen / bs-manifest / raspberry / rocko / conf
Siehe Erstellen eines Symlinks zur Basis

Konfigurationsdatei build / conf / local.conf


Ein- / Ausblenden
  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" 


Konfigurationsdatei build / conf / bblayers.conf


Ein- / Ausblenden
  # 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-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-openembedded/meta-filesystems \ ${BSPDIR}/sources/meta-raspberrypi \ ${BSPDIR}/sources/berserk/meta-berserk \ " 



Die Hauptvariablen der Datei local.conf, auf die Sie achten mĂŒssen:

  • MASCHINE - der Name der Plattform, unter der die Montage durchgefĂŒhrt wird
  • DISTRO - Name der Verteilungskategorie
  • PACKAGE_CLASSES - Paketformat fĂŒr die Installation von Software
  • LICENSE_FLAGS_WHITELIST - Verwendung zusĂ€tzlicher Lizenzen

Spezifische Einstellungen fĂŒr die Raspberry Pi-Board-Familie

  • GPU_MEM = "128" - Die GrĂ¶ĂŸe des Videospeichers fĂŒr den GPU-Videoadapter (aus dem RAM zugewiesen)
  • GPU_MEM_256 = "112" - das gleiche gilt nur fĂŒr Karten mit einer Gesamt-RAM-GrĂ¶ĂŸe von 256 MB
  • GPU_MEM_512 = "160" - das gleiche gilt nur fĂŒr Karten mit einer GesamtspeichergrĂ¶ĂŸe von 512 MB
  • GPU_MEM_1024 = "320" - Gleiches gilt nur fĂŒr Karten mit einer Gesamt-RAM-GrĂ¶ĂŸe von 1024 MB

Hinweis:
Wenn Sie beispielsweise nur die Variable GPU_MEM = "128" belassen,
dann fĂŒr alle RPI-, RPI2-, RPI3-Karten
unabhÀngig von der Menge des realen RAM
auf der Karte wird immer fĂŒr die GPU zugewiesen - 128Mb
(und die gesamte RAM-GrĂ¶ĂŸe nimmt um diesen Wert ab)

Wenn alle Variablen angegeben sind, haben die Anweisungen GPU_MEM_256, GPU_MEM_512, GPU_MEM_1024 höhere PrioritÀt.

Informationen zum Zusammenstellen des Multimedia-Centers finden Sie zusÀtzlich zu den regulÀren Yocto-Ebenen in der Datei bblayers.conf

 ${BSPDIR}/sources/poky/meta \ ${BSPDIR}/sources/poky/meta-poky \ ${BSPDIR}/sources/poky/meta-yocto-bsp \ 

Ich habe vier Ebenen mit zusÀtzlichen Funktionen von OpenEmbedded verbunden.

Kodi Multimedia Center - ist ein komplexes Programm, das eine große Anzahl externer Bibliotheken verwendet. Sie mĂŒssen jede Bibliothek mit einem Build-Rezept erstellen. Wenn möglich, verwende ich daher alle Rezepte von OpenEmbedded in der Kategorie Multimedia

Ich habe also eine Multimedia-Ebene angeschlossen und die Ebenen, von denen es abhÀngt

 ${BSPDIR}/sources/meta-openembedded/meta-oe \ ${BSPDIR}/sources/meta-openembedded/meta-python \ ${BSPDIR}/sources/meta-openembedded/meta-networking \ ${BSPDIR}/sources/meta-openembedded/meta-multimedia \ 

Dann wird eine weitere OpenEmbedded-Ebene verbunden, um mit Dateisystemen zu arbeiten

 ${BSPDIR}/sources/meta-openembedded/meta-filesystems \ 

Außerdem wurde die BSP-Hauptschicht fĂŒr die Raspberry Pi-Plattform verbunden

 ${BSPDIR}/sources/meta-raspberrypi \ 

Nun, ganz am Ende ist eine zusĂ€tzliche Ebene verbunden, die fĂŒr die Zusammenstellung des Verteilungsbildes mit der FunktionalitĂ€t des "Multimedia Centers" verantwortlich ist.

 ${BSPDIR}/sources/berserk/meta-berserk \ 

Ebene zum Zusammenbau eines Multimedia-Centers


Meiner Meinung nach ist das Yocto-Projekt ein industrieller MĂ€hdrescher zur Erstellung eingebetteter Distributionen. Wenn Sie jedoch jemals mit dem Buildroot-Build-System gearbeitet haben, erscheint Ihnen Yocto möglicherweise umstĂ€ndlich. Es verwendet eine große Menge an freiem Festplattenspeicher. FĂŒr den normalen Betrieb benötigt Yocto etwa 80 bis 100 GB freien Speicherplatz. Dabei wird normalerweise die Baugruppe nur fĂŒr eine Plattform berĂŒcksichtigt.

Yocto erfĂŒllt seinen Hauptzweck - die UnterstĂŒtzung möglichst vieler verschiedener Hardwareplattformen. Dies erfordert den flexibelsten Mechanismus zum Wechseln von Baugruppen. Und dieser Mechanismus braucht Zeit und Ort. Das Erstellen einer Distribution in Yocto ist kein schneller Prozess.

Alle Funktionen zum Zusammenstellen des "Multimedia Centers" habe ich mit einer separaten Ebene:

 https://github/berserktv/berserk 

(Titel aus meinem Lieblingsbuch, Der Hammer und das Kreuz, von Harry Harrison.)
(Torvin ist auch eine Figur in diesem Buch.)

Um die FunktionalitĂ€t zu erhalten, die ich benötige, verwende ich die sogenannten Add-Ons fĂŒr Rezepte, die sich in Dateien mit der Erweiterung .bbappend befinden
In der .bbappend-Datei können Sie Ihre eigenen Befehlsaufrufe fĂŒr die regulĂ€re Build-Rezept-Methode hinzufĂŒgen, z. B. fĂŒr die Methode do_configure, do_compile, do_install usw.

Schichtstruktur


 ├── COPYING.MIT
 ├── Meta-Berserker
 │ ├ conf
 │ │ └── layer.conf
 │ ├ Rezepte-Berserker
 │ │ ├ bs-net
 │ │ ├ erste Runde
 │ │ ├ Bilder
 │ │ └── tv
 │ ├ Rezepte-Kern
 │ │ ├ init-ifupdown
 │ │ └ psplash
 │ ├ Rezepte-Kernel
 │ │ └ Linux
 │ ├ Rezepte-Medienzentrum
 │ │ ├ kodi
 │ │ └ Kodi-Plugins
 │ └ Rezepte-Multimedia
 │ └ ffmpeg
 ├── README.md
 └── changelog.txt


Schichtzusammensetzung:

  • Konfiguration der Konf - Schicht
  • Rezepts -Berserker - Rezepte fĂŒr die Erstellung von Distributionen, Fernsehern, Netzwerken und Erststarts
  • Rezept -Kern - Grundrezepte, insbesondere eine Änderung des Startrezepts
  • Rezepte-Kernel - Linux-Kernel-Build-Rezepte
  • Rezepte-Medienzentrum - Rezepte zum Erstellen von Kodi und seinen Plugins
  • rezepte-multimedia - multimedia rezepte, ffmpeg montage

Schichtkonfiguration


EnthÀlt die Datei 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" BBFILE_COLLECTIONS += "bs" BBFILE_PATTERN_bs := "^${LAYERDIR}/" BBFILE_PRIORITY_bs = "5" DISTRO_FEATURES_append += " wifi x11" PREFERRED_VERSION_ffmpeg = "3.1.11" SYSVINIT_ENABLED_GETTYS = "1" PREFERRED_VERSION_linux-raspberrypi ?= "4.9%" 


Die Datei enthÀlt einen Hinweis auf die Version der ffmpeg-Bibliothek, die Versionsnummer des Linux-Kernels sowie die Anzahl der virtuellen Konsolen (tty) und enthÀlt die Funktionen des Distributionskits - wifi x11
DISTRO_FEATURES_append + = "wifi x11"

PREFERRED_VERSION_ffmpeg = "3.1.11"
SYSVINIT_ENABLED_GETTYS = "1"

PREFERRED_VERSION_linux-raspberrypi? = "4,9%"

Zusammensetzung der Rezepte-Berserker


 ├── bs-net
 │ └── bs-net_0.1.3.bb
 ├── Erster Lauf
 │ ├ Dateien
 │ │ └── first-run.sh
 │ └ first-run.bb
 ├── Bilder
 │ └ berserk-image.bb
 └── Fernsehen
     ├── Dateien
     │ └ berserk.m3u8
     ├── tv-config.bb
     └── tv-dir.inc


wo:

  • bs-net_0.1.3.bb - Rezept zum Erstellen von Shell-Erweiterungen fĂŒr WLAN / Ethernet-Schnittstellen
  • first-run.bb - Rezept fĂŒr den ersten Lauf, zusĂ€tzliche Festplattenpartitionierung
  • first-run.sh - Shell-Skript des ersten Laufs (auf Laufstufe S ausfĂŒhren)
  • berserk-image.bb - Rezept zum Erstellen des Distributionsimages
  • tv-config.bb - Rezept zum Konfigurieren von TV-KanĂ€len mit IPTV
  • berserk.m3u8 - Konfiguration öffentlicher FernsehkanĂ€le (m3u8-Format)

Rezept-Kernkomposition


 ├── init-ifupdown
 │ ├ Dateien
 │ │ └ Schnittstellen
 │ └ init-ifupdown_1.0.bbappend
 └── psplash
     ├── Dateien
     │ └ psplash-berserk-img.h
     └── psplash_git.bbappend


wo:

  • Schnittstellen - Datei mit der aktuellen Netzwerkeinstellung
  • init-ifupdown_1.0.bbappend - Erweiterung fĂŒr das Netzwerkkonfigurationsrezept
  • psplash-berserk-img.h - Bild des Startbildschirmschoners
    Header-Datei, die mit dem Dienstprogramm gdk-pixbuf-csource abgerufen wurde
  • psplash_git.bbappend - Erweiterung des Rezepts zum Starten des Startbildschirmschoners

Die Netzwerkkonfiguration auf dem ZielgerÀt befindet sich in der Datei:

 /etc/network/interfaces 

Nachdem ich die Erweiterung des Rezepts init-ifupdown hinzugefĂŒgt habe, ersetze ich die regulĂ€re Konfigurationsdatei durch meine eigene und Ă€ndere die Reihenfolge (PrioritĂ€t) des Skriptlaufs fĂŒr die AusfĂŒhrungsebenen

 INITSCRIPT_PARAMS = "start 98 2 3 4 5 . stop 10 0 6 1 ." 

Derzeit enthalten fast alle modernen Linux-Distributionen einen Startbildschirm. In der Regel zeigt der Start-Bildschirmschoner den aktuellen Ladezustand an Anzeige der seit dem Systemstart verstrichenen Zeit. In dieser Hinsicht ist Yocto keine Ausnahme und Sie können das Bild des Standard-Start-Bildschirmschoners in ein beliebiges Bild Àndern.

Dazu mĂŒssen Sie:

  1. FILESEXTRAPATHS_prepend - Verzeichnis fĂŒr Ressourcen hinzufĂŒgen
  2. SRC_URI - FĂŒgt eine Header-Datei mit einem beliebigen Bild hinzu
  3. SPLASH_IMAGES - Paketsteuervariable Àndern

und weiter im Bildrezept "berserk-image.bb" ist es notwendig, das Splash-Startbild als die Merkmale des Bildes hinzuzufĂŒgen

 IMAGE_FEATURES += "splash" #          SPLASH = "psplash-berserk" 

Zusammensetzung der Rezepte-Kernel


 └── Linux
     ├── Dateien
     │ ├ db.txt.patch
     │ └ rbpi.cfg
     └── linux-raspberrypi_4.9.bbappend


wo:

  • db.txt.patch - Patch mit der Regulatory Domain-Basis (fĂŒr WiFi verwendet)
  • rbpi.cfg - Konfigurationsfragment des Linux-Kernels
  • linux-raspberrypi_4.9.bbappend - Erweiterung des 4.9-Kernel-Build-Rezepts fĂŒr Raspberry Pi

Wi-Fi-GerĂ€te arbeiten mit bestimmten Frequenzen und fĂŒr sie gibt es so etwas wie eine RegulierungsdomĂ€ne - dies ist der Parameter, der das Land angibt, in dem dieses GerĂ€t arbeiten soll.

Der Linux-Kernel verfĂŒgt ĂŒber eine Begleitdatenbank, in der die zulĂ€ssigen Frequenzen und die fĂŒr sie zulĂ€ssige Leistung fĂŒr jedes Land registriert sind.

Im einfachsten Fall kann diese Datenbank durch Angabe eines Parameters statisch direkt in den Kernel aufgenommen werden:
CONFIG_CFG80211_INTERNAL_REGDB = y
Genau das habe ich getan, indem ich einen Patch mit dieser Datenbank db.txt.patch verbunden habe

Und noch etwas: In Yocto gibt es Fragmente von Kernelkonfigurationen. Normalerweise enthĂ€lt ein Konfigurationsfragment, eine Datei mit der Erweiterung cfg, nur die Kernelparameter, die Sie fĂŒr bestimmte Zwecke eindeutig benötigen. Diese Konfiguration wird zu den Standardparametern hinzugefĂŒgt, die bereits beim Erstellen des Kernels im Rezept vorhanden sind.

ZusĂ€tzlich zum Rezept bbappend können Sie auch die Parameter Ă€ndern, die beim Start an den Kernel ĂŒbergeben werden:

d.h. Variable ĂŒberschreiben
CMDLINE siehe Datei linux-raspberrypi_4.9.bbappend

rbpi.cfg Inhalt
  # 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
  #      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" 


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 

wo:

  1. 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

  2. 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


wo:

  • 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 - OpenSource-Bibliothek zum Codieren / Decodieren einer Vielzahl von Video- und Audioformaten. FFmpeg unterstĂŒtzt fast 400 Codecs (ffmpeg-Codecs)
und ĂŒber 300 Formate (ffmpeg-Formate).

Kodi Build Rezeptzusatz


Die OpenEmbedded-Ebene enthĂ€lt ein regulĂ€res Rezept zum Erstellen von Kodi, ist jedoch recht allgemein gehalten, und ich möchte eine etwas stabilere und getestete Version fĂŒr die Raspberry Pi-Plattform erhalten.

Softwareentwickler haben so etwas wie einen Reverse-Port-Patch. Die Software wird stĂ€ndig aktualisiert und jede neue Version enthĂ€lt sowohl neue Funktionen als auch die Korrektur bekannter Fehler. Mit dem Patch fĂŒr die umgekehrte Portierung können Sie einige der Änderungen in der neuen Version des Programms auf eine Ă€ltere Version ĂŒbertragen, wodurch es stabiler wird. Dies ist jedoch eine sehr harte und sorgfĂ€ltige Arbeit, die immer von einer großen Anzahl von Entwicklern ausgefĂŒhrt wird.

In der Welt der OpenSource-Community gibt es mehrere bekannte Projekte mit Kodi, von denen das beste (meiner Meinung nach) LibreElec (OpenElec) ist. LibreElec hat einen guten Build fĂŒr die Raspberry Pi-Plattform. Hier haben sie es und es ist am besten, den Reverse-Port-Patch fĂŒr Kodi zu nehmen. So können Sie eine Vielzahl von Problemen loswerden, ohne etwas darĂŒber zu lernen.

Das Kodi Multimedia Center konzentriert sich auf die Wiedergabe des "Medien" -Kontexts, und meiner Meinung nach ist die Kombination von Kodi und FFmpeg, d. H. Durch die Interaktion bestimmter Versionen dieser Programme können andere Bibliotheken aus den Ebenen Yocto und OpenEmbedded belassen werden.

FĂŒr die Montage habe ich die stabile Version von Kodi 17.6 und die Version FFmpeg 3.1.11 verwendet

Hinweis:
   ,       ,      systemD.         (   (  )).  ,     LibreElec       : #!/bin/bash HASH_VER="934507d922fb011ce46c76566206f2f1f603360b" git clone https://github.com/LibreELEC/LibreELEC.tv.git libreelec cd libreelec git checkout ${HASH_VER}   Kodi,   : projects/RPi2/patches/kodi (. : kodi-001-backport.patch)    FFmpeg,   : packages/multimedia/ffmpeg/patches 


Die mitgelieferte Versionsbeschreibungsdatei lautet kodi-version.inc

 FILESEXTRAPATHS_prepend := "${THISDIR}/kodi:" #  Krypton SRCREV = "a9a7a20071bfd759e72e7053cee92e6f5cfb5e48" PV = "17.6+gitr${SRCPV}" 

Der von mir in Betracht gezogene Zweig Yocto und OpenEmbedded - rocko - enthĂ€lt Kodi Version 17.3. Um ein Upgrade auf Version 17.6 durchzufĂŒhren, fĂŒgen Sie dem Rezept einfach eine kleine ErgĂ€nzung hinzu - kodi_17.bbappend

 require kodi-version.inc #     (   17.3) SRC_URI_remove = "file://0013-FTPParse.cpp-use-std-string.patch" #  ,   systemd   SRC_URI_remove = "file://0004-handle-SIGTERM.patch" #      RPI   libreelec SRC_URI_append += "file://kodi-krypton-rpb-backports.patch" #  error adding symbols: DSO missing from command line SRC_URI_append += "file://vchostif.patch" MENU_ICON = "addons/skin.estuary/media/icons/settings" #       ( ) SRC_URI_append += "file://bs-menu.patch file://icon/bs-network.png" do_configure_prepend() { install -m 0644 ${WORKDIR}/icon/bs-network.png ${S}/${MENU_ICON} } #    kodi plugins RRECOMMENDS_${PN}_append = "\ python-xml python-misc python-db \ python-crypt python-threading python-math python-email \ python-io python-netserver python-urllib3 python-datetime" #     Raspberry Pi #  OPENGL    --enable-gles #  kodi     docs/README.linux => libxmu libxinerama # libxtst xdpyinfo #      DISTRO_FEATURES   "x11" #   kodi  RPI1  RPI2,3    --disable-x11 BS_RPI = " --disable-gl --enable-openmax --enable-player=omxplayer \ --with-platform=raspberry-pi --disable-x11" BS_RPI3 = " --disable-gl --enable-openmax --enable-player=omxplayer \ --with-platform=raspberry-pi2 --disable-x11" EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 'raspberrypi', \ '${BS_RPI}', '', d)}" EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 'raspberrypi2', \ '${BS_RPI3}', '', d)}" EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 'raspberrypi3', \ '${BS_RPI3}', '', d)}" #       Kodi   #  ,  USB  microSDHC  ( ) EXTRA_OECONF_append = " --enable-optical-drive" 

Mit der Build-Option "--enable-optisches Laufwerk" können Sie den praktischen Benachrichtigungsmechanismus verbinden, den Kodi beim Anschließen einer optischen Festplatte verwendet. In diesem Fall ĂŒberwacht das MediaManager-Modul (a) (xbmc / storage / MediaManager.cpp) das Verbinden / Trennen neuer Festplattenpartitionen und zeigt eine Popup-Meldung dazu an.

Beispiel fĂŒr das Anschließen / Trennen von Laufwerken:

 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    -  )       . 

HinzufĂŒgen eines neuen Elements zum Kodi-EinstellungsmenĂŒ


In Kodi 17.6 sind XML-Konfigurationsdateien fĂŒr die Anzeige von MenĂŒelementen verantwortlich. Um ein weiteres Element im MenĂŒ "Einstellungen" hinzuzufĂŒgen, passen Sie einfach die Datei an:
kodi / addons / skin.estuary / xml / Settings.xml

wobei skin.estuary das Standarddesign fĂŒr das MenĂŒdesign ist. Die Elementbeschreibung

sieht folgendermaßen aus:

<item>
    <label> $ LOCALIZE [13279] </ label>
    <onclick> RunAddon (script.berserk.network, butnetwork) </ click>
    <icon> icons / settings / bs-network.png </ icon>
</ item>


wo:

label - Name des
MenĂŒelements onclick - Behandlung des Ereignisses des DrĂŒckens der MenĂŒschaltflĂ€che
(Starten des Plugins, wobei das erste Argument die Zeichenfolge "butnetwork" ĂŒbergibt)
Symbol - Symbol des MenĂŒelements (Pfad zum PNG-Bild)

Die oben genannte FunktionalitÀt sowie das Verbinden mehrerer zusÀtzlicher Kodi-Plugins sind in integriert Verwenden der Datei bs-menu.patch

Ein- / Ausblenden
  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> 


Maximale Puffereinstellungen fĂŒr Video


Um die Leistung zu maximieren, können Sie im Kodi Multimedia Center die maximalen Puffereinstellungen festlegen:

 <advancedsettings> <cache> <buffermode>1</buffermode> <memorysize>139460608</memorysize> <readfactor>20</readfactor> </cache> </advancedsettings> 

buffermode = 1
- Pufferanforderungen fĂŒr alle Dateisysteme (einschließlich lokaler)

Lesefaktoren
- Passt die Download-Geschwindigkeit basierend auf der durchschnittlichen Video-Bitrate an. Wenn Sie beispielsweise ein Video mit einer durchschnittlichen DatenĂŒbertragungsrate von 5 Mbit / s

abspielen und das PufferleseverhĂ€ltnis auf 2,0 einstellen, wird die Download-Geschwindigkeit (und damit die Cache-FĂŒllrate) auf etwa 10 Mbit / s begrenzt, also: readfactor = 20
hebt die EinschrÀnkung der Download-Geschwindigkeit auf.

Memorysize = 139460608
- die PuffergrĂ¶ĂŸe betrĂ€gt 133 MB, wĂ€hrend 133 * 3 RAM verwendet wird, d.h. ca. 400 MB RAM

Fernsehen ĂŒber IPTV


Kodi Media Center ist ein sehr leistungsfÀhiges Tool zum Anzeigen digitaler Inhalte.

Die Hauptfunktion, fĂŒr die ich "Media Center" gesammelt habe, ist die Funktion des digitalen Fernsehens mit IPTV (Internet Protocol Television), d. H. Fernsehen ĂŒber das Internetprotokoll. Mit dieser Funktion können Sie von Ihrem Internetanbieter aus digitales Fernsehen schauen.

Dies ist die modernste und optimalste Option sowohl hinsichtlich der BildqualitĂ€t als auch hinsichtlich zusĂ€tzlicher Merkmale, d.h. erbrachte Dienstleistungen. Beispielsweise können FernsehkanĂ€le im Archiv bereitgestellt werden, in denen die gewĂŒnschte Videoaufzeichnung einige Zeit nach der Ausstrahlung verfĂŒgbar ist.

Um IPTV in Kodi zu unterstĂŒtzen, gibt es mehrere Plugin-Optionen, von denen ich mich fĂŒr das Plugin entschieden habepvr.iptvsimple

Verwenden Sie das Rezept, um das Plugin zu erstellen:

    └── Kodi-Plugins
        └── kodi-pvr-iptvsimple.bb


Das Plug-In ist verbunden ĂŒber:
Kodi-HauptmenĂŒ => "Add-Ons" => "Meine Add-Ons" => "PVR-Clients" => "PVR IPTV Simple Client"

Um den Betrieb des IPTV-Fernsehens als Teil von Kodi zu ĂŒberprĂŒfen, habe ich mehrere öffentliche Nachrichtensender verwendet und fĂŒgte sie der Liste im m3u8-Format hinzu und aktivierte auch den automatischen Start des Plugins „pvr.iptvsimple“ zu Beginn des Media Centers.

Youtube mit dem Kodi Plugin ansehen


Die Programmierer, die Kodi entwickelten, boten die FlexibilitĂ€t, seine Funktionen zu erweitern. Dies geschieht, damit jeder Enthusiast auf Wunsch Kodi hinzufĂŒgen kann, was er wirklich braucht. Und diese Plugins fĂŒr Kodi sind Dunkelheit. Nun, du verstehst, worum es geht.Es gibt so viele von ihnen, dass es eine Beschreibung in einem separaten Artikel verdient.

Plugins werden sehr einfach installiert. Verbinden Sie Kodi einfach mit dem Internet und drĂŒcken Sie einige Tasten im MenĂŒ. Sie können darĂŒber in allen Foren lesen, die Kodi gewidmet sind. Aber die Assembly, da ist die Assembly, und ich werde ein weiteres Plugin als Beispiel in das Distributionskit aufnehmen.

Das meiner Meinung nach interessanteste und am weitesten verbreitete Plugin (Ohm) fĂŒr Kodi ist das Youtube View Plugin. Kodi ist ein Multimedia-Center, und Youtube ist das grĂ¶ĂŸte Repository fĂŒr diese Multimedia-Inhalte. Daher ist das Youtube-Plug-In fĂŒr Kodi fast obligatorisch.

Das Plugin ist in Python geschrieben. Dies ist ein regulĂ€rer Plug-In-Mechanismus. Sie mĂŒssen nichts kompilieren. Kopieren Sie einfach das fertige Plug-In mit den Plug-Ins in das Stammverzeichnis und geben Sie den Namen des Plug-Ins in der XML-Manifestdatei an:
"System / addon-manifest.xml"

Das Plugin stammt aus dem offiziellen Repository und sein Quellcode ist im Archiv enthalten:
Rezepte-Medienzentrum / Kodi-Plugins / Dateien / Plugin.video.youtube.tar.gz Die

Position des Plugin-Build-Rezepts finden Sie oben Kapitel "Rezept-Medienzentrum Komposition"

Konsolen-Shell-Netzwerkkonfigurationserweiterung


Da es sich bei dem im Rahmen dieses Artikels zusammengestellten Distributionskit um eine Demo handelt, sind die Anforderungen fĂŒr die Einrichtung von „Netzwerkschnittstellen“ minimal. Ich wollte dafĂŒr keinen schweren Netzwerkmanager ziehen, was fĂŒr mich sehr unverstĂ€ndlich und sehr umstĂ€ndlich war, und deshalb habe ich zwei Shell-Skripte geschrieben, die die Konfiguration des regulĂ€ren Konfigurationsmechanismus ergĂ€nzen:

 ############################################################## #     /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 

Um Ethernet / WLAN-Netzwerkschnittstellen bequem ĂŒber die GUI zu konfigurieren, verwende ich ein weiteres kleines Kodi-Plugin „script.berserk.network“. Dies ist fast das einzige Kodi-Plugin, das ich herausgefunden habe, aber dafĂŒr musste ich es schreiben. Es ist extrem kompakt und minimalistisch und in der Python-Sprache geschrieben.

Beide Komponenten werden nach Rezepten gesammelt:

  • Rezepte-Berserker / bs-net / bs-net_0.1.3.bb
  • Rezepte-Medienzentrum / Kodi-Plugins / script-berserk-network_0.2.5.bb

An dieser Stelle möchte ich auf die Details eingehen. Die ganze FlexibilitĂ€t bei der Verwendung von Yocto liegt also in verschiedenen Rezepten, d.h. Verbunden Sie einen Satz von Rezepten - der einfachste Netzwerkmanager wurde zum Verteilungskit hinzugefĂŒgt, ein anderer Satz verbunden - fĂŒgte Ihren bevorzugten Netzwerkmanager hinzu, indem Sie beispielsweise systemD usw.

Um beim Systemstart automatisch eine Verbindung zu einem WiFi-Zugangspunkt herzustellen, verwende ich die udev-Regel: /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" 

Das WLAN-Runner-Skript fĂŒhrt einfach die folgenden Befehle aus:
/ etc / network / wlan $ IFACE up
oder
/ etc / network / wlan $ IFACE down

Verteilungserstellungsrezept


Das Yocto-Projekt verfĂŒgt ĂŒber einen Wiederverwendungsmechanismus. Es gibt Klassen, von denen Sie erben können (Direktive "erben"), und es gibt grundlegende Rezepte, die Sie verbinden können (Direktive "include").

Ich werde die Vererbung anhand des Klassenbeispiels zeigen:
poky / meta / clasess / core-image.bbclass

Die Klasse ist dafĂŒr verantwortlich, die Gruppen von Paketen zu beschreiben, die Sie in ein bestimmtes Rezept aufnehmen können. Zu diesem Zweck reicht es aus, die Konstruktion am Anfang des Rezepts anzugeben:
Kernbild erben

Selbst im Text dieser Klasse können Sie die Merkmale des Bildes sehen. Jedes Merkmal ist fĂŒr eine Gruppe von Funktionen verantwortlich, die im Bild enthalten sind, und jede Gruppe beschreibt letztendlich eine Reihe installierter Programme oder Bibliotheken.

Merkmale des Bildes werden wie folgt angezeigt:

 IMAGE_FEATURES += "ssh-server-dropbear splash" 

Es gibt auch DISTRO_FEATURES - Verteilungsfunktionen, die in der Layer-Konfigurationsdatei angegeben werden können. Dies sind Funktionen auf Verteilungsebene. Wenn Sie beispielsweise eine Funktion Àndern (z. B. x11), werden in der nachfolgenden Assembly alle Pakete wieder zusammengesetzt, die von dieser Option abhÀngen (dies kann ziemlich lange dauern).

Das grundlegende Grundrezept, das ich verwende, ist:
poky / meta / prescription-core / images / core-image-minimal.bb

Image Build Rezept
  # Project: "Berserk" - build Kodi for the Raspberry Pi platform # license - The MIT License (MIT) DESCRIPTION = "Berserk - the image for the Raspberry PI" LICENSE = "MIT" MD5_SUM = "md5=0835ade698e0bcf8506ecda2f7b4f302" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;${MD5_SUM}" IMAGE_FEATURES += "ssh-server-dropbear splash" #    rootfs    (250000kB=~250Mb) IMAGE_ROOTFS_EXTRA_SPACE_append += "+ 250000" # 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-binary-localedata-en-us \ glibc-binary-localedata-ru-ru \ glibc-charmap-utf-8 \ " BS_BASE = "kernel-modules \ lsb \ pciutils \ parted \ tzdata \ dosfstools \ ntp \ ntpdate \ e2fsprogs-resize2fs \ ntfs-3g \ ntfsprogs \ " 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 \ plugin-video-youtube \ script-module-requests \ " # Include modules in rootfs IMAGE_INSTALL += " \ ${BS_BASE} \ ${BS_WLAN} \ ${BS_WIFI_SUPPORT} \ ${BS_GLIBC} \ ${BS_SOFT} \ ${BS_DEBUG_TOOLS} \ " 



Ich möchte klarstellen, dass das Kernel-Modul- Paket beispielsweise
alle in der defconfig-Datei angegebenen Kernel-Module in das Distributions-Image installiert .

Wenn Sie jedoch etwas stark anpassen, benötigen Sie möglicherweise nicht einmal alle Kernelmodule. In diesem Fall ist es praktisch, jedes Modul nach Namen hinzuzufĂŒgen, wie in der Variablen BS_WLAN angegeben . Es ist wie ein Spickzettel. Geben Sie nur das an, was Sie benötigen, und ĂŒberprĂŒfen Sie nach ÜberprĂŒfung des Pakets "Kernel-Module" entfernen, prĂŒfen usw.

Eine kurze Anleitung zum Erstellen eines Verteilungsimages


1) Installieren Sie die Yocto Project-AbhÀngigkeiten in 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) Laden Sie Repo herunter und installieren Sie es:
  mkdir ~/bin curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo 


3) Laden Sie das Projekt von github herunter:
  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) Erstellen Sie das Projekt:
  ./shell.sh bitbake berserk-image 


5) Schreiben Sie das Verteilungsbild auf die Speicherkarte:

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 :
:


Hinweis:
              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  


Nachtrag


Die FĂ€higkeiten von OpenSource in den letzten Jahren nehmen nur noch zu.

Aber diese Möglichkeiten sind nicht gering, zum Beispiel mĂŒssen Sie nicht einmal weit gehen. Es ist unwahrscheinlich, dass dasselbe "Microsoft" erwartet, dass die OpenSource-Technologie es vom Markt fĂŒr mobile Betriebssysteme verdrĂ€ngt. Ich meine das Betriebssystem von Google - "Android", das ĂŒber Nacht den "Pionier" mobiler Systeme an den Rand gedrĂ€ngt hat. Und es ist nicht klar, ob Microsoft wieder darauf zurĂŒckgreifen kann.

NatĂŒrlich "Google", ein riesiges Unternehmen mit nahezu unbegrenzten Finanzen und exzellenten Entwicklern, aber dennoch, wie sie sagen "ohne den Kern und nicht hier und da".

Die besten OpenSource-Projekte werden im Laufe der Zeit zu einem Kunstwerk (z. B. Kodi, Openelec / libre usw.)

Und heute kann jeder sozusagen an den Best Practices in OpenSource teilnehmen, ohne aus Github (a) herauszukriechen. Dieser Artikel handelt davon.

Haben Sie viele gute und unterschiedliche Baugruppen fĂŒr sich und denken Sie daran, dass "die Welt des Internets der Dinge kommt".

Source: https://habr.com/ru/post/de467443/


All Articles