<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.vuplus-support.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rdamas</id>
	<title>Vu+ WIKI - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.vuplus-support.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rdamas"/>
	<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Spezial:Beitr%C3%A4ge/Rdamas"/>
	<updated>2026-10-17T16:32:24Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12924</id>
		<title>Paketmanager opkg</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12924"/>
		<updated>2026-09-20T13:50:12Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;opkg&#039;&#039; ist ein Paketmanager, zugeschnitten auf die Bedürfnisse von Embedded Systemen. Die Aufgabe eines Paketmanagers ist, die auf einem System (z.B. unseren VU+ Boxen) installierte Software zu verwalten. Die Software wird dazu in Pakete gebündelt. Mit dem Paketmanager können solche Pakete installiert, deinstalliert und gelöscht werden. Der Paketmanager ermöglicht es, Software-Pakete zentral zusammenzustellen und auch zentral zu verteilen. Dafür greift der Paketmanager auf den [[FEED|Feed]] zu - das ist das zentrale Repository, in dem alle Pakete zum Download für den Paketmanager bereitgestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Für die komplette Liste der Befehle, die &#039;&#039;opkg&#039;&#039; kennt, gibt man einfach &amp;lt;code&amp;gt;opkg&amp;lt;/code&amp;gt; in der Shell ein.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Befehle hier auf einen Blick:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg update&amp;lt;/code&amp;gt; || Aktualisiert die Liste der am Feed verfügbaren Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;okpg list-upgradable&amp;lt;/code&amp;gt; || Zeigt eine Liste aller Pakete an, für die es am Feed eine Aktualisierung gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg upgrade&amp;lt;/code&amp;gt; || Aktualisiert alle Pakete, für die es eine neuere Version am Feed gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen verfügbaren Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list-installed&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen installierten Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg install &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Installiert ein oder mehrere Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg remove &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Deinstalliert ein oder mehrere Pakete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Andere Paketmanager für Enigma2, Geschichte =&lt;br /&gt;
Der Vorläufer von &#039;&#039;opkg&#039;&#039; ist der [https://de.wikipedia.org/wiki/IPKG ipkg], der bis 2013 entwickelt wurde. &#039;&#039;opkg&#039;&#039; hat sich von &#039;&#039;ipkg&#039;&#039; abgespaltet, benutzt aber dasselbe Dateiformat und die Endung &#039;&#039;.ipk&#039;&#039; für die Pakete. Das Format orientiert sich an den bei Debian und neueren Enigma2-Systemen benutzten &#039;&#039;.deb&#039;&#039; Paketen. Allen gemeinsam ist, dass sie komprimierte [https://de.wikipedia.org/wiki/Ar_(Unix) ar] Dateien sind. Der Aufbau einer &#039;&#039;.ipk&#039;&#039;-Datei ist weiter unten genauer beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Informationen ==&lt;br /&gt;
Für die Benutzung des Paketmanagers sind die folgenden Informationen nicht wichtig. Das wird sich vermutlich ändern, wenn man selber Pakete bauen möchte. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;opkg&#039;&#039; benutzt drei Verzeichnisse für den Betrieb:&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &amp;lt;code&amp;gt;/etc/opkg/&amp;lt;/code&amp;gt; || Konfiguration für &#039;&#039;opkg&#039;&#039;; hier wird die Liste aller Feeds abgelegt und die Liste der benutzten Architekturen definiert.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; || Hier wird der Gesamt-Status der installierten Pakete gespeichert. Dies beinhaltet eine Liste aller Pakete, die am Feed verfügbar sind, als auch Listen mit allen Dateien, die von allen Paketen installiert wurden. &lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &amp;lt;code&amp;gt;/usr/lib/opkg/&amp;lt;/code&amp;gt; || Im Verzeichnis &amp;lt;code&amp;gt;/usr/lib/opkg/alternatives/&amp;lt;/code&amp;gt; werden Informationen zu allen Programmen verwaltet, für die es mehrere Installations-Kandidaten gibt. Ein gutes Beispiel ist [[Busybox und deren Befehle|busybox]], welches für eine Vielzahl von Standard-Unix-Programmen eine abgespeckte Variante zur Verfügung stellt. Wenn das Original-Programm ebenfalls installiert wird, soll natürlich nicht weiter die Busybox-Variante benutzt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; liegen die von den Feeds heruntergeladenen Dateien sowie in der Datei &amp;lt;code&amp;gt;/var/lib/opkg/status&amp;lt;/code&amp;gt; ein Liste (oder Datenbank) aller im System installierten Pakete. Das Format der einzelnen Blöcke in dieser Datei ist weitgehend identisch mit der im folgenden Abschnitt beschriebenen &#039;&#039;control&#039;&#039;-Dateien. Die einzelnen Blöcke enthalten zusätzlich zu den Informationen aus den &#039;&#039;control&#039;&#039;-Dateien noch den Zeitstempel, wann das Paket installiert wurde (&#039;&#039;Installed-Time: ...&#039;&#039;), sowie ob es als abhängiges Paket automatisch installiert wurde (&#039;&#039;Auto-Installed: yes&#039;&#039;) und einen Installations-Status (&#039;&#039;Status: ...&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Paket-Informationen ===&lt;br /&gt;
Informationen zu allen installierten Paketen legt &#039;&#039;opkg&#039;&#039; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; ab. In diesem Verzeichnis befinden sich zu jedem installierten Paket mehrere Dateien:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;paketname&#039;&#039;.control || Datei mit allen Meta-Informationen zum Paket &#039;&#039;paketname&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.list || Liste aller vom Paket installierten Dateien&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.preinst || (optional) Script, welches vor Entpacken des data.tar.gz Files von &#039;&#039;paketname&#039;&#039; ausgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postinst || (optional) Script, welches nach Entpacken des data.tar.gz von &#039;&#039;paketname&#039;&#039; ausgeführt wird. Alle Paket-Abhängigkeiten sind installiert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.prerm || (optional) Script, welches vor dem Löschen von irgendwelchen Dateien von &#039;&#039;paketname&#039;&#039; ausgeführt wird. Das Paket ist weterhin vorhanden, Abhängigkeiten verfügbar.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postrm || (optional) Script, welches nach dem Löschen der Dateien von &#039;&#039;paketname&#039;&#039; ausgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.conffiles || (optional) Liste aller vom Paket installierten Konfigurationsfiles, die beim Update nicht überschrieben werden sollen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zwischen &#039;&#039;preinst&#039;&#039; und &#039;&#039;postinst&#039;&#039; entpackt &#039;&#039;opkg&#039;&#039; das Datenarchiv der &#039;&#039;.ipk&#039;&#039;-Datei an den Zielort. Abhängigkeiten werden erfüllt, Konfigurationsdateien geschrieben und der Paketstatus ändert sich zu „installed“. &lt;br /&gt;
&lt;br /&gt;
Zwischen &#039;&#039;prerm&#039;&#039; und &#039;&#039;postrm&#039;&#039; entfernt &#039;&#039;opkg&#039;&#039; die Dateien aus der Liste &#039;&#039;paketname&#039;&#039;.list. &lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;ipk&#039;&#039;-Datei ist vom Format eine [https://de.wikipedia.org/wiki/Ar_(Unix) ar]-Datei, die immer 3 Dateien enthält: &lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;control.tar.gz&#039;&#039; || eine Tar-Datei mit den gerade beschriebenen Dateien aus &amp;lt;code&amp;gt;/var/lib/opkg/info&amp;lt;/code&amp;gt; eines Paketes außer der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;data.tar.gz&#039;&#039; || eine Tar-Datei mit den zu installierenden Files; dies entspricht dem Inhalt der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;debian-binary&#039;&#039; || enthält immer 2.0 als String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Neuere Versionen von &#039;&#039;opkg&#039;&#039; akzeptieren auch mit &#039;&#039;xz&#039;&#039; gepackte Tar-Dateien. Die bei VTi genutzte Version kann nur mit .gz Dateien umgehen.&lt;br /&gt;
&lt;br /&gt;
Mit diesen Informationen ist es einfach, zu einem installierten Paket wieder eine ipk-Datei mit einem installierbaren Paket zu bauen. Dafür kann folgendes Script benutzt werden:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    name=$1&lt;br /&gt;
    if [ ! -f &amp;quot;/var/lib/opkg/info/$name.control&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Paket &amp;quot; $name &amp;quot; ist nicht installiert&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    builddir=/media/hdd/build.$$&lt;br /&gt;
    mkdir $builddir || exit 1&lt;br /&gt;
    &lt;br /&gt;
    # control-, list- und p-Dateien ins Build-Dir kopieren&lt;br /&gt;
    pushd /var/lib/opkg/info &amp;gt; /dev/null&lt;br /&gt;
    for file in $name.*; do&lt;br /&gt;
        cp $file $builddir/${file#&amp;quot;$name.&amp;quot;}&lt;br /&gt;
    done&lt;br /&gt;
    &lt;br /&gt;
    cd $builddir&lt;br /&gt;
    # opkg 0.7 führt in der File-Liste auch die File-Rechte; stört hier, also weg damit.&lt;br /&gt;
    sed -i -E -e &#039;s:\t[0-9]+$::&#039; list&lt;br /&gt;
    &lt;br /&gt;
    # tar-Datei mit allen gelisteten Dateien erstellen&lt;br /&gt;
    tar -czf data.tar.gz --no-recursion -T list 2&amp;gt;/dev/null&lt;br /&gt;
    &lt;br /&gt;
    # opkg benötigt für jedes Verzeichnis einen eigenen Eintrag,&lt;br /&gt;
    # deswegen das tar-File noch einmal aus- und wieder einpacken.&lt;br /&gt;
    mkdir clean&lt;br /&gt;
    cd clean&lt;br /&gt;
    tar -xf ../data.tar.gz&lt;br /&gt;
    tar -czf ../data.tar.gz .&lt;br /&gt;
    cd ..&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz 2&amp;gt; /dev/null&lt;br /&gt;
    popd &amp;gt; /dev/null&lt;br /&gt;
    &lt;br /&gt;
    mv -i $builddir/$ipk .&lt;br /&gt;
    rm -fr $builddir&lt;br /&gt;
&lt;br /&gt;
Anmerkung: für dieses Script funktionieren die Busybox-Versionen von &#039;&#039;tar&#039;&#039; und &#039;&#039;ar&#039;&#039; nicht. &lt;br /&gt;
&lt;br /&gt;
=== Pakete selber bauen ===&lt;br /&gt;
Ein Paket ist eine Sammlung von zu installierenden Dateien, Metainformationen sowie vor und nach Installation auszuführenden Scripten. Als Paket-Container-Format wird dafür das unter Unix seit Ewigkeiten benutzte ar-Format verwendet, mit dem auch Bibliotheken für statische Libraries (.a-Files)  erstellt werden.&lt;br /&gt;
&lt;br /&gt;
In einer .ipk-Datei befinden sich immer drei Dateien: &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;debian-binary&#039;&#039;&#039;. In der Datei &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039; befinden sich alle Meta-Daten zum Programm:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; (diese Datei muss enthalten sein),&lt;br /&gt;
* &amp;lt;code&amp;gt;conffiles&amp;lt;/code&amp;gt; (optional Datei mit einer Liste von Konfigurationsfiles, die nicht überschrieben werden sollen; pro Zeile ein Filename - wird z.B. im Paket &amp;quot;base-files&amp;quot; benutzt, siehe &amp;lt;code&amp;gt;/var/lib/opkg/info/base-files.*&amp;lt;/code&amp;gt; auf der Box)&lt;br /&gt;
* &amp;lt;code&amp;gt;preinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;prerm&amp;lt;/code&amp;gt; (optional, Shellscripten, die vor dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
* &amp;lt;code&amp;gt;postinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postrm&amp;lt;/code&amp;gt; (optional, Shellscripten, die nach dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; beinhaltet die eigentlichen Paket-Daten, die installiert werden sollen. Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; wird von &#039;&#039;opkg&#039;&#039; im Root-Verzeichnis ausgepackt. &#039;&#039;opkg&#039;&#039; benutzt dafür seinen eigenen Entpacker, der - im Gegensatz zu &#039;&#039;tar&#039;&#039; pingelig ist, was fehlende Verzeichnisse im Tar-File angeht.&lt;br /&gt;
&lt;br /&gt;
==== Das &#039;&#039;control&#039;&#039; File ====&lt;br /&gt;
Bleibt noch das &#039;&#039;control&#039;&#039;-File zu erklären. Ein &#039;&#039;control&#039;&#039;-File besteht aus einer Reihe von &#039;&#039;&#039;Feld: Wert&#039;&#039;&#039;-Paaren, mit nachfolgend beschriebener Bedeutung. Dabei sind lediglich die Felder &#039;&#039;&#039;Package:&#039;&#039;&#039; und &#039;&#039;&#039;Architecture:&#039;&#039;&#039; Pflichtfelder, es ist aber sinnvoll, wenigstens noch &#039;&#039;&#039;Version:&#039;&#039;&#039; und &#039;&#039;&#039;Description:&#039;&#039;&#039; mit anzugeben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Package:&#039;&#039;&#039; (&#039;&#039;Pflichtfeld&#039;&#039;) ist der Paket-Name ohne die Versions-Nummer&lt;br /&gt;
* &#039;&#039;&#039;Architecture:&#039;&#039;&#039; (&#039;&#039;Pflichtfeld&#039;&#039;) bestimmt, unter welcher Architektur das Paket sinnvollerweise installiert werden kann. Hier nimmt man &amp;quot;all&amp;quot;, wenn es unabhängig vom Prozessor ist, also z.B. ein Python-Script. Ansonsten z.B. armv7ahf-vfp-neon wenn es spezifisch für eine unserer 4k-Boxen ist, weil z.B. ein kompiliertes Binary enthalten ist. Gültige Werte für &amp;quot;Architecture&amp;quot; für deine Box stehen in der Datei /etc/opkg/arch.conf.&lt;br /&gt;
* &#039;&#039;&#039;Version:&#039;&#039;&#039; (&#039;&#039;empfohlenes Feld&#039;&#039;) ist die Versionsnummer des Paketes. Hier fährt man sehr gut mit einer numerischen Versionsnummer (z.B. 1.2-r0), da opkg anhand der Versionsnummer alphanumerisch sortiert und entscheidet, ob ein Paket neuer als ein bereits installiertes ist. Versionsnummern a la &amp;quot;gitXXX&amp;quot; sind eher ungeeignet. Die Syntax für den Aufbau einer Versionsnummer ist: &amp;lt;code&amp;gt;[epoch:]upstream-version[-revision]:&amp;lt;/code&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;epoch&#039;&#039;&#039;: eine optionale ganze Zahl, gefolgt von einem Doppelpunkt. Wird sie weggelassen, wird sie als 0 angenommen. Sie dient nur dazu, eine neuere Sortierreihenfolge zu erzwingen, wenn sich das Versionsschema des Upstream-Projekts ändert oder ein Fehler korrigiert werden muss.&lt;br /&gt;
** &#039;&#039;&#039;upstream-version:&#039;&#039;&#039; die „echte“ Version der Originalsoftware (z. B. 2.4.1). Sie kann Buchstaben, Ziffern, Punkte, +-~ und, nur wenn eine Epoche angegeben ist, einen Doppelpunkt enthalten.&lt;br /&gt;
** &#039;&#039;&#039;revision&#039;&#039;&#039;: ein optionaler paketspezifischer Zähler nach dem letzten Bindestrich (z. B. -1). Er dient zur Unterscheidung von Neukompilationen oder eigenen kleinen Anpassungen derselben Upstream-Version.&lt;br /&gt;
* &#039;&#039;&#039;Description:&#039;&#039;&#039; (&#039;&#039;empfohlenes Feld&#039;&#039;) ausführliche Beschreibung des Pakets. Dieses Feld kann aus mehreren Zeilen bestehen, wobei nachfolgende Zeilen immer mit einem Leerzeichen beginnnen müssen, Absätze mit &amp;quot; .&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Depends:&#039;&#039;&#039; beschreibt die Abhängigkeiten zu anderen Paketen. Diese Zeile kann eine Liste von Paketen enthalten, die installiert sein müssen bzw. installiert werden sollen, wenn das Paket installiert wird. Für jedes Paket kann weiter noch angeben werden, welche Version benötigt wird. Das kann man durch (&amp;gt;&amp;gt; Version), (&amp;gt;= Version), (= Version), (&amp;lt;= Version), (&amp;lt;&amp;lt; Version) hinter dem Paketnamen angeben. &amp;gt;&amp;gt;: neuer als, &amp;gt;=: mindestens, =: genau gleich, &amp;lt;=: höchstens, &amp;lt;&amp;lt;: älter als.&lt;br /&gt;
* &#039;&#039;&#039;Conflicts:&#039;&#039;&#039; wenn die Installation dieses Paketes sich mit einem anderen Paket beisst (z.B. wenn beide Pakete gleiche Files installieren), werden die Pakete durch Komma getrennt hier aufgeführt. Siehe auch das Feld &#039;&#039;Replaces&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Installed-Size:&#039;&#039;&#039; hier kann der vom installierten Paket in Anspruch genommene Speicherplatz in KB angegeben werden&lt;br /&gt;
* &#039;&#039;&#039;Maintainer:&#039;&#039;&#039; Wer betreut dieses Paket?&lt;br /&gt;
* &#039;&#039;&#039;Priority:&#039;&#039;&#039;  extra, optional, required, standard&lt;br /&gt;
* &#039;&#039;&#039;Provides:&#039;&#039;&#039; Für kompliziertere Abhängigkeiten von Paketen mit virtuellen Paketen definiert &amp;quot;Provides:&amp;quot;, für welches virtuelle Paket das Paket eine Installation erfüllt. Dafür kann ein Paket z.B. &amp;quot;Depends: vpaket&amp;quot; voraussetzen, und unser Paket &amp;quot;Package: paket&amp;quot; sowie &amp;quot;Provides: vpaket&amp;quot; definieren. Das macht man gerne, wenn man Pakete für spezifische Hardware schnürt, z.B. eine bestimmte Box.&lt;br /&gt;
* &#039;&#039;&#039;Section:&#039;&#039;&#039; Welcher Sektion das Paket zugeordnet werden soll.&lt;br /&gt;
* &#039;&#039;&#039;Replaces:&#039;&#039;&#039; Manchmal gibt es für ein altes Paket ein neues, welches das alte ersetzt. Um Konflikte mit gleichen Files zu verhindern, kann man hier angeben, welches alte Paket unser Paket ersetzt.&lt;br /&gt;
* &#039;&#039;&#039;Source:&#039;&#039;&#039; Quelle des Pakets.&lt;br /&gt;
* &#039;&#039;&#039;Recommends:&#039;&#039;&#039; Liste von Paketen, für die es Sinn macht, zusätzlich zu diesem Paket installiert zu werden. Quasi eine sehr weiche Depends: Klausel.&lt;br /&gt;
* &#039;&#039;&#039;Suggests:&#039;&#039;&#039; Liste von Paketen, für die es vielleicht Sinn macht, zusätzlich zu diesem Paket installiert zu werden - eine noch weichere Depends: Klausel.&lt;br /&gt;
&lt;br /&gt;
Als Beispiele kann man sich die tausenden von &amp;lt;code&amp;gt;*.control&amp;lt;/code&amp;gt; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; anschauen. Pro installiertes Paket steht dort die &#039;&#039;control&#039;&#039;-Datei, die mit dem Paket ausgeliefert wurde.&lt;br /&gt;
&lt;br /&gt;
==== Ein Script um Pakete zu erstellen ====&lt;br /&gt;
Mit folgendem Script kann aus einem Installations-Verzeichnis heraus ein fertiges Paket gebaut werden. Dafür ist es nur nötig, eine fertige &#039;&#039;control&#039;&#039;-Datei und das fertige &#039;&#039;data.tar.gz&#039;&#039; im Verzeichnis abzulegen. Wenn man ein Programm fertig kompiliert hat, lässt es sich üblicherweise mit dem Kommando &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; installieren. Man kann aber bei den meisten Programmen heute &amp;lt;code&amp;gt;make install DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt; angeben, um das Programm unter einem anderen Root-Verzeichnis, z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;, zu installieren. Von hier kann man noch einmal schauen, was alles installiert würde, und von hier das &#039;&#039;data.tar.gz&#039;&#039;-File erstellen.&lt;br /&gt;
&lt;br /&gt;
Das folgende Script wird im Installations-Root (z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;) ausgeführt:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    if [ ! -f &amp;quot;control&amp;quot; -o ! -f &amp;quot;data.tar.gz&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Verzeichnis enthält keine Paketdaten&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz&lt;br /&gt;
&lt;br /&gt;
Wichtig: für dieses Script wird das &#039;&#039;ar&#039;&#039; aus den Binutils benötigt, hier funktioniert das &#039;&#039;ar&#039;&#039; aus Busybox nicht. Ein Binutils-Paket für die ARM-Architektur findet sich bei uns im Downloads-Bereich, für MIPSEL wird man fündig, wenn man im Netz nach Debian-Paketen sucht.&lt;br /&gt;
&lt;br /&gt;
== Änderungen in VTi-16 ==&lt;br /&gt;
VTi-16 kommt mit einer aktuelleren Version des Paket-Managers &#039;&#039;opkg&#039;&#039;: 0.7.0. Damit werden einige Verbesserungen eingeführt:&lt;br /&gt;
&lt;br /&gt;
* Der Daten-Container darf jetzt neben gzip auch mit zstd, xz, bzip2 oder lz4 gepackt werden. &lt;br /&gt;
* In der Liste der installierten Files werden jetzt auch die File-Berechtigungen gespeichert, mit denen das Archiv installiert wurde.&lt;br /&gt;
* Das Verzeichnis, in dem die Inhalte der installierten Feeds abgelegt werden, hat sich gegenüber den vorherigen VTi-Versionen geändert.&lt;br /&gt;
* Das in VTi-16 benutzte busybox kommt mit einem für das erstellen von ipk&#039;s geeigneten &amp;quot;ar&amp;quot; Befehl. Dieser muss nicht mehr separat installiert werden.&lt;br /&gt;
&lt;br /&gt;
Das hier vorgestellte Script zum Erstellen einer ipk-Datei aus einem bereits installierten Paket wurde deshalb leicht angepasst.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12923</id>
		<title>Paketmanager opkg</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12923"/>
		<updated>2026-09-20T13:49:36Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;opkg&#039;&#039; ist ein Paketmanager, zugeschnitten auf die Bedürfnisse von Embedded Systemen. Die Aufgabe eines Paketmanagers ist, die auf einem System (z.B. unseren VU+ Boxen) installierte Software zu verwalten. Die Software wird dazu in Pakete gebündelt. Mit dem Paketmanager können solche Pakete installiert, deinstalliert und gelöscht werden. Der Paketmanager ermöglicht es, Software-Pakete zentral zusammenzustellen und auch zentral zu verteilen. Dafür greift der Paketmanager auf den [[FEED|Feed]] zu - das ist das zentrale Repository, in dem alle Pakete zum Download für den Paketmanager bereitgestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Für die komplette Liste der Befehle, die &#039;&#039;opkg&#039;&#039; kennt, gibt man einfach &amp;lt;code&amp;gt;opkg&amp;lt;/code&amp;gt; in der Shell ein.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Befehle hier auf einen Blick:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg update&amp;lt;/code&amp;gt; || Aktualisiert die Liste der am Feed verfügbaren Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;okpg list-upgradable&amp;lt;/code&amp;gt; || Zeigt eine Liste aller Pakete an, für die es am Feed eine Aktualisierung gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg upgrade&amp;lt;/code&amp;gt; || Aktualisiert alle Pakete, für die es eine neuere Version am Feed gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen verfügbaren Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list-installed&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen installierten Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg install &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Installiert ein oder mehrere Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg remove &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Deinstalliert ein oder mehrere Pakete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Andere Paketmanager für Enigma2, Geschichte =&lt;br /&gt;
Der Vorläufer von &#039;&#039;opkg&#039;&#039; ist der [https://de.wikipedia.org/wiki/IPKG ipkg], der bis 2013 entwickelt wurde. &#039;&#039;opkg&#039;&#039; hat sich von &#039;&#039;ipkg&#039;&#039; abgespaltet, benutzt aber dasselbe Dateiformat und die Endung &#039;&#039;.ipk&#039;&#039; für die Pakete. Das Format orientiert sich an den bei Debian und neueren Enigma2-Systemen benutzten &#039;&#039;.deb&#039;&#039; Paketen. Allen gemeinsam ist, dass sie komprimierte [https://de.wikipedia.org/wiki/Ar_(Unix) ar] Dateien sind. Der Aufbau einer &#039;&#039;.ipk&#039;&#039;-Datei ist weiter unten genauer beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Informationen ==&lt;br /&gt;
Für die Benutzung des Paketmanagers sind die folgenden Informationen nicht wichtig. Das wird sich vermutlich ändern, wenn man selber Pakete bauen möchte. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;opkg&#039;&#039; benutzt drei Verzeichnisse für den Betrieb:&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &amp;lt;code&amp;gt;/etc/opkg/&amp;lt;/code&amp;gt; || Konfiguration für &#039;&#039;opkg&#039;&#039;; hier wird die Liste aller Feeds abgelegt und die Liste der benutzten Architekturen definiert.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; || Hier wird der Gesamt-Status der installierten Pakete gespeichert. Dies beinhaltet eine Liste aller Pakete, die am Feed verfügbar sind, als auch Listen mit allen Dateien, die von allen Paketen installiert wurden. &lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &amp;lt;code&amp;gt;/usr/lib/opkg/&amp;lt;/code&amp;gt; || Im Verzeichnis &amp;lt;code&amp;gt;/usr/lib/opkg/alternatives/&amp;lt;/code&amp;gt; werden Informationen zu allen Programmen verwaltet, für die es mehrere Installations-Kandidaten gibt. Ein gutes Beispiel ist [[Busybox und deren Befehle|busybox]], welches für eine Vielzahl von Standard-Unix-Programmen eine abgespeckte Variante zur Verfügung stellt. Wenn das Original-Programm ebenfalls installiert wird, soll natürlich nicht weiter die Busybox-Variante benutzt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; liegen die von den Feeds heruntergeladenen Dateien sowie in der Datei &amp;lt;code&amp;gt;/var/lib/opkg/status&amp;lt;/code&amp;gt; ein Liste (oder Datenbank) aller im System installierten Pakete. Das Format der einzelnen Blöcke in dieser Datei ist weitgehend identisch mit der im folgenden Abschnitt beschriebenen &#039;&#039;control&#039;&#039;-Dateien. Die einzelnen Blöcke enthalten zusätzlich zu den Informationen aus den &#039;&#039;control&#039;&#039;-Dateien noch den Zeitstempel, wann das Paket installiert wurde (&#039;&#039;Installed-Time: ...&#039;&#039;), sowie ob es als abhängiges Paket automatisch installiert wurde (&#039;&#039;Auto-Installed: yes&#039;&#039;) und einen Installations-Status (&#039;&#039;Status: ...&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Paket-Informationen ===&lt;br /&gt;
Informationen zu allen installierten Paketen legt &#039;&#039;opkg&#039;&#039; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; ab. In diesem Verzeichnis befinden sich zu jedem installierten Paket mehrere Dateien:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;paketname&#039;&#039;.control || Datei mit allen Meta-Informationen zum Paket &#039;&#039;paketname&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.list || Liste aller vom Paket installierten Dateien&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.preinst || (optional) Script, welches vor Entpacken des data.tar.gz Files von &#039;&#039;paketname&#039;&#039; ausgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postinst || (optional) Script, welches nach Entpacken des data.tar.gz von &#039;&#039;paketname&#039;&#039; ausgeführt wird. Alle Paket-Abhängigkeiten sind installiert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.prerm || (optional) Script, welches vor dem Löschen von irgendwelchen Dateien von &#039;&#039;paketname&#039;&#039; ausgeführt wird. Das Paket ist weterhin vorhanden, Abhängigkeiten verfügbar.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postrm || (optional) Script, welches nach dem Löschen der Dateien von &#039;&#039;paketname&#039;&#039; ausgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.conffiles || (optional) Liste aller vom Paket installierten Konfigurationsfiles, die beim Update nicht überschrieben werden sollen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zwischen &#039;&#039;preinst&#039;&#039; und &#039;&#039;postinst&#039;&#039; entpackt &#039;&#039;opkg&#039;&#039; das Datenarchiv der &#039;&#039;.ipk&#039;&#039;-Datei an den Zielort. Abhängigkeiten werden erfüllt, Konfigurationsdateien geschrieben und der Paketstatus ändert sich zu „installed“. &lt;br /&gt;
&lt;br /&gt;
Zwischen &#039;&#039;prerm&#039;&#039; und &#039;&#039;postrm&#039;&#039; entfernt &#039;&#039;opkg&#039;&#039; die Dateien aus der Liste &#039;&#039;paketname&#039;&#039;.list. &lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;ipk&#039;&#039;-Datei ist vom Format eine [https://de.wikipedia.org/wiki/Ar_(Unix) ar]-Datei, die immer 3 Dateien enthält: &lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;control.tar.gz&#039;&#039; || eine Tar-Datei mit den gerade beschriebenen Dateien aus &amp;lt;code&amp;gt;/var/lib/opkg/info&amp;lt;/code&amp;gt; eines Paketes außer der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;data.tar.gz&#039;&#039; || eine Tar-Datei mit den zu installierenden Files; dies entspricht dem Inhalt der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;debian-binary&#039;&#039; || enthält immer 2.0 als String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Neuere Versionen von &#039;&#039;opkg&#039;&#039; akzeptieren auch mit &#039;&#039;xz&#039;&#039; gepackte Tar-Dateien. Die bei VTi genutzte Version kann nur mit .gz Dateien umgehen.&lt;br /&gt;
&lt;br /&gt;
Mit diesen Informationen ist es einfach, zu einem installierten Paket wieder eine ipk-Datei mit einem installierbaren Paket zu bauen. Dafür kann folgendes Script benutzt werden:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    name=$1&lt;br /&gt;
    if [ ! -f &amp;quot;/var/lib/opkg/info/$name.control&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Paket &amp;quot; $name &amp;quot; ist nicht installiert&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    builddir=/media/hdd/build.$$&lt;br /&gt;
    mkdir $builddir || exit 1&lt;br /&gt;
    &lt;br /&gt;
    # control-, list- und p-Dateien ins Build-Dir kopieren&lt;br /&gt;
    pushd /var/lib/opkg/info &amp;gt; /dev/null&lt;br /&gt;
    for file in $name.*; do&lt;br /&gt;
        cp $file $builddir/${file#&amp;quot;$name.&amp;quot;}&lt;br /&gt;
    done&lt;br /&gt;
    &lt;br /&gt;
    cd $builddir&lt;br /&gt;
    # opkg 0.7 führt in der File-Liste auch die File-Rechte; stört hier, also weg damit.&lt;br /&gt;
    sed -i -E -e &#039;s:\t[0-9]+$::&#039; list&lt;br /&gt;
&lt;br /&gt;
    # tar-Datei mit allen gelisteten Dateien erstellen&lt;br /&gt;
    tar -czf data.tar.gz --no-recursion -T list 2&amp;gt;/dev/null&lt;br /&gt;
    &lt;br /&gt;
    # opkg benötigt für jedes Verzeichnis einen eigenen Eintrag,&lt;br /&gt;
    # deswegen das tar-File noch einmal aus- und wieder einpacken.&lt;br /&gt;
    mkdir clean&lt;br /&gt;
    cd clean&lt;br /&gt;
    tar -xf ../data.tar.gz&lt;br /&gt;
    tar -czf ../data.tar.gz .&lt;br /&gt;
    cd ..&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz 2&amp;gt; /dev/null&lt;br /&gt;
    popd &amp;gt; /dev/null&lt;br /&gt;
    &lt;br /&gt;
    mv -i $builddir/$ipk .&lt;br /&gt;
    rm -fr $builddir&lt;br /&gt;
&lt;br /&gt;
Anmerkung: für dieses Script funktionieren die Busybox-Versionen von &#039;&#039;tar&#039;&#039; und &#039;&#039;ar&#039;&#039; nicht. &lt;br /&gt;
&lt;br /&gt;
=== Pakete selber bauen ===&lt;br /&gt;
Ein Paket ist eine Sammlung von zu installierenden Dateien, Metainformationen sowie vor und nach Installation auszuführenden Scripten. Als Paket-Container-Format wird dafür das unter Unix seit Ewigkeiten benutzte ar-Format verwendet, mit dem auch Bibliotheken für statische Libraries (.a-Files)  erstellt werden.&lt;br /&gt;
&lt;br /&gt;
In einer .ipk-Datei befinden sich immer drei Dateien: &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;debian-binary&#039;&#039;&#039;. In der Datei &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039; befinden sich alle Meta-Daten zum Programm:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; (diese Datei muss enthalten sein),&lt;br /&gt;
* &amp;lt;code&amp;gt;conffiles&amp;lt;/code&amp;gt; (optional Datei mit einer Liste von Konfigurationsfiles, die nicht überschrieben werden sollen; pro Zeile ein Filename - wird z.B. im Paket &amp;quot;base-files&amp;quot; benutzt, siehe &amp;lt;code&amp;gt;/var/lib/opkg/info/base-files.*&amp;lt;/code&amp;gt; auf der Box)&lt;br /&gt;
* &amp;lt;code&amp;gt;preinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;prerm&amp;lt;/code&amp;gt; (optional, Shellscripten, die vor dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
* &amp;lt;code&amp;gt;postinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postrm&amp;lt;/code&amp;gt; (optional, Shellscripten, die nach dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; beinhaltet die eigentlichen Paket-Daten, die installiert werden sollen. Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; wird von &#039;&#039;opkg&#039;&#039; im Root-Verzeichnis ausgepackt. &#039;&#039;opkg&#039;&#039; benutzt dafür seinen eigenen Entpacker, der - im Gegensatz zu &#039;&#039;tar&#039;&#039; pingelig ist, was fehlende Verzeichnisse im Tar-File angeht.&lt;br /&gt;
&lt;br /&gt;
==== Das &#039;&#039;control&#039;&#039; File ====&lt;br /&gt;
Bleibt noch das &#039;&#039;control&#039;&#039;-File zu erklären. Ein &#039;&#039;control&#039;&#039;-File besteht aus einer Reihe von &#039;&#039;&#039;Feld: Wert&#039;&#039;&#039;-Paaren, mit nachfolgend beschriebener Bedeutung. Dabei sind lediglich die Felder &#039;&#039;&#039;Package:&#039;&#039;&#039; und &#039;&#039;&#039;Architecture:&#039;&#039;&#039; Pflichtfelder, es ist aber sinnvoll, wenigstens noch &#039;&#039;&#039;Version:&#039;&#039;&#039; und &#039;&#039;&#039;Description:&#039;&#039;&#039; mit anzugeben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Package:&#039;&#039;&#039; (&#039;&#039;Pflichtfeld&#039;&#039;) ist der Paket-Name ohne die Versions-Nummer&lt;br /&gt;
* &#039;&#039;&#039;Architecture:&#039;&#039;&#039; (&#039;&#039;Pflichtfeld&#039;&#039;) bestimmt, unter welcher Architektur das Paket sinnvollerweise installiert werden kann. Hier nimmt man &amp;quot;all&amp;quot;, wenn es unabhängig vom Prozessor ist, also z.B. ein Python-Script. Ansonsten z.B. armv7ahf-vfp-neon wenn es spezifisch für eine unserer 4k-Boxen ist, weil z.B. ein kompiliertes Binary enthalten ist. Gültige Werte für &amp;quot;Architecture&amp;quot; für deine Box stehen in der Datei /etc/opkg/arch.conf.&lt;br /&gt;
* &#039;&#039;&#039;Version:&#039;&#039;&#039; (&#039;&#039;empfohlenes Feld&#039;&#039;) ist die Versionsnummer des Paketes. Hier fährt man sehr gut mit einer numerischen Versionsnummer (z.B. 1.2-r0), da opkg anhand der Versionsnummer alphanumerisch sortiert und entscheidet, ob ein Paket neuer als ein bereits installiertes ist. Versionsnummern a la &amp;quot;gitXXX&amp;quot; sind eher ungeeignet. Die Syntax für den Aufbau einer Versionsnummer ist: &amp;lt;code&amp;gt;[epoch:]upstream-version[-revision]:&amp;lt;/code&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;epoch&#039;&#039;&#039;: eine optionale ganze Zahl, gefolgt von einem Doppelpunkt. Wird sie weggelassen, wird sie als 0 angenommen. Sie dient nur dazu, eine neuere Sortierreihenfolge zu erzwingen, wenn sich das Versionsschema des Upstream-Projekts ändert oder ein Fehler korrigiert werden muss.&lt;br /&gt;
** &#039;&#039;&#039;upstream-version:&#039;&#039;&#039; die „echte“ Version der Originalsoftware (z. B. 2.4.1). Sie kann Buchstaben, Ziffern, Punkte, +-~ und, nur wenn eine Epoche angegeben ist, einen Doppelpunkt enthalten.&lt;br /&gt;
** &#039;&#039;&#039;revision&#039;&#039;&#039;: ein optionaler paketspezifischer Zähler nach dem letzten Bindestrich (z. B. -1). Er dient zur Unterscheidung von Neukompilationen oder eigenen kleinen Anpassungen derselben Upstream-Version.&lt;br /&gt;
* &#039;&#039;&#039;Description:&#039;&#039;&#039; (&#039;&#039;empfohlenes Feld&#039;&#039;) ausführliche Beschreibung des Pakets. Dieses Feld kann aus mehreren Zeilen bestehen, wobei nachfolgende Zeilen immer mit einem Leerzeichen beginnnen müssen, Absätze mit &amp;quot; .&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Depends:&#039;&#039;&#039; beschreibt die Abhängigkeiten zu anderen Paketen. Diese Zeile kann eine Liste von Paketen enthalten, die installiert sein müssen bzw. installiert werden sollen, wenn das Paket installiert wird. Für jedes Paket kann weiter noch angeben werden, welche Version benötigt wird. Das kann man durch (&amp;gt;&amp;gt; Version), (&amp;gt;= Version), (= Version), (&amp;lt;= Version), (&amp;lt;&amp;lt; Version) hinter dem Paketnamen angeben. &amp;gt;&amp;gt;: neuer als, &amp;gt;=: mindestens, =: genau gleich, &amp;lt;=: höchstens, &amp;lt;&amp;lt;: älter als.&lt;br /&gt;
* &#039;&#039;&#039;Conflicts:&#039;&#039;&#039; wenn die Installation dieses Paketes sich mit einem anderen Paket beisst (z.B. wenn beide Pakete gleiche Files installieren), werden die Pakete durch Komma getrennt hier aufgeführt. Siehe auch das Feld &#039;&#039;Replaces&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Installed-Size:&#039;&#039;&#039; hier kann der vom installierten Paket in Anspruch genommene Speicherplatz in KB angegeben werden&lt;br /&gt;
* &#039;&#039;&#039;Maintainer:&#039;&#039;&#039; Wer betreut dieses Paket?&lt;br /&gt;
* &#039;&#039;&#039;Priority:&#039;&#039;&#039;  extra, optional, required, standard&lt;br /&gt;
* &#039;&#039;&#039;Provides:&#039;&#039;&#039; Für kompliziertere Abhängigkeiten von Paketen mit virtuellen Paketen definiert &amp;quot;Provides:&amp;quot;, für welches virtuelle Paket das Paket eine Installation erfüllt. Dafür kann ein Paket z.B. &amp;quot;Depends: vpaket&amp;quot; voraussetzen, und unser Paket &amp;quot;Package: paket&amp;quot; sowie &amp;quot;Provides: vpaket&amp;quot; definieren. Das macht man gerne, wenn man Pakete für spezifische Hardware schnürt, z.B. eine bestimmte Box.&lt;br /&gt;
* &#039;&#039;&#039;Section:&#039;&#039;&#039; Welcher Sektion das Paket zugeordnet werden soll.&lt;br /&gt;
* &#039;&#039;&#039;Replaces:&#039;&#039;&#039; Manchmal gibt es für ein altes Paket ein neues, welches das alte ersetzt. Um Konflikte mit gleichen Files zu verhindern, kann man hier angeben, welches alte Paket unser Paket ersetzt.&lt;br /&gt;
* &#039;&#039;&#039;Source:&#039;&#039;&#039; Quelle des Pakets.&lt;br /&gt;
* &#039;&#039;&#039;Recommends:&#039;&#039;&#039; Liste von Paketen, für die es Sinn macht, zusätzlich zu diesem Paket installiert zu werden. Quasi eine sehr weiche Depends: Klausel.&lt;br /&gt;
* &#039;&#039;&#039;Suggests:&#039;&#039;&#039; Liste von Paketen, für die es vielleicht Sinn macht, zusätzlich zu diesem Paket installiert zu werden - eine noch weichere Depends: Klausel.&lt;br /&gt;
&lt;br /&gt;
Als Beispiele kann man sich die tausenden von &amp;lt;code&amp;gt;*.control&amp;lt;/code&amp;gt; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; anschauen. Pro installiertes Paket steht dort die &#039;&#039;control&#039;&#039;-Datei, die mit dem Paket ausgeliefert wurde.&lt;br /&gt;
&lt;br /&gt;
==== Ein Script um Pakete zu erstellen ====&lt;br /&gt;
Mit folgendem Script kann aus einem Installations-Verzeichnis heraus ein fertiges Paket gebaut werden. Dafür ist es nur nötig, eine fertige &#039;&#039;control&#039;&#039;-Datei und das fertige &#039;&#039;data.tar.gz&#039;&#039; im Verzeichnis abzulegen. Wenn man ein Programm fertig kompiliert hat, lässt es sich üblicherweise mit dem Kommando &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; installieren. Man kann aber bei den meisten Programmen heute &amp;lt;code&amp;gt;make install DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt; angeben, um das Programm unter einem anderen Root-Verzeichnis, z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;, zu installieren. Von hier kann man noch einmal schauen, was alles installiert würde, und von hier das &#039;&#039;data.tar.gz&#039;&#039;-File erstellen.&lt;br /&gt;
&lt;br /&gt;
Das folgende Script wird im Installations-Root (z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;) ausgeführt:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    if [ ! -f &amp;quot;control&amp;quot; -o ! -f &amp;quot;data.tar.gz&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Verzeichnis enthält keine Paketdaten&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz&lt;br /&gt;
&lt;br /&gt;
Wichtig: für dieses Script wird das &#039;&#039;ar&#039;&#039; aus den Binutils benötigt, hier funktioniert das &#039;&#039;ar&#039;&#039; aus Busybox nicht. Ein Binutils-Paket für die ARM-Architektur findet sich bei uns im Downloads-Bereich, für MIPSEL wird man fündig, wenn man im Netz nach Debian-Paketen sucht.&lt;br /&gt;
&lt;br /&gt;
== Änderungen in VTi-16 ==&lt;br /&gt;
VTi-16 kommt mit einer aktuelleren Version des Paket-Managers &#039;&#039;opkg&#039;&#039;: 0.7.0. Damit werden einige Verbesserungen eingeführt:&lt;br /&gt;
&lt;br /&gt;
* Der Daten-Container darf jetzt neben gzip auch mit zstd, xz, bzip2 oder lz4 gepackt werden. &lt;br /&gt;
* In der Liste der installierten Files werden jetzt auch die File-Berechtigungen gespeichert, mit denen das Archiv installiert wurde.&lt;br /&gt;
* Das Verzeichnis, in dem die Inhalte der installierten Feeds abgelegt werden, hat sich gegenüber den vorherigen VTi-Versionen geändert.&lt;br /&gt;
* Das in VTi-16 benutzte busybox kommt mit einem für das erstellen von ipk&#039;s geeigneten &amp;quot;ar&amp;quot; Befehl. Dieser muss nicht mehr separat installiert werden.&lt;br /&gt;
&lt;br /&gt;
Das hier vorgestellte Script zum Erstellen einer ipk-Datei aus einem bereits installierten Paket wurde deshalb leicht angepasst.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12922</id>
		<title>Paketmanager opkg</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12922"/>
		<updated>2026-09-20T13:48:14Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: Anpassungen seit VTi-16&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;opkg&#039;&#039; ist ein Paketmanager, zugeschnitten auf die Bedürfnisse von Embedded Systemen. Die Aufgabe eines Paketmanagers ist, die auf einem System (z.B. unseren VU+ Boxen) installierte Software zu verwalten. Die Software wird dazu in Pakete gebündelt. Mit dem Paketmanager können solche Pakete installiert, deinstalliert und gelöscht werden. Der Paketmanager ermöglicht es, Software-Pakete zentral zusammenzustellen und auch zentral zu verteilen. Dafür greift der Paketmanager auf den [[FEED|Feed]] zu - das ist das zentrale Repository, in dem alle Pakete zum Download für den Paketmanager bereitgestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Für die komplette Liste der Befehle, die &#039;&#039;opkg&#039;&#039; kennt, gibt man einfach &amp;lt;code&amp;gt;opkg&amp;lt;/code&amp;gt; in der Shell ein.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Befehle hier auf einen Blick:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg update&amp;lt;/code&amp;gt; || Aktualisiert die Liste der am Feed verfügbaren Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;okpg list-upgradable&amp;lt;/code&amp;gt; || Zeigt eine Liste aller Pakete an, für die es am Feed eine Aktualisierung gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg upgrade&amp;lt;/code&amp;gt; || Aktualisiert alle Pakete, für die es eine neuere Version am Feed gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen verfügbaren Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list-installed&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen installierten Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg install &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Installiert ein oder mehrere Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg remove &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Deinstalliert ein oder mehrere Pakete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Andere Paketmanager für Enigma2, Geschichte =&lt;br /&gt;
Der Vorläufer von &#039;&#039;opkg&#039;&#039; ist der [https://de.wikipedia.org/wiki/IPKG ipkg], der bis 2013 entwickelt wurde. &#039;&#039;opkg&#039;&#039; hat sich von &#039;&#039;ipkg&#039;&#039; abgespaltet, benutzt aber dasselbe Dateiformat und die Endung &#039;&#039;.ipk&#039;&#039; für die Pakete. Das Format orientiert sich an den bei Debian und neueren Enigma2-Systemen benutzten &#039;&#039;.deb&#039;&#039; Paketen. Allen gemeinsam ist, dass sie komprimierte [https://de.wikipedia.org/wiki/Ar_(Unix) ar] Dateien sind. Der Aufbau einer &#039;&#039;.ipk&#039;&#039;-Datei ist weiter unten genauer beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Informationen ==&lt;br /&gt;
Für die Benutzung des Paketmanagers sind die folgenden Informationen nicht wichtig. Das wird sich vermutlich ändern, wenn man selber Pakete bauen möchte. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;opkg&#039;&#039; benutzt drei Verzeichnisse für den Betrieb:&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &amp;lt;code&amp;gt;/etc/opkg/&amp;lt;/code&amp;gt; || Konfiguration für &#039;&#039;opkg&#039;&#039;; hier wird die Liste aller Feeds abgelegt und die Liste der benutzten Architekturen definiert.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; || Hier wird der Gesamt-Status der installierten Pakete gespeichert. Dies beinhaltet eine Liste aller Pakete, die am Feed verfügbar sind, als auch Listen mit allen Dateien, die von allen Paketen installiert wurden. &lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &amp;lt;code&amp;gt;/usr/lib/opkg/&amp;lt;/code&amp;gt; || Im Verzeichnis &amp;lt;code&amp;gt;/usr/lib/opkg/alternatives/&amp;lt;/code&amp;gt; werden Informationen zu allen Programmen verwaltet, für die es mehrere Installations-Kandidaten gibt. Ein gutes Beispiel ist [[Busybox und deren Befehle|busybox]], welches für eine Vielzahl von Standard-Unix-Programmen eine abgespeckte Variante zur Verfügung stellt. Wenn das Original-Programm ebenfalls installiert wird, soll natürlich nicht weiter die Busybox-Variante benutzt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; liegen die von den Feeds heruntergeladenen Dateien sowie in der Datei &amp;lt;code&amp;gt;/var/lib/opkg/status&amp;lt;/code&amp;gt; ein Liste (oder Datenbank) aller im System installierten Pakete. Das Format der einzelnen Blöcke in dieser Datei ist weitgehend identisch mit der im folgenden Abschnitt beschriebenen &#039;&#039;control&#039;&#039;-Dateien. Die einzelnen Blöcke enthalten zusätzlich zu den Informationen aus den &#039;&#039;control&#039;&#039;-Dateien noch den Zeitstempel, wann das Paket installiert wurde (&#039;&#039;Installed-Time: ...&#039;&#039;), sowie ob es als abhängiges Paket automatisch installiert wurde (&#039;&#039;Auto-Installed: yes&#039;&#039;) und einen Installations-Status (&#039;&#039;Status: ...&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Paket-Informationen ===&lt;br /&gt;
Informationen zu allen installierten Paketen legt &#039;&#039;opkg&#039;&#039; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; ab. In diesem Verzeichnis befinden sich zu jedem installierten Paket mehrere Dateien:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;paketname&#039;&#039;.control || Datei mit allen Meta-Informationen zum Paket &#039;&#039;paketname&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.list || Liste aller vom Paket installierten Dateien&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.preinst || (optional) Script, welches vor Entpacken des data.tar.gz Files von &#039;&#039;paketname&#039;&#039; ausgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postinst || (optional) Script, welches nach Entpacken des data.tar.gz von &#039;&#039;paketname&#039;&#039; ausgeführt wird. Alle Paket-Abhängigkeiten sind installiert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.prerm || (optional) Script, welches vor dem Löschen von irgendwelchen Dateien von &#039;&#039;paketname&#039;&#039; ausgeführt wird. Das Paket ist weterhin vorhanden, Abhängigkeiten verfügbar.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postrm || (optional) Script, welches nach dem Löschen der Dateien von &#039;&#039;paketname&#039;&#039; ausgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.conffiles || (optional) Liste aller vom Paket installierten Konfigurationsfiles, die beim Update nicht überschrieben werden sollen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zwischen &#039;&#039;preinst&#039;&#039; und &#039;&#039;postinst&#039;&#039; entpackt &#039;&#039;opkg&#039;&#039; das Datenarchiv der &#039;&#039;.ipk&#039;&#039;-Datei an den Zielort. Abhängigkeiten werden erfüllt, Konfigurationsdateien geschrieben und der Paketstatus ändert sich zu „installed“. &lt;br /&gt;
&lt;br /&gt;
Zwischen &#039;&#039;prerm&#039;&#039; und &#039;&#039;postrm&#039;&#039; entfernt &#039;&#039;opkg&#039;&#039; die Dateien aus der Liste &#039;&#039;paketname&#039;&#039;.list. &lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;ipk&#039;&#039;-Datei ist vom Format eine [https://de.wikipedia.org/wiki/Ar_(Unix) ar]-Datei, die immer 3 Dateien enthält: &lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;control.tar.gz&#039;&#039; || eine Tar-Datei mit den gerade beschriebenen Dateien aus &amp;lt;code&amp;gt;/var/lib/opkg/info&amp;lt;/code&amp;gt; eines Paketes außer der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;data.tar.gz&#039;&#039; || eine Tar-Datei mit den zu installierenden Files; dies entspricht dem Inhalt der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;debian-binary&#039;&#039; || enthält immer 2.0 als String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Neuere Versionen von &#039;&#039;opkg&#039;&#039; akzeptieren auch mit &#039;&#039;xz&#039;&#039; gepackte Tar-Dateien. Die bei VTi genutzte Version kann nur mit .gz Dateien umgehen.&lt;br /&gt;
&lt;br /&gt;
Mit diesen Informationen ist es einfach, zu einem installierten Paket wieder eine ipk-Datei mit einem installierbaren Paket zu bauen. Dafür kann folgendes Script benutzt werden:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    name=$1&lt;br /&gt;
    if [ ! -f &amp;quot;/var/lib/opkg/info/$name.control&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Paket &amp;quot; $name &amp;quot; ist nicht installiert&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    builddir=/media/hdd/build.$$&lt;br /&gt;
    mkdir $builddir || exit 1&lt;br /&gt;
    &lt;br /&gt;
    # control-, list- und p-Dateien ins Build-Dir kopieren&lt;br /&gt;
    pushd /var/lib/opkg/info &amp;gt; /dev/null&lt;br /&gt;
    for file in $name.*; do&lt;br /&gt;
        cp $file $builddir/${file#&amp;quot;$name.&amp;quot;}&lt;br /&gt;
    done&lt;br /&gt;
    &lt;br /&gt;
    cd $builddir&lt;br /&gt;
    &lt;br /&gt;
    # tar-Datei mit allen gelisteten Dateien erstellen&lt;br /&gt;
    tar -czf data.tar.gz --no-recursion -T list 2&amp;gt;/dev/null&lt;br /&gt;
    &lt;br /&gt;
    # opkg benötigt für jedes Verzeichnis einen eigenen Eintrag,&lt;br /&gt;
    # deswegen das tar-File noch einmal aus- und wieder einpacken.&lt;br /&gt;
    mkdir clean&lt;br /&gt;
    cd clean&lt;br /&gt;
    tar -xf ../data.tar.gz&lt;br /&gt;
    tar -czf ../data.tar.gz .&lt;br /&gt;
    cd ..&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz 2&amp;gt; /dev/null&lt;br /&gt;
    popd &amp;gt; /dev/null&lt;br /&gt;
    &lt;br /&gt;
    mv -i $builddir/$ipk .&lt;br /&gt;
    rm -fr $builddir&lt;br /&gt;
&lt;br /&gt;
Anmerkung: für dieses Script funktionieren die Busybox-Versionen von &#039;&#039;tar&#039;&#039; und &#039;&#039;ar&#039;&#039; nicht. &lt;br /&gt;
&lt;br /&gt;
=== Pakete selber bauen ===&lt;br /&gt;
Ein Paket ist eine Sammlung von zu installierenden Dateien, Metainformationen sowie vor und nach Installation auszuführenden Scripten. Als Paket-Container-Format wird dafür das unter Unix seit Ewigkeiten benutzte ar-Format verwendet, mit dem auch Bibliotheken für statische Libraries (.a-Files)  erstellt werden.&lt;br /&gt;
&lt;br /&gt;
In einer .ipk-Datei befinden sich immer drei Dateien: &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;debian-binary&#039;&#039;&#039;. In der Datei &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039; befinden sich alle Meta-Daten zum Programm:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; (diese Datei muss enthalten sein),&lt;br /&gt;
* &amp;lt;code&amp;gt;conffiles&amp;lt;/code&amp;gt; (optional Datei mit einer Liste von Konfigurationsfiles, die nicht überschrieben werden sollen; pro Zeile ein Filename - wird z.B. im Paket &amp;quot;base-files&amp;quot; benutzt, siehe &amp;lt;code&amp;gt;/var/lib/opkg/info/base-files.*&amp;lt;/code&amp;gt; auf der Box)&lt;br /&gt;
* &amp;lt;code&amp;gt;preinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;prerm&amp;lt;/code&amp;gt; (optional, Shellscripten, die vor dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
* &amp;lt;code&amp;gt;postinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postrm&amp;lt;/code&amp;gt; (optional, Shellscripten, die nach dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; beinhaltet die eigentlichen Paket-Daten, die installiert werden sollen. Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; wird von &#039;&#039;opkg&#039;&#039; im Root-Verzeichnis ausgepackt. &#039;&#039;opkg&#039;&#039; benutzt dafür seinen eigenen Entpacker, der - im Gegensatz zu &#039;&#039;tar&#039;&#039; pingelig ist, was fehlende Verzeichnisse im Tar-File angeht.&lt;br /&gt;
&lt;br /&gt;
==== Das &#039;&#039;control&#039;&#039; File ====&lt;br /&gt;
Bleibt noch das &#039;&#039;control&#039;&#039;-File zu erklären. Ein &#039;&#039;control&#039;&#039;-File besteht aus einer Reihe von &#039;&#039;&#039;Feld: Wert&#039;&#039;&#039;-Paaren, mit nachfolgend beschriebener Bedeutung. Dabei sind lediglich die Felder &#039;&#039;&#039;Package:&#039;&#039;&#039; und &#039;&#039;&#039;Architecture:&#039;&#039;&#039; Pflichtfelder, es ist aber sinnvoll, wenigstens noch &#039;&#039;&#039;Version:&#039;&#039;&#039; und &#039;&#039;&#039;Description:&#039;&#039;&#039; mit anzugeben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Package:&#039;&#039;&#039; (&#039;&#039;Pflichtfeld&#039;&#039;) ist der Paket-Name ohne die Versions-Nummer&lt;br /&gt;
* &#039;&#039;&#039;Architecture:&#039;&#039;&#039; (&#039;&#039;Pflichtfeld&#039;&#039;) bestimmt, unter welcher Architektur das Paket sinnvollerweise installiert werden kann. Hier nimmt man &amp;quot;all&amp;quot;, wenn es unabhängig vom Prozessor ist, also z.B. ein Python-Script. Ansonsten z.B. armv7ahf-vfp-neon wenn es spezifisch für eine unserer 4k-Boxen ist, weil z.B. ein kompiliertes Binary enthalten ist. Gültige Werte für &amp;quot;Architecture&amp;quot; für deine Box stehen in der Datei /etc/opkg/arch.conf.&lt;br /&gt;
* &#039;&#039;&#039;Version:&#039;&#039;&#039; (&#039;&#039;empfohlenes Feld&#039;&#039;) ist die Versionsnummer des Paketes. Hier fährt man sehr gut mit einer numerischen Versionsnummer (z.B. 1.2-r0), da opkg anhand der Versionsnummer alphanumerisch sortiert und entscheidet, ob ein Paket neuer als ein bereits installiertes ist. Versionsnummern a la &amp;quot;gitXXX&amp;quot; sind eher ungeeignet. Die Syntax für den Aufbau einer Versionsnummer ist: &amp;lt;code&amp;gt;[epoch:]upstream-version[-revision]:&amp;lt;/code&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;epoch&#039;&#039;&#039;: eine optionale ganze Zahl, gefolgt von einem Doppelpunkt. Wird sie weggelassen, wird sie als 0 angenommen. Sie dient nur dazu, eine neuere Sortierreihenfolge zu erzwingen, wenn sich das Versionsschema des Upstream-Projekts ändert oder ein Fehler korrigiert werden muss.&lt;br /&gt;
** &#039;&#039;&#039;upstream-version:&#039;&#039;&#039; die „echte“ Version der Originalsoftware (z. B. 2.4.1). Sie kann Buchstaben, Ziffern, Punkte, +-~ und, nur wenn eine Epoche angegeben ist, einen Doppelpunkt enthalten.&lt;br /&gt;
** &#039;&#039;&#039;revision&#039;&#039;&#039;: ein optionaler paketspezifischer Zähler nach dem letzten Bindestrich (z. B. -1). Er dient zur Unterscheidung von Neukompilationen oder eigenen kleinen Anpassungen derselben Upstream-Version.&lt;br /&gt;
* &#039;&#039;&#039;Description:&#039;&#039;&#039; (&#039;&#039;empfohlenes Feld&#039;&#039;) ausführliche Beschreibung des Pakets. Dieses Feld kann aus mehreren Zeilen bestehen, wobei nachfolgende Zeilen immer mit einem Leerzeichen beginnnen müssen, Absätze mit &amp;quot; .&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Depends:&#039;&#039;&#039; beschreibt die Abhängigkeiten zu anderen Paketen. Diese Zeile kann eine Liste von Paketen enthalten, die installiert sein müssen bzw. installiert werden sollen, wenn das Paket installiert wird. Für jedes Paket kann weiter noch angeben werden, welche Version benötigt wird. Das kann man durch (&amp;gt;&amp;gt; Version), (&amp;gt;= Version), (= Version), (&amp;lt;= Version), (&amp;lt;&amp;lt; Version) hinter dem Paketnamen angeben. &amp;gt;&amp;gt;: neuer als, &amp;gt;=: mindestens, =: genau gleich, &amp;lt;=: höchstens, &amp;lt;&amp;lt;: älter als.&lt;br /&gt;
* &#039;&#039;&#039;Conflicts:&#039;&#039;&#039; wenn die Installation dieses Paketes sich mit einem anderen Paket beisst (z.B. wenn beide Pakete gleiche Files installieren), werden die Pakete durch Komma getrennt hier aufgeführt. Siehe auch das Feld &#039;&#039;Replaces&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Installed-Size:&#039;&#039;&#039; hier kann der vom installierten Paket in Anspruch genommene Speicherplatz in KB angegeben werden&lt;br /&gt;
* &#039;&#039;&#039;Maintainer:&#039;&#039;&#039; Wer betreut dieses Paket?&lt;br /&gt;
* &#039;&#039;&#039;Priority:&#039;&#039;&#039;  extra, optional, required, standard&lt;br /&gt;
* &#039;&#039;&#039;Provides:&#039;&#039;&#039; Für kompliziertere Abhängigkeiten von Paketen mit virtuellen Paketen definiert &amp;quot;Provides:&amp;quot;, für welches virtuelle Paket das Paket eine Installation erfüllt. Dafür kann ein Paket z.B. &amp;quot;Depends: vpaket&amp;quot; voraussetzen, und unser Paket &amp;quot;Package: paket&amp;quot; sowie &amp;quot;Provides: vpaket&amp;quot; definieren. Das macht man gerne, wenn man Pakete für spezifische Hardware schnürt, z.B. eine bestimmte Box.&lt;br /&gt;
* &#039;&#039;&#039;Section:&#039;&#039;&#039; Welcher Sektion das Paket zugeordnet werden soll.&lt;br /&gt;
* &#039;&#039;&#039;Replaces:&#039;&#039;&#039; Manchmal gibt es für ein altes Paket ein neues, welches das alte ersetzt. Um Konflikte mit gleichen Files zu verhindern, kann man hier angeben, welches alte Paket unser Paket ersetzt.&lt;br /&gt;
* &#039;&#039;&#039;Source:&#039;&#039;&#039; Quelle des Pakets.&lt;br /&gt;
* &#039;&#039;&#039;Recommends:&#039;&#039;&#039; Liste von Paketen, für die es Sinn macht, zusätzlich zu diesem Paket installiert zu werden. Quasi eine sehr weiche Depends: Klausel.&lt;br /&gt;
* &#039;&#039;&#039;Suggests:&#039;&#039;&#039; Liste von Paketen, für die es vielleicht Sinn macht, zusätzlich zu diesem Paket installiert zu werden - eine noch weichere Depends: Klausel.&lt;br /&gt;
&lt;br /&gt;
Als Beispiele kann man sich die tausenden von &amp;lt;code&amp;gt;*.control&amp;lt;/code&amp;gt; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; anschauen. Pro installiertes Paket steht dort die &#039;&#039;control&#039;&#039;-Datei, die mit dem Paket ausgeliefert wurde.&lt;br /&gt;
&lt;br /&gt;
==== Ein Script um Pakete zu erstellen ====&lt;br /&gt;
Mit folgendem Script kann aus einem Installations-Verzeichnis heraus ein fertiges Paket gebaut werden. Dafür ist es nur nötig, eine fertige &#039;&#039;control&#039;&#039;-Datei und das fertige &#039;&#039;data.tar.gz&#039;&#039; im Verzeichnis abzulegen. Wenn man ein Programm fertig kompiliert hat, lässt es sich üblicherweise mit dem Kommando &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; installieren. Man kann aber bei den meisten Programmen heute &amp;lt;code&amp;gt;make install DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt; angeben, um das Programm unter einem anderen Root-Verzeichnis, z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;, zu installieren. Von hier kann man noch einmal schauen, was alles installiert würde, und von hier das &#039;&#039;data.tar.gz&#039;&#039;-File erstellen.&lt;br /&gt;
&lt;br /&gt;
Das folgende Script wird im Installations-Root (z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;) ausgeführt:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    if [ ! -f &amp;quot;control&amp;quot; -o ! -f &amp;quot;data.tar.gz&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Verzeichnis enthält keine Paketdaten&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz&lt;br /&gt;
&lt;br /&gt;
Wichtig: für dieses Script wird das &#039;&#039;ar&#039;&#039; aus den Binutils benötigt, hier funktioniert das &#039;&#039;ar&#039;&#039; aus Busybox nicht. Ein Binutils-Paket für die ARM-Architektur findet sich bei uns im Downloads-Bereich, für MIPSEL wird man fündig, wenn man im Netz nach Debian-Paketen sucht.&lt;br /&gt;
&lt;br /&gt;
== Änderungen in VTi-16 ==&lt;br /&gt;
VTi-16 kommt mit einer aktuelleren Version des Paket-Managers &#039;&#039;opkg&#039;&#039;: 0.7.0. Damit werden einige Verbesserungen eingeführt:&lt;br /&gt;
&lt;br /&gt;
* Der Daten-Container darf jetzt neben gzip auch mit zstd, xz, bzip2 oder lz4 gepackt werden. &lt;br /&gt;
* In der Liste der installierten Files werden jetzt auch die File-Berechtigungen gespeichert, mit denen das Archiv installiert wurde.&lt;br /&gt;
* Das Verzeichnis, in dem die Inhalte der installierten Feeds abgelegt werden, hat sich gegenüber den vorherigen VTi-Versionen geändert.&lt;br /&gt;
* Das in VTi-16 benutzte busybox kommt mit einem für das erstellen von ipk&#039;s geeigneten &amp;quot;ar&amp;quot; Befehl. Dieser muss nicht mehr separat installiert werden.&lt;br /&gt;
&lt;br /&gt;
Das hier vorgestellte Script zum Erstellen einer ipk-Datei aus einem bereits installierten Paket wurde deshalb leicht angepasst.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12729</id>
		<title>Paketmanager opkg</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12729"/>
		<updated>2026-07-20T08:34:56Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: Erklärungen zu pre- und post-Skripten sowie Paket-Versionsnummer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;opkg&#039;&#039; ist ein Paketmanager, zugeschnitten auf die Bedürfnisse von Embedded Systemen. Die Aufgabe eines Paketmanagers ist, die auf einem System (z.B. unseren VU+ Boxen) installierte Software zu verwalten. Die Software wird dazu in Pakete gebündelt. Mit dem Paketmanager können solche Pakete installiert, deinstalliert und gelöscht werden. Der Paketmanager ermöglicht es, Software-Pakete zentral zusammenzustellen und auch zentral zu verteilen. Dafür greift der Paketmanager auf den [[FEED|Feed]] zu - das ist das zentrale Repository, in dem alle Pakete zum Download für den Paketmanager bereitgestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Für die komplette Liste der Befehle, die &#039;&#039;opkg&#039;&#039; kennt, gibt man einfach &amp;lt;code&amp;gt;opkg&amp;lt;/code&amp;gt; in der Shell ein.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Befehle hier auf einen Blick:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg update&amp;lt;/code&amp;gt; || Aktualisiert die Liste der am Feed verfügbaren Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;okpg list-upgradable&amp;lt;/code&amp;gt; || Zeigt eine Liste aller Pakete an, für die es am Feed eine Aktualisierung gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg upgrade&amp;lt;/code&amp;gt; || Aktualisiert alle Pakete, für die es eine neuere Version am Feed gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen verfügbaren Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list-installed&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen installierten Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg install &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Installiert ein oder mehrere Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg remove &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Deinstalliert ein oder mehrere Pakete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Andere Paketmanager für Enigma2, Geschichte =&lt;br /&gt;
Der Vorläufer von &#039;&#039;opkg&#039;&#039; ist der [https://de.wikipedia.org/wiki/IPKG ipkg], der bis 2013 entwickelt wurde. &#039;&#039;opkg&#039;&#039; hat sich von &#039;&#039;ipkg&#039;&#039; abgespaltet, benutzt aber dasselbe Dateiformat und die Endung &#039;&#039;.ipk&#039;&#039; für die Pakete. Das Format orientiert sich an den bei Debian und neueren Enigma2-Systemen benutzten &#039;&#039;.deb&#039;&#039; Paketen. Allen gemeinsam ist, dass sie komprimierte [https://de.wikipedia.org/wiki/Ar_(Unix) ar] Dateien sind. Der Aufbau einer &#039;&#039;.ipk&#039;&#039;-Datei ist weiter unten genauer beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Informationen ==&lt;br /&gt;
Für die Benutzung des Paketmanagers sind die folgenden Informationen nicht wichtig. Das wird sich vermutlich ändern, wenn man selber Pakete bauen möchte. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;opkg&#039;&#039; benutzt drei Verzeichnisse für den Betrieb:&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &amp;lt;code&amp;gt;/etc/opkg/&amp;lt;/code&amp;gt; || Konfiguration für &#039;&#039;opkg&#039;&#039;; hier wird die Liste aller Feeds abgelegt und die Liste der benutzten Architekturen definiert.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; || Hier wird der Gesamt-Status der installierten Pakete gespeichert. Dies beinhaltet eine Liste aller Pakete, die am Feed verfügbar sind, als auch Listen mit allen Dateien, die von allen Paketen installiert wurden. &lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &amp;lt;code&amp;gt;/usr/lib/opkg/&amp;lt;/code&amp;gt; || Im Verzeichnis &amp;lt;code&amp;gt;/usr/lib/opkg/alternatives/&amp;lt;/code&amp;gt; werden Informationen zu allen Programmen verwaltet, für die es mehrere Installations-Kandidaten gibt. Ein gutes Beispiel ist [[Busybox und deren Befehle|busybox]], welches für eine Vielzahl von Standard-Unix-Programmen eine abgespeckte Variante zur Verfügung stellt. Wenn das Original-Programm ebenfalls installiert wird, soll natürlich nicht weiter die Busybox-Variante benutzt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; liegen die von den Feeds heruntergeladenen Dateien sowie in der Datei &amp;lt;code&amp;gt;/var/lib/opkg/status&amp;lt;/code&amp;gt; ein Liste (oder Datenbank) aller im System installierten Pakete. Das Format der einzelnen Blöcke in dieser Datei ist weitgehend identisch mit der im folgenden Abschnitt beschriebenen &#039;&#039;control&#039;&#039;-Dateien. Die einzelnen Blöcke enthalten zusätzlich zu den Informationen aus den &#039;&#039;control&#039;&#039;-Dateien noch den Zeitstempel, wann das Paket installiert wurde (&#039;&#039;Installed-Time: ...&#039;&#039;), sowie ob es als abhängiges Paket automatisch installiert wurde (&#039;&#039;Auto-Installed: yes&#039;&#039;) und einen Installations-Status (&#039;&#039;Status: ...&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Paket-Informationen ===&lt;br /&gt;
Informationen zu allen installierten Paketen legt &#039;&#039;opkg&#039;&#039; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; ab. In diesem Verzeichnis befinden sich zu jedem installierten Paket mehrere Dateien:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;paketname&#039;&#039;.control || Datei mit allen Meta-Informationen zum Paket &#039;&#039;paketname&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.list || Liste aller vom Paket installierten Dateien&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.preinst || (optional) Script, welches vor Entpacken des data.tar.gz Files von &#039;&#039;paketname&#039;&#039; ausgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postinst || (optional) Script, welches nach Entpacken des data.tar.gz von &#039;&#039;paketname&#039;&#039; ausgeführt wird. Alle Paket-Abhängigkeiten sind installiert.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.prerm || (optional) Script, welches vor dem Löschen von irgendwelchen Dateien von &#039;&#039;paketname&#039;&#039; ausgeführt wird. Das Paket ist weterhin vorhanden, Abhängigkeiten verfügbar.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postrm || (optional) Script, welches nach dem Löschen der Dateien von &#039;&#039;paketname&#039;&#039; ausgeführt wird.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.conffiles || (optional) Liste aller vom Paket installierten Konfigurationsfiles, die beim Update nicht überschrieben werden sollen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Zwischen &#039;&#039;preinst&#039;&#039; und &#039;&#039;postinst&#039;&#039; entpackt &#039;&#039;opkg&#039;&#039; das Datenarchiv der &#039;&#039;.ipk&#039;&#039;-Datei an den Zielort. Abhängigkeiten werden erfüllt, Konfigurationsdateien geschrieben und der Paketstatus ändert sich zu „installed“. &lt;br /&gt;
&lt;br /&gt;
Zwischen &#039;&#039;prerm&#039;&#039; und &#039;&#039;postrm&#039;&#039; entfernt &#039;&#039;opkg&#039;&#039; die Dateien aus der Liste &#039;&#039;paketname&#039;&#039;.list. &lt;br /&gt;
&lt;br /&gt;
Eine &#039;&#039;ipk&#039;&#039;-Datei ist vom Format eine [https://de.wikipedia.org/wiki/Ar_(Unix) ar]-Datei, die immer 3 Dateien enthält: &lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;control.tar.gz&#039;&#039; || eine Tar-Datei mit den gerade beschriebenen Dateien aus &amp;lt;code&amp;gt;/var/lib/opkg/info&amp;lt;/code&amp;gt; eines Paketes außer der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;data.tar.gz&#039;&#039; || eine Tar-Datei mit den zu installierenden Files; dies entspricht dem Inhalt der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;debian-binary&#039;&#039; || enthält immer 2.0 als String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Neuere Versionen von &#039;&#039;opkg&#039;&#039; akzeptieren auch mit &#039;&#039;xz&#039;&#039; gepackte Tar-Dateien. Die bei VTi genutzte Version kann nur mit .gz Dateien umgehen.&lt;br /&gt;
&lt;br /&gt;
Mit diesen Informationen ist es einfach, zu einem installierten Paket wieder eine ipk-Datei mit einem installierbaren Paket zu bauen. Dafür kann folgendes Script benutzt werden:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    name=$1&lt;br /&gt;
    if [ ! -f &amp;quot;/var/lib/opkg/info/$name.control&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Paket &amp;quot; $name &amp;quot; ist nicht installiert&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    builddir=/media/hdd/build.$$&lt;br /&gt;
    mkdir $builddir || exit 1&lt;br /&gt;
    &lt;br /&gt;
    # control-, list- und p-Dateien ins Build-Dir kopieren&lt;br /&gt;
    pushd /var/lib/opkg/info &amp;gt; /dev/null&lt;br /&gt;
    for file in $name.*; do&lt;br /&gt;
        cp $file $builddir/${file#&amp;quot;$name.&amp;quot;}&lt;br /&gt;
    done&lt;br /&gt;
    &lt;br /&gt;
    cd $builddir&lt;br /&gt;
    &lt;br /&gt;
    # tar-Datei mit allen gelisteten Dateien erstellen&lt;br /&gt;
    tar -czf data.tar.gz --no-recursion -T list 2&amp;gt;/dev/null&lt;br /&gt;
    &lt;br /&gt;
    # opkg benötigt für jedes Verzeichnis einen eigenen Eintrag,&lt;br /&gt;
    # deswegen das tar-File noch einmal aus- und wieder einpacken.&lt;br /&gt;
    mkdir clean&lt;br /&gt;
    cd clean&lt;br /&gt;
    tar -xf ../data.tar.gz&lt;br /&gt;
    tar -czf ../data.tar.gz .&lt;br /&gt;
    cd ..&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz 2&amp;gt; /dev/null&lt;br /&gt;
    popd &amp;gt; /dev/null&lt;br /&gt;
    &lt;br /&gt;
    mv -i $builddir/$ipk .&lt;br /&gt;
    rm -fr $builddir&lt;br /&gt;
&lt;br /&gt;
Anmerkung: für dieses Script funktionieren die Busybox-Versionen von &#039;&#039;tar&#039;&#039; und &#039;&#039;ar&#039;&#039; nicht. &lt;br /&gt;
&lt;br /&gt;
=== Pakete selber bauen ===&lt;br /&gt;
Ein Paket ist eine Sammlung von zu installierenden Dateien, Metainformationen sowie vor und nach Installation auszuführenden Scripten. Als Paket-Container-Format wird dafür das unter Unix seit Ewigkeiten benutzte ar-Format verwendet, mit dem auch Bibliotheken für statische Libraries (.a-Files)  erstellt werden.&lt;br /&gt;
&lt;br /&gt;
In einer .ipk-Datei befinden sich immer drei Dateien: &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;debian-binary&#039;&#039;&#039;. In der Datei &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039; befinden sich alle Meta-Daten zum Programm:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; (diese Datei muss enthalten sein),&lt;br /&gt;
* &amp;lt;code&amp;gt;conffiles&amp;lt;/code&amp;gt; (optional Datei mit einer Liste von Konfigurationsfiles, die nicht überschrieben werden sollen; pro Zeile ein Filename - wird z.B. im Paket &amp;quot;base-files&amp;quot; benutzt, siehe &amp;lt;code&amp;gt;/var/lib/opkg/info/base-files.*&amp;lt;/code&amp;gt; auf der Box)&lt;br /&gt;
* &amp;lt;code&amp;gt;preinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;prerm&amp;lt;/code&amp;gt; (optional, Shellscripten, die vor dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
* &amp;lt;code&amp;gt;postinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postrm&amp;lt;/code&amp;gt; (optional, Shellscripten, die nach dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; beinhaltet die eigentlichen Paket-Daten, die installiert werden sollen. Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; wird von &#039;&#039;opkg&#039;&#039; im Root-Verzeichnis ausgepackt. &#039;&#039;opkg&#039;&#039; benutzt dafür seinen eigenen Entpacker, der - im Gegensatz zu &#039;&#039;tar&#039;&#039; pingelig ist, was fehlende Verzeichnisse im Tar-File angeht.&lt;br /&gt;
&lt;br /&gt;
==== Das &#039;&#039;control&#039;&#039; File ====&lt;br /&gt;
Bleibt noch das &#039;&#039;control&#039;&#039;-File zu erklären. Ein &#039;&#039;control&#039;&#039;-File besteht aus einer Reihe von &#039;&#039;&#039;Feld: Wert&#039;&#039;&#039;-Paaren, mit nachfolgend beschriebener Bedeutung. Dabei sind lediglich die Felder &#039;&#039;&#039;Package:&#039;&#039;&#039; und &#039;&#039;&#039;Architecture:&#039;&#039;&#039; Pflichtfelder, es ist aber sinnvoll, wenigstens noch &#039;&#039;&#039;Version:&#039;&#039;&#039; und &#039;&#039;&#039;Description:&#039;&#039;&#039; mit anzugeben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Package:&#039;&#039;&#039; (&#039;&#039;Pflichtfeld&#039;&#039;) ist der Paket-Name ohne die Versions-Nummer&lt;br /&gt;
* &#039;&#039;&#039;Architecture:&#039;&#039;&#039; (&#039;&#039;Pflichtfeld&#039;&#039;) bestimmt, unter welcher Architektur das Paket sinnvollerweise installiert werden kann. Hier nimmt man &amp;quot;all&amp;quot;, wenn es unabhängig vom Prozessor ist, also z.B. ein Python-Script. Ansonsten z.B. armv7ahf-vfp-neon wenn es spezifisch für eine unserer 4k-Boxen ist, weil z.B. ein kompiliertes Binary enthalten ist. Gültige Werte für &amp;quot;Architecture&amp;quot; für deine Box stehen in der Datei /etc/opkg/arch.conf.&lt;br /&gt;
* &#039;&#039;&#039;Version:&#039;&#039;&#039; (&#039;&#039;empfohlenes Feld&#039;&#039;) ist die Versionsnummer des Paketes. Hier fährt man sehr gut mit einer numerischen Versionsnummer (z.B. 1.2-r0), da opkg anhand der Versionsnummer alphanumerisch sortiert und entscheidet, ob ein Paket neuer als ein bereits installiertes ist. Versionsnummern a la &amp;quot;gitXXX&amp;quot; sind eher ungeeignet. Die Syntax für den Aufbau einer Versionsnummer ist: &amp;lt;code&amp;gt;[epoch:]upstream-version[-revision]:&amp;lt;/code&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;epoch&#039;&#039;&#039;: eine optionale ganze Zahl, gefolgt von einem Doppelpunkt. Wird sie weggelassen, wird sie als 0 angenommen. Sie dient nur dazu, eine neuere Sortierreihenfolge zu erzwingen, wenn sich das Versionsschema des Upstream-Projekts ändert oder ein Fehler korrigiert werden muss.&lt;br /&gt;
** &#039;&#039;&#039;upstream-version:&#039;&#039;&#039; die „echte“ Version der Originalsoftware (z. B. 2.4.1). Sie kann Buchstaben, Ziffern, Punkte, +-~ und, nur wenn eine Epoche angegeben ist, einen Doppelpunkt enthalten.&lt;br /&gt;
** &#039;&#039;&#039;revision&#039;&#039;&#039;: ein optionaler paketspezifischer Zähler nach dem letzten Bindestrich (z. B. -1). Er dient zur Unterscheidung von Neukompilationen oder eigenen kleinen Anpassungen derselben Upstream-Version.&lt;br /&gt;
* &#039;&#039;&#039;Description:&#039;&#039;&#039; (&#039;&#039;empfohlenes Feld&#039;&#039;) ausführliche Beschreibung des Pakets. Dieses Feld kann aus mehreren Zeilen bestehen, wobei nachfolgende Zeilen immer mit einem Leerzeichen beginnnen müssen, Absätze mit &amp;quot; .&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Depends:&#039;&#039;&#039; beschreibt die Abhängigkeiten zu anderen Paketen. Diese Zeile kann eine Liste von Paketen enthalten, die installiert sein müssen bzw. installiert werden sollen, wenn das Paket installiert wird. Für jedes Paket kann weiter noch angeben werden, welche Version benötigt wird. Das kann man durch (&amp;gt;&amp;gt; Version), (&amp;gt;= Version), (= Version), (&amp;lt;= Version), (&amp;lt;&amp;lt; Version) hinter dem Paketnamen angeben. &amp;gt;&amp;gt;: neuer als, &amp;gt;=: mindestens, =: genau gleich, &amp;lt;=: höchstens, &amp;lt;&amp;lt;: älter als.&lt;br /&gt;
* &#039;&#039;&#039;Conflicts:&#039;&#039;&#039; wenn die Installation dieses Paketes sich mit einem anderen Paket beisst (z.B. wenn beide Pakete gleiche Files installieren), werden die Pakete durch Komma getrennt hier aufgeführt. Siehe auch das Feld &#039;&#039;Replaces&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Installed-Size:&#039;&#039;&#039; hier kann der vom installierten Paket in Anspruch genommene Speicherplatz in KB angegeben werden&lt;br /&gt;
* &#039;&#039;&#039;Maintainer:&#039;&#039;&#039; Wer betreut dieses Paket?&lt;br /&gt;
* &#039;&#039;&#039;Priority:&#039;&#039;&#039;  extra, optional, required, standard&lt;br /&gt;
* &#039;&#039;&#039;Provides:&#039;&#039;&#039; Für kompliziertere Abhängigkeiten von Paketen mit virtuellen Paketen definiert &amp;quot;Provides:&amp;quot;, für welches virtuelle Paket das Paket eine Installation erfüllt. Dafür kann ein Paket z.B. &amp;quot;Depends: vpaket&amp;quot; voraussetzen, und unser Paket &amp;quot;Package: paket&amp;quot; sowie &amp;quot;Provides: vpaket&amp;quot; definieren. Das macht man gerne, wenn man Pakete für spezifische Hardware schnürt, z.B. eine bestimmte Box.&lt;br /&gt;
* &#039;&#039;&#039;Section:&#039;&#039;&#039; Welcher Sektion das Paket zugeordnet werden soll.&lt;br /&gt;
* &#039;&#039;&#039;Replaces:&#039;&#039;&#039; Manchmal gibt es für ein altes Paket ein neues, welches das alte ersetzt. Um Konflikte mit gleichen Files zu verhindern, kann man hier angeben, welches alte Paket unser Paket ersetzt.&lt;br /&gt;
* &#039;&#039;&#039;Source:&#039;&#039;&#039; Quelle des Pakets.&lt;br /&gt;
* &#039;&#039;&#039;Recommends:&#039;&#039;&#039; Liste von Paketen, für die es Sinn macht, zusätzlich zu diesem Paket installiert zu werden. Quasi eine sehr weiche Depends: Klausel.&lt;br /&gt;
* &#039;&#039;&#039;Suggests:&#039;&#039;&#039; Liste von Paketen, für die es vielleicht Sinn macht, zusätzlich zu diesem Paket installiert zu werden - eine noch weichere Depends: Klausel.&lt;br /&gt;
&lt;br /&gt;
Als Beispiele kann man sich die tausenden von &amp;lt;code&amp;gt;*.control&amp;lt;/code&amp;gt; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; anschauen. Pro installiertes Paket steht dort die &#039;&#039;control&#039;&#039;-Datei, die mit dem Paket ausgeliefert wurde.&lt;br /&gt;
&lt;br /&gt;
==== Ein Script um Pakete zu erstellen ====&lt;br /&gt;
Mit folgendem Script kann aus einem Installations-Verzeichnis heraus ein fertiges Paket gebaut werden. Dafür ist es nur nötig, eine fertige &#039;&#039;control&#039;&#039;-Datei und das fertige &#039;&#039;data.tar.gz&#039;&#039; im Verzeichnis abzulegen. Wenn man ein Programm fertig kompiliert hat, lässt es sich üblicherweise mit dem Kommando &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; installieren. Man kann aber bei den meisten Programmen heute &amp;lt;code&amp;gt;make install DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt; angeben, um das Programm unter einem anderen Root-Verzeichnis, z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;, zu installieren. Von hier kann man noch einmal schauen, was alles installiert würde, und von hier das &#039;&#039;data.tar.gz&#039;&#039;-File erstellen.&lt;br /&gt;
&lt;br /&gt;
Das folgende Script wird im Installations-Root (z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;) ausgeführt:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    if [ ! -f &amp;quot;control&amp;quot; -o ! -f &amp;quot;data.tar.gz&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Verzeichnis enthält keine Paketdaten&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz&lt;br /&gt;
&lt;br /&gt;
Wichtig: für dieses Script wird das &#039;&#039;ar&#039;&#039; aus den Binutils benötigt, hier funktioniert das &#039;&#039;ar&#039;&#039; aus Busybox nicht. Ein Binutils-Paket für die ARM-Architektur findet sich bei uns im Downloads-Bereich, für MIPSEL wird man fündig, wenn man im Netz nach Debian-Paketen sucht.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12728</id>
		<title>Paketmanager opkg</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12728"/>
		<updated>2026-07-20T07:43:32Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;opkg&#039;&#039; ist ein Paketmanager, zugeschnitten auf die Bedürfnisse von Embedded Systemen. Die Aufgabe eines Paketmanagers ist, die auf einem System (z.B. unseren VU+ Boxen) installierte Software zu verwalten. Die Software wird dazu in Pakete gebündelt. Mit dem Paketmanager können solche Pakete installiert, deinstalliert und gelöscht werden. Der Paketmanager ermöglicht es, Software-Pakete zentral zusammenzustellen und auch zentral zu verteilen. Dafür greift der Paketmanager auf den [[FEED|Feed]] zu - das ist das zentrale Repository, in dem alle Pakete zum Download für den Paketmanager bereitgestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Für die komplette Liste der Befehle, die &#039;&#039;opkg&#039;&#039; kennt, gibt man einfach &amp;lt;code&amp;gt;opkg&amp;lt;/code&amp;gt; in der Shell ein.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Befehle hier auf einen Blick:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg update&amp;lt;/code&amp;gt; || Aktualisiert die Liste der am Feed verfügbaren Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;okpg list-upgradable&amp;lt;/code&amp;gt; || Zeigt eine Liste aller Pakete an, für die es am Feed eine Aktualisierung gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg upgrade&amp;lt;/code&amp;gt; || Aktualisiert alle Pakete, für die es eine neuere Version am Feed gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen verfügbaren Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list-installed&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen installierten Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg install &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Installiert ein oder mehrere Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg remove &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Deinstalliert ein oder mehrere Pakete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Andere Paketmanager für Enigma2, Geschichte =&lt;br /&gt;
Der Vorläufer von &#039;&#039;opkg&#039;&#039; ist der [https://de.wikipedia.org/wiki/IPKG ipkg], der bis 2013 entwickelt wurde. &#039;&#039;opkg&#039;&#039; hat sich von &#039;&#039;ipkg&#039;&#039; abgespaltet, benutzt aber dasselbe Dateiformat und die Endung &#039;&#039;.ipk&#039;&#039; für die Pakete. Das Format orientiert sich an den bei Debian und neueren Enigma2-Systemen benutzten &#039;&#039;.deb&#039;&#039; Paketen. Allen gemeinsam ist, dass sie komprimierte [https://de.wikipedia.org/wiki/Ar_(Unix) ar] Dateien sind. Der Aufbau einer &#039;&#039;.ipk&#039;&#039;-Datei ist weiter unten genauer beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Informationen ==&lt;br /&gt;
Für die Benutzung des Paketmanagers sind die folgenden Informationen nicht wichtig. Das wird sich vermutlich ändern, wenn man selber Pakete bauen möchte. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;opkg&#039;&#039; benutzt drei Verzeichnisse für den Betrieb:&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &amp;lt;code&amp;gt;/etc/opkg/&amp;lt;/code&amp;gt; || Konfiguration für &#039;&#039;opkg&#039;&#039;; hier wird die Liste aller Feeds abgelegt und die Liste der benutzten Architekturen definiert.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; || Hier wird der Gesamt-Status der installierten Pakete gespeichert. Dies beinhaltet eine Liste aller Pakete, die am Feed verfügbar sind, als auch Listen mit allen Dateien, die von allen Paketen installiert wurden. &lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &amp;lt;code&amp;gt;/usr/lib/opkg/&amp;lt;/code&amp;gt; || Im Verzeichnis &amp;lt;code&amp;gt;/usr/lib/opkg/alternatives/&amp;lt;/code&amp;gt; werden Informationen zu allen Programmen verwaltet, für die es mehrere Installations-Kandidaten gibt. Ein gutes Beispiel ist [[Busybox und deren Befehle|busybox]], welches für eine Vielzahl von Standard-Unix-Programmen eine abgespeckte Variante zur Verfügung stellt. Wenn das Original-Programm ebenfalls installiert wird, soll natürlich nicht weiter die Busybox-Variante benutzt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; liegen die von den Feeds heruntergeladenen Dateien sowie in der Datei &amp;lt;code&amp;gt;/var/lib/opkg/status&amp;lt;/code&amp;gt; ein Liste (oder Datenbank) aller im System installierten Pakete. Das Format der einzelnen Blöcke in dieser Datei ist weitgehend identisch mit der im folgenden Abschnitt beschriebenen &#039;&#039;control&#039;&#039;-Dateien. Die einzelnen Blöcke enthalten zusätzlich zu den Informationen aus den &#039;&#039;control&#039;&#039;-Dateien noch den Zeitstempel, wann das Paket installiert wurde (&#039;&#039;Installed-Time: ...&#039;&#039;), sowie ob es als abhängiges Paket automatisch installiert wurde (&#039;&#039;Auto-Installed: yes&#039;&#039;) und einen Installations-Status (&#039;&#039;Status: ...&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Paket-Informationen ===&lt;br /&gt;
Informationen zu allen installierten Paketen legt &#039;&#039;opkg&#039;&#039; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; ab. In diesem Verzeichnis befinden sich zu jedem installierten Paket mehrere Dateien:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;paketname&#039;&#039;.control || Datei mit allen Meta-Informationen zum Paket &#039;&#039;paketname&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.list || Liste aller vom Paket installierten Dateien&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.preinst || (optional) Script, welches vor Installation von &#039;&#039;paketname&#039;&#039; ausgeführt wurde&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postinst || (optional) Script, welches nach Installation von &#039;&#039;paketname&#039;&#039; ausgeführt wurde&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.prerm || (optional) Script, welches vor Deinstallation von &#039;&#039;paketname&#039;&#039; ausgeführt wird&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postrm || (optional) Script, welches nach Deinstallation von &#039;&#039;paketname&#039;&#039; ausgeführt wird&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.conffiles || (optional) Liste aller vom Paket installierten Konfigurationsfiles, die beim Update nicht überschrieben werden sollen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Eine ipk-Datei ist vom Format eine [https://de.wikipedia.org/wiki/Ar_(Unix) ar]-Datei, die immer 3 Dateien enthält: &lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;control.tar.gz&#039;&#039; || eine Tar-Datei mit den gerade beschriebenen Dateien aus &amp;lt;code&amp;gt;/var/lib/opkg/info&amp;lt;/code&amp;gt; eines Paketes außer der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;data.tar.gz&#039;&#039; || eine Tar-Datei mit den zu installierenden Files; dies entspricht dem Inhalt der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;debian-binary&#039;&#039; || enthält immer 2.0 als String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Neuere Versionen von &#039;&#039;opkg&#039;&#039; akzeptieren auch mit &#039;&#039;xz&#039;&#039; gepackte Tar-Dateien.&lt;br /&gt;
&lt;br /&gt;
Mit diesen Informationen ist es einfach, zu einem installierten Paket wieder eine ipk-Datei mit einem installierbaren Paket zu bauen. Dafür kann folgendes Script benutzt werden:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    name=$1&lt;br /&gt;
    if [ ! -f &amp;quot;/var/lib/opkg/info/$name.control&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Paket &amp;quot; $name &amp;quot; ist nicht installiert&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    builddir=/media/hdd/build.$$&lt;br /&gt;
    mkdir $builddir || exit 1&lt;br /&gt;
    &lt;br /&gt;
    # control-, list- und p-Dateien ins Build-Dir kopieren&lt;br /&gt;
    pushd /var/lib/opkg/info &amp;gt; /dev/null&lt;br /&gt;
    for file in $name.*; do&lt;br /&gt;
        cp $file $builddir/${file#&amp;quot;$name.&amp;quot;}&lt;br /&gt;
    done&lt;br /&gt;
    &lt;br /&gt;
    cd $builddir&lt;br /&gt;
    &lt;br /&gt;
    # tar-Datei mit allen gelisteten Dateien erstellen&lt;br /&gt;
    tar -czf data.tar.gz --no-recursion -T list 2&amp;gt;/dev/null&lt;br /&gt;
    &lt;br /&gt;
    # opkg benötigt für jedes Verzeichnis einen eigenen Eintrag,&lt;br /&gt;
    # deswegen das tar-File noch einmal aus- und wieder einpacken.&lt;br /&gt;
    mkdir clean&lt;br /&gt;
    cd clean&lt;br /&gt;
    tar -xf ../data.tar.gz&lt;br /&gt;
    tar -czf ../data.tar.gz .&lt;br /&gt;
    cd ..&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz 2&amp;gt; /dev/null&lt;br /&gt;
    popd &amp;gt; /dev/null&lt;br /&gt;
    &lt;br /&gt;
    mv -i $builddir/$ipk .&lt;br /&gt;
    rm -fr $builddir&lt;br /&gt;
&lt;br /&gt;
Anmerkung: für dieses Script funktionieren die Busybox-Versionen von &#039;&#039;tar&#039;&#039; und &#039;&#039;ar&#039;&#039; nicht. &lt;br /&gt;
&lt;br /&gt;
=== Pakete selber bauen ===&lt;br /&gt;
Ein Paket ist eine Sammlung von zu installierenden Dateien, Metainformationen sowie vor und nach Installation auszuführenden Scripten. Als Paket-Container-Format wird dafür das unter Unix seit Ewigkeiten benutzte ar-Format verwendet, mit dem auch Bibliotheken für statische Libraries (.a-Files)  erstellt werden.&lt;br /&gt;
&lt;br /&gt;
In einer .ipk-Datei befinden sich immer drei Dateien: &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;debian-binary&#039;&#039;&#039;. In der Datei &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039; befinden sich alle Meta-Daten zum Programm:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; (diese Datei muss enthalten sein),&lt;br /&gt;
* &amp;lt;code&amp;gt;conffiles&amp;lt;/code&amp;gt; (optional Datei mit einer Liste von Konfigurationsfiles, die nicht überschrieben werden sollen; pro Zeile ein Filename - wird z.B. im Paket &amp;quot;base-files&amp;quot; benutzt, siehe &amp;lt;code&amp;gt;/var/lib/opkg/info/base-files.*&amp;lt;/code&amp;gt; auf der Box)&lt;br /&gt;
* &amp;lt;code&amp;gt;preinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;prerm&amp;lt;/code&amp;gt; (optional, Shellscripten, die vor dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
* &amp;lt;code&amp;gt;postinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postrm&amp;lt;/code&amp;gt; (optional, Shellscripten, die nach dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; beinhaltet die eigentlichen Paket-Daten, die installiert werden sollen. Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; wird von &#039;&#039;opkg&#039;&#039; im Root-Verzeichnis ausgepackt. &#039;&#039;opkg&#039;&#039; benutzt dafür seinen eigenen Entpacker, der - im Gegensatz zu &#039;&#039;tar&#039;&#039; pingelig ist, was fehlende Verzeichnisse im Tar-File angeht.&lt;br /&gt;
&lt;br /&gt;
==== Das &#039;&#039;control&#039;&#039; File ====&lt;br /&gt;
Bleibt noch das &#039;&#039;control&#039;&#039;-File zu erklären. Ein &#039;&#039;control&#039;&#039;-File besteht aus einer Reihe von &#039;&#039;&#039;Feld: Wert&#039;&#039;&#039;-Paaren, mit nachfolgend beschriebener Bedeutung. Dabei sind lediglich die Felder &#039;&#039;&#039;Package:&#039;&#039;&#039; und &#039;&#039;&#039;Architecture:&#039;&#039;&#039; Pflichtfelder, es ist aber sinnvoll, wenigstens noch &#039;&#039;&#039;Version:&#039;&#039;&#039; und &#039;&#039;&#039;Description:&#039;&#039;&#039; mit anzugeben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Package:&#039;&#039;&#039; (Pflichtfeld) ist der Paket-Name ohne die Versions-Nummer&lt;br /&gt;
* &#039;&#039;&#039;Architecture:&#039;&#039;&#039; (Pflichtfeld) bestimmt, unter welcher Architektur das Paket sinnvollerweise installiert werden kann. Hier nimmt man &amp;quot;all&amp;quot;, wenn es unabhängig vom Prozessor ist, also z.B. ein Python-Script. Ansonsten z.B. armv7ahf-vfp-neon wenn es spezifisch für eine unserer 4k-Boxen ist, weil z.B. ein kompiliertes Binary enthalten ist. Gültige Werte für &amp;quot;Architecture&amp;quot; für deine Box stehen in der Datei /etc/opkg/arch.conf.&lt;br /&gt;
* &#039;&#039;&#039;Version:&#039;&#039;&#039; (empfohlenes Feld) ist die Versionsnummer des Paketes. Hier fährt man sehr gut mit einer numerischen Versionsnummer (z.B. 1.2-r0), da opkg anhand der Versionsnummer alphanumerisch sortiert und entscheidet, ob ein Paket neuer als ein bereits installiertes ist. Versionsnummern a la &amp;quot;gitXXX&amp;quot; sind eher ungeeignet.&lt;br /&gt;
* &#039;&#039;&#039;Description:&#039;&#039;&#039; (empfohlenes Feld) ausführliche Beschreibung des Pakets. Dieses Feld kann aus mehreren Zeilen bestehen, wobei nachfolgende Zeilen immer mit einem Leerzeichen beginnnen müssen, Absätze mit &amp;quot; .&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Depends:&#039;&#039;&#039; beschreibt die Abhängigkeiten zu anderen Paketen. Diese Zeile kann eine Liste von Paketen enthalten, die installiert sein müssen bzw. installiert werden sollen, wenn das Paket installiert wird. Für jedes Paket kann weiter noch angeben werden, welche Version benötigt wird. Das kann man durch (&amp;gt;&amp;gt; Version), (&amp;gt;= Version), (= Version), (&amp;lt;= Version), (&amp;lt;&amp;lt; Version) hinter dem Paketnamen angeben. &amp;gt;&amp;gt;: neuer als, &amp;gt;=: mindestens, =: genau gleich, &amp;lt;=: höchstens, &amp;lt;&amp;lt;: älter als.&lt;br /&gt;
* &#039;&#039;&#039;Conflicts:&#039;&#039;&#039; wenn die Installation dieses Paketes sich mit einem anderen Paket beisst (z.B. wenn beide Pakete gleiche Files installieren), werden die Pakete durch Komma getrennt hier aufgeführt.&lt;br /&gt;
* &#039;&#039;&#039;Installed-Size:&#039;&#039;&#039; hier kann der vom installierten Paket in Anspruch genommene Speicherplatz in KB angegeben werden&lt;br /&gt;
* &#039;&#039;&#039;Maintainer:&#039;&#039;&#039; Wer betreut dieses Paket?&lt;br /&gt;
* &#039;&#039;&#039;Priority:&#039;&#039;&#039;  extra, optional, required, standard&lt;br /&gt;
* &#039;&#039;&#039;Provides:&#039;&#039;&#039; Für kompliziertere Abhängigkeiten von Paketen mit virtuellen Paketen definiert &amp;quot;Provides:&amp;quot;, für welches virtuelle Paket das Paket eine Installation erfüllt. Dafür kann ein Paket z.B. &amp;quot;Depends: vpaket&amp;quot; voraussetzen, und unser Paket &amp;quot;Package: paket&amp;quot; sowie &amp;quot;Provides: vpaket&amp;quot; definieren. Das macht man gerne, wenn man Pakete für spezifische Hardware schnürt, z.B. eine bestimmte Box.&lt;br /&gt;
* &#039;&#039;&#039;Section:&#039;&#039;&#039; Welcher Sektion das Paket zugeordnet werden soll.&lt;br /&gt;
* &#039;&#039;&#039;Replaces:&#039;&#039;&#039; Manchmal gibt es für ein altes Paket ein neues, welches das alte ersetzt. Um Konflikte mit gleichen Files zu verhindern, kann man hier angeben, welches alte Paket unser Paket ersetzt.&lt;br /&gt;
* &#039;&#039;&#039;Source:&#039;&#039;&#039; Quelle des Pakets.&lt;br /&gt;
* &#039;&#039;&#039;Recommends:&#039;&#039;&#039; Liste von Paketen, für die es Sinn macht, zusätzlich zu diesem Paket installiert zu werden. Quasi eine sehr weiche Depends: Klausel.&lt;br /&gt;
* &#039;&#039;&#039;Suggests:&#039;&#039;&#039; Liste von Paketen, für die es vielleicht Sinn macht, zusätzlich zu diesem Paket installiert zu werden - eine noch weichere Depends: Klausel.&lt;br /&gt;
&lt;br /&gt;
Als Beispiele kann man sich die tausenden von &amp;lt;code&amp;gt;*.control&amp;lt;/code&amp;gt; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; anschauen. Pro installiertes Paket steht dort die &#039;&#039;control&#039;&#039;-Datei, die mit dem Paket ausgeliefert wurde.&lt;br /&gt;
&lt;br /&gt;
==== Ein Script um Pakete zu erstellen ====&lt;br /&gt;
Mit folgendem Script kann aus einem Installations-Verzeichnis heraus ein fertiges Paket gebaut werden. Dafür ist es nur nötig, eine fertige &#039;&#039;control&#039;&#039;-Datei und das fertige &#039;&#039;data.tar.gz&#039;&#039; im Verzeichnis abzulegen. Wenn man ein Programm fertig kompiliert hat, lässt es sich üblicherweise mit dem Kommando &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; installieren. Man kann aber bei den meisten Programmen heute &amp;lt;code&amp;gt;make install DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt; angeben, um das Programm unter einem anderen Root-Verzeichnis, z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;, zu installieren. Von hier kann man noch einmal schauen, was alles installiert würde, und von hier das &#039;&#039;data.tar.gz&#039;&#039;-File erstellen.&lt;br /&gt;
&lt;br /&gt;
Das folgende Script wird im Installations-Root (z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;) ausgeführt:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    if [ ! -f &amp;quot;control&amp;quot; -o ! -f &amp;quot;data.tar.gz&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Verzeichnis enthält keine Paketdaten&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz&lt;br /&gt;
&lt;br /&gt;
Wichtig: für dieses Script wird das &#039;&#039;ar&#039;&#039; aus den Binutils benötigt, hier funktioniert das &#039;&#039;ar&#039;&#039; aus Busybox nicht. Ein Binutils-Paket für die ARM-Architektur findet sich bei uns im Downloads-Bereich, für MIPSEL wird man fündig, wenn man im Netz nach Debian-Paketen sucht.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12727</id>
		<title>Paketmanager opkg</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Paketmanager_opkg&amp;diff=12727"/>
		<updated>2026-07-20T06:58:15Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;opkg&#039;&#039; ist ein Paketmanager, zugeschnitten auf die Bedürfnisse von Embedded Systemen. Die Aufgabe eines Paketmanagers ist, die auf einem System (z.B. unseren VU+ Boxen) installierte Software zu verwalten. Die Software wird dazu in Pakete gebündelt. Mit dem Paketmanager können solche Pakete installiert, deinstalliert und gelöscht werden. Der Paketmanager ermöglicht es, Software-Pakete zentral zusammenzustellen und auch zentral zu verteilen. Dafür greift der Paketmanager auf den [[FEED|Feed]] zu - das ist das zentrale Repository, in dem alle Pakete zum Download für den Paketmanager bereitgestellt werden.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Für die komplette Liste der Befehle, die &#039;&#039;opkg&#039;&#039; kennt, gibt man einfach &amp;lt;code&amp;gt;opkg&amp;lt;/code&amp;gt; in der Shell ein.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Befehle hier auf einen Blick:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg update&amp;lt;/code&amp;gt; || Aktualisiert die Liste der am Feed verfügbaren Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;okpg list-upgradable&amp;lt;/code&amp;gt; || Zeigt eine Liste aller Pakete an, für die es am Feed eine Aktualisierung gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg upgrade&amp;lt;/code&amp;gt; || Aktualisiert alle Pakete, für die es eine neuere Version am Feed gibt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen verfügbaren Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg list-installed&amp;lt;/code&amp;gt; || Zeigt eine Liste mit allen installierten Paketen an&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg install &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Installiert ein oder mehrere Pakete&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;opkg remove &amp;lt;paketliste&amp;gt;&amp;lt;/code&amp;gt; || Deinstalliert ein oder mehrere Pakete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Andere Paketmanager für Enigma2, Geschichte =&lt;br /&gt;
Der Vorläufer von &#039;&#039;okpg&#039;&#039; ist der [https://de.wikipedia.org/wiki/IPKG ipkg], der bis 2013 entwickelt wurde. &#039;&#039;opkg&#039;&#039; hat sich von &#039;&#039;ipkg&#039;&#039; abgespaltet, benutzt aber dasselbe Dateiformat und die Endung &#039;&#039;.ipk&#039;&#039; für die Pakete. Das Format orientiert sich an den bei Debian und neueren Enigma2-Systemen benutzten &#039;&#039;.deb&#039;&#039; Paketen. Allen gemeinsam ist, dass sie komprimierte [https://de.wikipedia.org/wiki/Ar_(Unix) ar] Dateien sind. Der Aufbau einer &#039;&#039;.ipk&#039;&#039;-Datei ist weiter unten genauer beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Informationen ==&lt;br /&gt;
Für die Benutzung des Paketmanagers sind die folgenden Informationen nicht wichtig. Das wird sich vermutlich ändern, wenn man selber Pakete bauen möchte. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;opkg&#039;&#039; benutzt drei Verzeichnisse für den Betrieb:&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &amp;lt;code&amp;gt;/etc/opkg/&amp;lt;/code&amp;gt; || Konfiguration für &#039;&#039;opkg&#039;&#039;; hier wird die Liste aller Feeds abgelegt und die Liste der benutzten Architekturen definiert.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; || Hier wird der Gesamt-Status der installierten Pakete gespeichert. Dies beinhaltet eine Liste aller Pakete, die am Feed verfügbar sind, als auch Listen mit allen Dateien, die von allen Paketen installiert wurden. &lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &amp;lt;code&amp;gt;/usr/lib/opkg/&amp;lt;/code&amp;gt; || Im Verzeichnis &amp;lt;code&amp;gt;/usr/lib/opkg/alternatives/&amp;lt;/code&amp;gt; werden Informationen zu allen Programmen verwaltet, für die es mehrere Installations-Kandidaten gibt. Ein gutes Beispiel ist [[Busybox_und_deren_Befehle|busybox]], welches für eine Vielzahl von Standard-Unix-Programmen eine abgespeckte Variante zur Verfügung stellt. Wenn das Original-Programm ebenfalls installiert wird, soll natürlich nicht weiter die Busybox-Variante benutzt werden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/&amp;lt;/code&amp;gt; liegen die von den Feeds heruntergeladenen Dateien sowie in der Datei &amp;lt;code&amp;gt;/var/lib/opkg/status&amp;lt;/code&amp;gt; ein Liste (oder Datenbank) aller im System installierten Pakete. Das Format der einzelnen Blöcke in dieser Datei ist weitgehend identisch mit der im folgenden Abschnitt beschriebenen &#039;&#039;control&#039;&#039;-Dateien. Die einzelnen Blöcke enthalten zusätzlich zu den Informationen aus den &#039;&#039;control&#039;&#039;-Dateien noch den Zeitstempel, wann das Paket installiert wurde (&#039;&#039;Installed-Time: ...&#039;&#039;), sowie ob es als abhängiges Paket automatisch installiert wurde (&#039;&#039;Auto-Installed: yes&#039;&#039;) und einen Installations-Status (&#039;&#039;Status: ...&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Paket-Informationen ===&lt;br /&gt;
Informationen zu allen installierten Paketen legt &#039;&#039;opkg&#039;&#039; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; ab. In diesem Verzeichnis befinden sich zu jedem installierten Paket mehrere Dateien:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;paketname&#039;&#039;.control || Datei mit allen Meta-Informationen zum Paket &#039;&#039;paketname&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.list || Liste aller vom Paket installierten Dateien&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.preinst || (optional) Script, welches vor Installation von &#039;&#039;paketname&#039;&#039; ausgeführt wurde&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postinst || (optional) Script, welches nach Installation von &#039;&#039;paketname&#039;&#039; ausgeführt wurde&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.prerm || (optional) Script, welches vor Deinstallation von &#039;&#039;paketname&#039;&#039; ausgeführt wird&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.postrm || (optional) Script, welches nach Deinstallation von &#039;&#039;paketname&#039;&#039; ausgeführt wird&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;paketname&#039;&#039;.conffiles || (optional) Liste aller vom Paket installierten Konfigurationsfiles, die beim Update nicht überschrieben werden sollen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Eine ipk-Datei ist vom Format eine [https://de.wikipedia.org/wiki/Ar_(Unix) ar]-Datei, die immer 3 Dateien enthält: &lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;width: 150px&amp;quot;| &#039;&#039;control.tar.gz&#039;&#039; || eine Tar-Datei mit den gerade beschriebenen Dateien aus &amp;lt;code&amp;gt;/var/lib/opkg/info&amp;lt;/code&amp;gt; eines Paketes außer der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;data.tar.gz&#039;&#039; || eine Tar-Datei mit den zu installierenden Files; dies entspricht dem Inhalt der .list-Datei&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;debian-binary&#039;&#039; || enthält immer 2.0 als String&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Anmerkung: Neuere Versionen von &#039;&#039;opkg&#039;&#039; akzeptieren auch mit &#039;&#039;xz&#039;&#039; gepackte Tar-Dateien.&lt;br /&gt;
&lt;br /&gt;
Mit diesen Informationen ist es einfach, zu einem installierten Paket wieder eine ipk-Datei mit einem installierbaren Paket zu bauen. Dafür kann folgendes Script benutzt werden:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    name=$1&lt;br /&gt;
    if [ ! -f &amp;quot;/var/lib/opkg/info/$name.control&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Paket &amp;quot; $name &amp;quot; ist nicht installiert&amp;quot;&lt;br /&gt;
    exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    builddir=/media/hdd/build.$$&lt;br /&gt;
    mkdir $builddir || exit 1&lt;br /&gt;
    &lt;br /&gt;
    # control-, list- und p-Dateien ins Build-Dir kopieren&lt;br /&gt;
    pushd /var/lib/opkg/info &amp;gt; /dev/null&lt;br /&gt;
    for file in $name.*; do&lt;br /&gt;
        cp $file $builddir/${file#&amp;quot;$name.&amp;quot;}&lt;br /&gt;
    done&lt;br /&gt;
    &lt;br /&gt;
    cd $builddir&lt;br /&gt;
    &lt;br /&gt;
    # tar-Datei mit allen gelisteten Dateien erstellen&lt;br /&gt;
    tar -czf data.tar.gz --no-recursion -T list 2&amp;gt;/dev/null&lt;br /&gt;
    &lt;br /&gt;
    # opkg benötigt für jedes Verzeichnis einen eigenen Eintrag,&lt;br /&gt;
    # deswegen das tar-File noch einmal aus- und wieder einpacken.&lt;br /&gt;
    mkdir clean&lt;br /&gt;
    cd clean&lt;br /&gt;
    tar -xf ../data.tar.gz&lt;br /&gt;
    tar -czf ../data.tar.gz .&lt;br /&gt;
    cd ..&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz 2&amp;gt; /dev/null&lt;br /&gt;
    popd &amp;gt; /dev/null&lt;br /&gt;
    &lt;br /&gt;
    mv -i $builddir/$ipk .&lt;br /&gt;
    rm -fr $builddir&lt;br /&gt;
&lt;br /&gt;
Anmerkung: für dieses Script funktionieren die Busybox-Versionen von &#039;&#039;tar&#039;&#039; und &#039;&#039;ar&#039;&#039; nicht. &lt;br /&gt;
&lt;br /&gt;
=== Pakete selber bauen ===&lt;br /&gt;
Ein Paket ist eine Sammlung von zu installierenden Dateien, Metainformationen sowie vor und nach Installation auszuführenden Scripten. Als Paket-Container-Format wird dafür das unter Unix seit Ewigkeiten benutzte ar-Format verwendet, mit dem auch Bibliotheken für statische Libraries (.a-Files)  erstellt werden.&lt;br /&gt;
&lt;br /&gt;
In einer .ipk-Datei befinden sich immer drei Dateien: &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039;, &#039;&#039;&#039;debian-binary&#039;&#039;&#039;. In der Datei &#039;&#039;&#039;control.tar.gz&#039;&#039;&#039; befinden sich alle Meta-Daten zum Programm:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; (diese Datei muss enthalten sein),&lt;br /&gt;
* &amp;lt;code&amp;gt;conffiles&amp;lt;/code&amp;gt; (optional Datei mit einer Liste von Konfigurationsfiles, die nicht überschrieben werden sollen; pro Zeile ein Filename - wird z.B. im Paket &amp;quot;base-files&amp;quot; benutzt, siehe &amp;lt;code&amp;gt;/var/lib/opkg/info/base-files.*&amp;lt;/code&amp;gt; auf der Box)&lt;br /&gt;
* &amp;lt;code&amp;gt;preinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;prerm&amp;lt;/code&amp;gt; (optional, Shellscripten, die vor dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
* &amp;lt;code&amp;gt;postinst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postrm&amp;lt;/code&amp;gt; (optional, Shellscripten, die nach dem installieren bzw. löschen ausgeführt werden)&lt;br /&gt;
&lt;br /&gt;
Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; beinhaltet die eigentlichen Paket-Daten, die installiert werden sollen. Die Datei &#039;&#039;&#039;data.tar.gz&#039;&#039;&#039; wird von &#039;&#039;opkg&#039;&#039; im Root-Verzeichnis ausgepackt. &#039;&#039;opkg&#039;&#039; benutzt dafür seinen eigenen Entpacker, der - im Gegensatz zu &#039;&#039;tar&#039;&#039; pingelig ist, was fehlende Verzeichnisse im Tar-File angeht.&lt;br /&gt;
&lt;br /&gt;
==== Das &#039;&#039;control&#039;&#039; File ====&lt;br /&gt;
Bleibt noch das &#039;&#039;control&#039;&#039;-File zu erklären. Ein &#039;&#039;control&#039;&#039;-File besteht aus einer Reihe von &#039;&#039;&#039;Feld: Wert&#039;&#039;&#039;-Paaren, mit nachfolgend beschriebener Bedeutung. Dabei sind lediglich die Felder &#039;&#039;&#039;Package:&#039;&#039;&#039; und &#039;&#039;&#039;Architecture:&#039;&#039;&#039; Pflichtfelder, es ist aber sinnvoll, wenigstens noch &#039;&#039;&#039;Version:&#039;&#039;&#039; und &#039;&#039;&#039;Description:&#039;&#039;&#039; mit anzugeben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Package:&#039;&#039;&#039; (Pflichtfeld) ist der Paket-Name ohne die Versions-Nummer&lt;br /&gt;
* &#039;&#039;&#039;Architecture:&#039;&#039;&#039; (Pflichtfeld) bestimmt, unter welcher Architektur das Paket sinnvollerweise installiert werden kann. Hier nimmt man &amp;quot;all&amp;quot;, wenn es unabhängig vom Prozessor ist, also z.B. ein Python-Script. Ansonsten z.B. armv7ahf-vfp-neon wenn es spezifisch für eine unserer 4k-Boxen ist, weil z.B. ein kompiliertes Binary enthalten ist. Gültige Werte für &amp;quot;Architecture&amp;quot; für deine Box stehen in der Datei /etc/opkg/arch.conf.&lt;br /&gt;
* &#039;&#039;&#039;Version:&#039;&#039;&#039; (empfohlenes Feld) ist die Versionsnummer des Paketes. Hier fährt man sehr gut mit einer numerischen Versionsnummer (z.B. 1.2-r0), da opkg anhand der Versionsnummer alphanumerisch sortiert und entscheidet, ob ein Paket neuer als ein bereits installiertes ist. Versionsnummern a la &amp;quot;gitXXX&amp;quot; sind eher ungeeignet.&lt;br /&gt;
* &#039;&#039;&#039;Description:&#039;&#039;&#039; (empfohlenes Feld) ausführliche Beschreibung des Pakets. Dieses Feld kann aus mehreren Zeilen bestehen, wobei nachfolgende Zeilen immer mit einem Leerzeichen beginnnen müssen, Absätze mit &amp;quot; .&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Depends:&#039;&#039;&#039; beschreibt die Abhängigkeiten zu anderen Paketen. Diese Zeile kann eine Liste von Paketen enthalten, die installiert sein müssen bzw. installiert werden sollen, wenn das Paket installiert wird. Für jedes Paket kann weiter noch angeben werden, welche Version benötigt wird. Das kann man durch (&amp;gt;&amp;gt; Version), (&amp;gt;= Version), (= Version), (&amp;lt;= Version), (&amp;lt;&amp;lt; Version) hinter dem Paketnamen angeben. &amp;gt;&amp;gt;: neuer als, &amp;gt;=: mindestens, =: genau gleich, &amp;lt;=: höchstens, &amp;lt;&amp;lt;: älter als.&lt;br /&gt;
* &#039;&#039;&#039;Conflicts:&#039;&#039;&#039; wenn die Installation dieses Paketes sich mit einem anderen Paket beisst (z.B. wenn beide Pakete gleiche Files installieren), werden die Pakete durch Komma getrennt hier aufgeführt.&lt;br /&gt;
* &#039;&#039;&#039;Installed-Size:&#039;&#039;&#039; hier kann der vom installierten Paket in Anspruch genommene Speicherplatz in KB angegeben werden&lt;br /&gt;
* &#039;&#039;&#039;Maintainer:&#039;&#039;&#039; Wer betreut dieses Paket?&lt;br /&gt;
* &#039;&#039;&#039;Priority:&#039;&#039;&#039;  extra, optional, required, standard&lt;br /&gt;
* &#039;&#039;&#039;Provides:&#039;&#039;&#039; Für kompliziertere Abhängigkeiten von Paketen mit virtuellen Paketen definiert &amp;quot;Provides:&amp;quot;, für welches virtuelle Paket das Paket eine Installation erfüllt. Dafür kann ein Paket z.B. &amp;quot;Depends: vpaket&amp;quot; voraussetzen, und unser Paket &amp;quot;Package: paket&amp;quot; sowie &amp;quot;Provides: vpaket&amp;quot; definieren. Das macht man gerne, wenn man Pakete für spezifische Hardware schnürt, z.B. eine bestimmte Box.&lt;br /&gt;
* &#039;&#039;&#039;Section:&#039;&#039;&#039; Welcher Sektion das Paket zugeordnet werden soll.&lt;br /&gt;
* &#039;&#039;&#039;Replaces:&#039;&#039;&#039; Manchmal gibt es für ein altes Paket ein neues, welches das alte ersetzt. Um Konflikte mit gleichen Files zu verhindern, kann man hier angeben, welches alte Paket unser Paket ersetzt.&lt;br /&gt;
* &#039;&#039;&#039;Source:&#039;&#039;&#039; Quelle des Pakets.&lt;br /&gt;
* &#039;&#039;&#039;Recommends:&#039;&#039;&#039; Liste von Paketen, für die es Sinn macht, zusätzlich zu diesem Paket installiert zu werden. Quasi eine sehr weiche Depends: Klausel.&lt;br /&gt;
* &#039;&#039;&#039;Suggests:&#039;&#039;&#039; Liste von Paketen, für die es vielleicht Sinn macht, zusätzlich zu diesem Paket installiert zu werden - eine noch weichere Depends: Klausel.&lt;br /&gt;
&lt;br /&gt;
Als Beispiele kann man sich die tausenden von &amp;lt;code&amp;gt;*.control&amp;lt;/code&amp;gt; im Verzeichnis &amp;lt;code&amp;gt;/var/lib/opkg/info/&amp;lt;/code&amp;gt; anschauen. Pro installiertes Paket steht dort die &#039;&#039;control&#039;&#039;-Datei, die mit dem Paket ausgeliefert wurde.&lt;br /&gt;
&lt;br /&gt;
==== Ein Script um Pakete zu erstellen ====&lt;br /&gt;
Mit folgendem Script kann aus einem Installations-Verzeichnis heraus ein fertiges Paket gebaut werden. Dafür ist es nur nötig, eine fertige &#039;&#039;control&#039;&#039;-Datei und das fertige &#039;&#039;data.tar.gz&#039;&#039; im Verzeichnis abzulegen. Wenn man ein Programm fertig kompiliert hat, lässt es sich üblicherweise mit dem Kommando &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; installieren. Man kann aber bei den meisten Programmen heute &amp;lt;code&amp;gt;make install DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt; angeben, um das Programm unter einem anderen Root-Verzeichnis, z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;, zu installieren. Von hier kann man noch einmal schauen, was alles installiert würde, und von hier das &#039;&#039;data.tar.gz&#039;&#039;-File erstellen.&lt;br /&gt;
&lt;br /&gt;
Das folgende Script wird im Installations-Root (z.B. &amp;lt;code&amp;gt;/media/hdd/install/&amp;lt;/code&amp;gt;) ausgeführt:&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    &lt;br /&gt;
    if [ ! -f &amp;quot;control&amp;quot; -o ! -f &amp;quot;data.tar.gz&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;Verzeichnis enthält keine Paketdaten&amp;quot;&lt;br /&gt;
        exit&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    tar -czf control.tar.gz $(ls control conffiles pre* post* 2&amp;gt; /dev/null)&lt;br /&gt;
    echo &amp;quot;2.0&amp;quot; &amp;gt; debian-binary&lt;br /&gt;
    &lt;br /&gt;
    version=$(grep Version: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    package=$(grep Package: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    arch=$(grep Architecture: control | sed -e &#039;s/.*: *//&#039;)&lt;br /&gt;
    &lt;br /&gt;
    ipk=${package}_${version}_${arch}.ipk&lt;br /&gt;
    &lt;br /&gt;
    ar r $ipk debian-binary control.tar.gz data.tar.gz&lt;br /&gt;
&lt;br /&gt;
Wichtig: für dieses Script wird das &#039;&#039;ar&#039;&#039; aus den Binutils benötigt, hier funktioniert das &#039;&#039;ar&#039;&#039; aus Busybox nicht. Ein Binutils-Paket für die ARM-Architektur findet sich bei uns im Downloads-Bereich, für MIPSEL wird man fündig, wenn man im Netz nach Debian-Paketen sucht.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=VTi_Installation&amp;diff=12726</id>
		<title>VTi Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=VTi_Installation&amp;diff=12726"/>
		<updated>2026-04-11T14:31:47Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[index.php?title=Kategorie:Index]] &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;30%&amp;quot;&lt;br /&gt;
 |[[Bild:deutsch.png]] - [[VTi Installation]]&lt;br /&gt;
 |[[Bild:english.png]] - [[VTi Install]]&lt;br /&gt;
 |}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Um eine Vu+ Box mit einem anderen bzw. neuen [[Image]] auszustatten, muss dieses anstelle des bisherigen Images in den [[Flashspeicher]] installiert werden, kurz &amp;quot;[[flashen]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Es gibt 4 Arten, Images zu flashen. Die USB Variante, über die Backup-Funktion, das Image Flash-Tool und über die serielle Schnittstelle des Receiver&#039;s. Das serielle Flashen gibt es mit den aktuellen Versionen des VTi jedoch nicht mehr. &lt;br /&gt;
&lt;br /&gt;
Aktuelle VTi-Images können &#039;&#039;&#039;[https://www.vuplus-support.org/wbb4/vtisoftware/ hier unter VTi Images]&#039;&#039;&#039; (Version 11.0.2 und neuer) heruntergeladen werden. (Ältere waren in der Database gespeichert. Die Database gibt es seit dem letzten Update der Foren-Software nicht mehr.)&lt;br /&gt;
&lt;br /&gt;
Bitte vor der Neuinstallation eines Images überprüfen, ob ein neuer [[Bootloader]] verfügbar oder notwendig ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Soll ein VTi Image durch ein neues ersetzt werden, empfiehlt sich eine [[VTi Software-Werkzeuge#VTI BackupSuite - Sicherung|Sicherung der Einstellungen]] und die [[VTi Software-Werkzeuge#Image-Sicherung und -Wiederherstellung|Sicherung des bisherigen Images]].&lt;br /&gt;
&lt;br /&gt;
Beim USB-Flashen kann es vorkommen, dass das Flashen nicht ordnungsgemäß startet oder beendet wird. In der Regel liegen diese Probleme in der Wahl des USB-Sticks, bei denen die Vu+-Boxen ziemlich wählerisch sind. Die größten Chancen hat man mit kleinen älteren USB-Sticks (&amp;lt;4GB). Wenn das Flashen mit einem bestimmten USB-Stick funktioniert hat, sollte es auch künftig mit diesem Stick klappen. Auch das Formatieren des Sticks mit dem &#039;&#039;HP Format Tool&#039;&#039; brachte schon Abhilfe.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#D96F6F; width: 42em;&amp;quot;|&#039;&#039;&#039;Häufige Fehlerursachen:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
* falsches Image heruntergeladen z.B Vu+ Duo für eine Vu+ Duo²&lt;br /&gt;
* fehlerhafte Ordnerstruktur&lt;br /&gt;
* USB-Stick falsch formatiert&lt;br /&gt;
* USB-Stick nicht kompatibel oder defekt&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#D96F6F; width: 42em;&amp;quot;|&#039;&#039;&#039;Flashvorgang klappt immer noch nicht, was tun?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
* USB-Stick nochmal kontrollieren, häufige Fehlerursachen ausschließen&lt;br /&gt;
* microSD/SD Kartenadapter verwenden, wenn es mit mehreren USB-Sticks nicht klappt&lt;br /&gt;
* während des Flashvorgangs alle anderen USB-Geräte entfernen&lt;br /&gt;
* während des Flashvorgangs auch Festplattenanschlusskabel abstöpseln&lt;br /&gt;
* leere mkpart.update in den Ordner legen (wenn vorher ein anderes Image installiert war)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anleitung zum Image entpacken ==&lt;br /&gt;
&lt;br /&gt;
===Benötigt wird:===&lt;br /&gt;
&lt;br /&gt;
* USB-Stick mit FAT/FAT32 Formatierung&lt;br /&gt;
* Programm zum Entpacken des Archives: z.B. WinRAR, WinZIP, 7ZIP, usw&lt;br /&gt;
* Image-Datei passend zum Vu+ Receivermodell &amp;amp;rArr; [https://www.vuplus-support.org/wbb4/vtisoftware/ Hier erhältlich ab VTi 11.0.2]&lt;br /&gt;
&lt;br /&gt;
===Schritt für Schritt: Das Entpacken===&lt;br /&gt;
&lt;br /&gt;
1. Schritt: Image-Datei downloaden und auf dem PC abspeichern.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Schritt: Nach Doppelklick auf die Datei geht das Programm zum Entpacken auf. Hier im Beispiel WinRAR.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Schritt: Dann auf &amp;quot;Entp.nach&amp;quot; klicken.&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Schritt: Jetzt den USB-Stick als Zielort wählen (hier im Beispiel den &amp;quot;Wechseldatenträger Laufwerk H:&amp;quot;), dann auf OK&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Schritt: Das Entpacken beginnt.&amp;lt;br /&amp;gt;&lt;br /&gt;
6. Schritt: Ordnerstruktur überprüfen!&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Das folgende Beispiel zeigt ein Solo²-Image. Die Ordnerstruktur muss aber zum jeweiligen Receiver passen. Wenn dies nicht so ist, wurde ein falsches Image heruntergeladen, das nicht zum Flashen verwendet werden darf!&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery perrow=&amp;quot;2&amp;quot; widths=&amp;quot;550&amp;quot; heights=&amp;quot;400&amp;quot; class=&amp;quot;right&amp;quot;&amp;gt;&lt;br /&gt;
ZIP_1.png|1. und 2. Schritt: Datei Downloaden und auf dem PC abspeichern.|verweis=Datei:ZIP_1.png&lt;br /&gt;
ZIP_2.png|2. und 3. Schritt: Entpacken|verweis=Datei:ZIP_2.png&lt;br /&gt;
ZIP_3.png|4. Schritt: Zielort wählen.|verweis=Datei:ZIP_3.png&lt;br /&gt;
ZIP_4.png|5. Schritt: Das Entpacken beginnt.|verweis=Datei:ZIP_4.png&lt;br /&gt;
ZIP_5.png|6. Schritt: Ordnerstruktur überprüfen!|verweis=Datei:ZIP_5.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flashen via USB-Stick==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;background-color:#FFFF99; width:50em; text-align:center&amp;quot;|&amp;lt;span style=&amp;quot;color:red;background-color:&amp;quot;&amp;gt;&lt;br /&gt;
Für die ersten Geräte der Vu+ Produktlinie, [[Vu+ Duo]], [[Vu+ Solo]], [[Vu+ Uno]] und [[Vu+ Ultimo]] &amp;lt;br /&amp;gt;&lt;br /&gt;
wurde nach dem VTi 11.0.x der Image - Build-Support eingestellt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dies bedeutet, dass es keine kompletten Image Builds von VTi für diese Boxen geben wird.&amp;lt;br /&amp;gt;&lt;br /&gt;
Sollten Treiberupdates kommen und ggf. wichtige e2 Updates, werden diese am Feed für VTi 11.0.x weitergepflegt.&lt;br /&gt;
Auch die Feeds für die bisherigen Images bleiben Online und werden nicht abgeschaltet.&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Duo|Vu+ Duo]] / [[Vu  Duo LE|Vu+ Duo LE]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Duo herunterladen (Duo)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/duo auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 3 Dateien in dem Verzeichnis /vuplus/duo auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Update der Firmware startet automatisch&lt;br /&gt;
*auf Hinweis &amp;quot;Finished ...please reboot&amp;quot; im VF-Display warten&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Duo²|Vu+ Duo²]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Duo2 herunterladen (Duo²)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/duo2 auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/duo2 auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*Frontklappe öffnen.&lt;br /&gt;
*Ggf. alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Duo² hochfährt, wird am VF-Display abwechselnd die Meldung &#039;&#039;&#039;Update!&#039;&#039;&#039; und &#039;&#039;&#039;Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (befindet sich über dem Front-USB-Anschluss) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Auf Hinweis &amp;quot;Finished, Removing USB&amp;quot; warten&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Die Vu+ STB sollte selbstständig neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Duo 4K|Vu+ Duo 4K]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org herunterladen (Duo 4K)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/duo4k auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/duo4k auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*Frontklappe öffnen.&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Duo 4K hochfährt, wird am LC-Display Meldung &#039;&#039;&#039;Update! Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (Touchbutton an der Front) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Nach dem erfolgreichen Flashvorgang startet die Vu+ STB neu&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Duo 4K SE|Vu+ Duo 4K SE]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org herunterladen (Duo 4K SE)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/duo4kse auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/duo4kse auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*Frontklappe öffnen.&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Duo 4K SE hochfährt, wird am LC-Display Meldung &#039;&#039;&#039;Update! Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (Touchbutton an der Front) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Nach dem erfolgreichen Flashvorgang startet die Vu+ STB neu&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Solo|Vu+ Solo]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Solo herunterladen (Solo)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/solo auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 3 Dateien in dem Verzeichnis /vuplus/solo auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Update der Firmware startet automatisch&lt;br /&gt;
*Die Standby LED wird rot und an dem USB Stick sollten die LEDs anfangen zu leuchten&lt;br /&gt;
*Wenn die Standby LED grün blinkt (der Flashvorgang dauert mehrere Minuten), kann man den USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Solo²|Vu+ Solo²]] / [[Vu  Solo² WE|Vu+ Solo² WE]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Solo2 herunterladen (Solo² (WE))] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/solo2 auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/solo2 auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Im Display der Box auf die Meldung &#039;&#039;&#039;Update please press &amp;quot;Power&amp;quot;&#039;&#039;&#039; warten&lt;br /&gt;
*&amp;quot;Power&amp;quot; Taste an der Vorderseite der Solo² drücken (Sensor-Taste)&lt;br /&gt;
*auf Hinweis &amp;quot;Finished, Removing USB&amp;quot; im VF-Display warten&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Solo 4K|Vu+ Solo 4K]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Solo%204K herunterladen (Solo 4K)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/solo4k auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/solo4k auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*Frontklappe öffnen.&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Solo 4K hochfährt, wird am LC-Display Meldung &#039;&#039;&#039;Update! Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (hinter der Frontklappe) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Nach dem erfolgreichen Flashvorgang startet die Vu+ STB neu&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für  [[Vu  Solo SE|Vu+ Solo SE]] / [[Vu  Solo SE WE|Vu+ Solo SE WE]] oder [[Vu  Solo SE V2|Vu+ Solo SE V2]] / [[Vu  Solo SE V2 WE|Vu+ Solo SE V2 WE]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für die [[Vu  Solo SE|Vu+ Solo SE]] und [[Vu  Solo SE V2|Vu+ Solo SE V2]] gibt es nur ein Image!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Solo%20SE herunterladen (Solo SE (WE))] und abspeichern (USB Variante) &lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/solose auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/solose auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick anstecken&lt;br /&gt;
*Vu+ einschalten&lt;br /&gt;
*während des Flashvorgangs pulsiert die LED&lt;br /&gt;
*ist der Flashvorgang abgeschlossen blinkt die LED&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Ultimo|Vu+ Ultimo]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Ultimo herunterladen (Ultimo)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/ultimo auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 4 Dateien in dem Verzeichnis /vuplus/ultimo auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Auf die Meldung &#039;&#039;&#039;Update please press &amp;quot;-&amp;quot;&#039;&#039;&#039; warten&lt;br /&gt;
*&amp;quot;-&amp;quot; Taste an der Vorderseite der Ultimo drücken&lt;br /&gt;
*auf Hinweis &amp;quot;Finished, Removing USB&amp;quot; im VF-Display warten&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Ultimo 4K|Vu+ Ultimo 4K]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Ultimo%204K herunterladen (Ultimo 4K)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/ultimo4k auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/ultimo4k auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*Frontklappe öffnen.&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Ultimo 4K hochfährt, wird am LC-Display Meldung &#039;&#039;&#039;Update! Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (Touchbutton an der Front, mehrmals mit dem Finger über den Strich fahren) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Nach dem erfolgreichen Flashvorgang startet die Vu+ STB neu&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Uno|Vu+ Uno]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Uno herunterladen (Uno)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/uno auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 4 Dateien in dem Verzeichnis /vuplus/uno auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Auf die Meldung &#039;&#039;&#039;Update please press &amp;quot;CH-&amp;quot;&#039;&#039;&#039; im VF-Display warten&lt;br /&gt;
*&amp;quot;CH-&amp;quot; Taste an der Vorderseite der Uno drücken&lt;br /&gt;
*auf Hinweis &amp;quot;Finished, Removing USB&amp;quot; im VF-Display warten&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Uno 4K|Vu+ Uno 4K]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Uno%204K herunterladen (Uno 4K)] und abspeichern (USB Variante) &lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/uno4k auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun x Dateien in dem Verzeichnis /vuplus/uno4k auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick anstecken&lt;br /&gt;
*Vu+ einschalten&lt;br /&gt;
*während des Flashvorgangs pulsiert die LED&lt;br /&gt;
*ist der Flashvorgang abgeschlossen blinkt die LED&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Uno 4K SE|Vu+ Uno 4K SE]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Uno%204K%20SE herunterladen (Uno 4K SE)] und abspeichern (USB Variante) &lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/uno4kse auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/uno4kse auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*USB Stick hinten einstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Uno 4K SE hochfährt, wird am LC-Display Meldung &#039;&#039;&#039;Update! Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (Touchbutton an der Front) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Nach dem erfolgreichen Flashvorgang startet die Vu+ STB neu&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Zero|Vu+ Zero]] / [[Vu  Zero WE|Vu+ Zero WE]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Zero herunterladen (Zero (WE))] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/zero auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/zero auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Die weiße LED pulsiert während des Flashvorgangs&lt;br /&gt;
*Warten bis die weiße LED in der Frontblende blinkt&lt;br /&gt;
*Vu+ STB ausschalten&lt;br /&gt;
*USB Stick entfernen&lt;br /&gt;
*STB einschalten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu  Zero 4K|Vu+ Zero 4K]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Zero%204K herunterladen (Zero 4K)] und abspeichern (USB Variante) &lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/zero4k auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/zero4k auf dem Stick!&amp;lt;/span&amp;gt;&lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Das weiße VU+ Logo pulsiert während des Flashvorgangs&lt;br /&gt;
*Warten bis das weiße VU+ Logo in der Frontblende blinkt&lt;br /&gt;
*Vu+ STB ausschalten&lt;br /&gt;
*USB Stick entfernen&lt;br /&gt;
*STB einschalten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Hilfestellung, Fehlerursachen und weitere Probleme beim Flashen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#D96F6F; width: 42em;&amp;quot;|&#039;&#039;&#039;Häufige Fehlerursachen:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
* falsches Image heruntergeladen z.B Vu+ Duo für eine Vu+ Duo²&lt;br /&gt;
* fehlerhafte Ordnerstruktur&lt;br /&gt;
* USB-Stick falsch formatiert&lt;br /&gt;
* USB-Stick nicht kompatibel oder defekt&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#D96F6F; width: 42em;&amp;quot;|&#039;&#039;&#039;Flashvorgang klappt immer noch nicht, was tun?&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
* USB-Stick nochmal kontrollieren, häufige Fehlerursachen ausschließen&lt;br /&gt;
* microSD/SD Kartenadapter verwenden, wenn es mit mehreren USB-Sticks nicht klappt&lt;br /&gt;
* während des Flashvorgangs alle anderen USB-Geräte entfernen&lt;br /&gt;
* während des Flashvorgangs auch Festplattenanschlusskabel abstöpseln&lt;br /&gt;
* leere mkpart.update in den Ordner legen (wenn vorher ein anderes Image installiert war)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Flashen via Backupfunktion ==&lt;br /&gt;
&lt;br /&gt;
Man kann auch ohne USB-Stick ein neues Image flashen. Vorraussetzung ist, dass ein VTi-Image mit Imagesicherung/Wiederherstellung auf der Box vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
Ein Flashen über die Backupfunktion ist bei der [[Vu  Solo 4K|Vu+ Solo 4K]], der [[Vu  Uno 4K|Vu+ Uno 4K]], der [[Vu  Duo 4K|Vu+ Duo 4K]], der [[Vu  Uno 4K SE|Vu+ Uno 4K SE]], der [[Vu  Ultimo 4K|Vu+ Ultimo 4K]], der [[Vu  Duo 4K SE|Vu+ Duo 4K SE]] und der [[Vu  Zero 4K|Vu+ Zero 4K]] &#039;&#039;&#039;nicht&#039;&#039;&#039; möglich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorgehensweise:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Einen neuen Ordner mit der Bezeichnung &amp;amp;nbsp;&amp;lt;code&amp;gt;vti_0.0.0_neu_flashen&amp;lt;/code&amp;gt;&amp;amp;nbsp; im Verzeichnis &amp;amp;nbsp;&amp;lt;code&amp;gt;media/hdd/vti-image-backup&amp;lt;/code&amp;gt;&amp;amp;nbsp; anlegen.&lt;br /&gt;
# In das Verzeichnis wird der Inhalt des heruntergeladenen Images kopiert. Das sieht dann so aus: &amp;amp;nbsp;&amp;lt;code&amp;gt;media/hdd/vti-image-backup/vti_0.0.0_neu_flashen/vuplus/&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Ordner &amp;amp;nbsp;&amp;lt;code&amp;gt;vuplus&amp;lt;/code&amp;gt;&amp;amp;nbsp; befindet sich nun ein weiterer Ordner mit der genauen Bezeichnung der Vu+ z.B. &amp;lt;code&amp;gt;/solo2&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;/duo2&amp;lt;/code&amp;gt;. In diesem Ordner sollten sich dann die ca. drei bis fünf Imagedateien befinden.&lt;br /&gt;
# In der Vu+ das Menü [[VTi Sicherungswerkzeuge#Image Sicherung .2F Wiederherstellung|Image Sicherung und Wiederherstellung]] aufrufen. Dann unter [[VTi Sicherungswerkzeuge#Wiederherstellung eines Images|Wiederherstellung eines Images]] den zuvor angelegten Ordner auswählen und den Flashvorgang starten.&lt;br /&gt;
&lt;br /&gt;
Nach kurzer Wartezeit ist der Flashvorgang beendet und die Vu+ startet neu.&lt;br /&gt;
&lt;br /&gt;
Link zum Forum: [http://www.vuplus-support.org/wbb3/index.php?page=Thread&amp;amp;threadID=49823 Flashen ohne Stick]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Flashen via Image Flash Tool ==&lt;br /&gt;
&lt;br /&gt;
Man kann auch Online ein neues Image flashen. Vorraussetzung ist, dass ein VTi-Image ab VTi 6.0.8 ab dem 12.07.2014 auf der Box ist und es &#039;&#039;&#039;keine&#039;&#039;&#039; 4K-Box ist (keine [[Vu  Solo 4K|Vu+ Solo 4K]], [[Vu  Uno 4K|Vu+ Uno 4K]], [[Vu  Duo 4K|Vu+ Duo 4K]], [[Vu  Uno 4K SE|Vu+ Uno 4K SE]], [[Vu  Ultimo 4K|Vu+ Ultimo 4K]], [[Vu  Duo 4K SE|Vu+ Duo 4K SE]] oder [[Vu  Zero 4K|Vu+ Zero 4K]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorgehensweise:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Aufrufen des [[Das VTi Panel|VTi Panels]] mit der &amp;quot;blauen Taste&amp;quot;&lt;br /&gt;
# In die Rubrik [[VTi Software-Werkzeuge]] wechseln&lt;br /&gt;
# Image Flash Werkzeug aufrufen&lt;br /&gt;
# Image auswählen&lt;br /&gt;
# Speicherort auswählen, nach klicken von &amp;quot;OK&amp;quot; wird der Download gestartet und entpackt&lt;br /&gt;
# Nach Bestätigung der Flashaktion im Infofenster beginnt der Flashvorgang (Achtung: Das aktuelle Image wird gelöscht und überschrieben)&lt;br /&gt;
&lt;br /&gt;
Nach kurzer Wartezeit ist der Flashvorgang beendet und die Vu+ startet mit dem [[Vu  Schritt für Schritt#VTi Wizard|Einrichtungsassistenten]] neu.&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Tetris&amp;diff=12309</id>
		<title>Tetris</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Tetris&amp;diff=12309"/>
		<updated>2024-01-03T17:38:37Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
{{Plugin Infobox | Name=Teris | Link=[https://vuplus-support.org/wbb4/index.php?thread/139981-tetris-v0-3-1-27-11-2023/ Forum] | Paket-Name=enigma2-plugin-extensions-tetris | Autor=rdamas }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tetris befindet sich auf dem Feed+ und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/139981-tetris-v0-3-1-27-11-2023/ Tetris]&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
&lt;br /&gt;
Tetris ist ein Clone des gleichnamigen PC-Spiels aus den 80er Jahren. Idee des Spiels ist, herunterfallende Spielteile so zu bewegen, dass sie am Boden möglichst lückenlose Reihen bilden. Solche Reihen schaffen Platz für neue Spielteile.&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen und Abhängigkeiten ===&lt;br /&gt;
&lt;br /&gt;
Keine&lt;br /&gt;
&lt;br /&gt;
=== Bedienung ===&lt;br /&gt;
&lt;br /&gt;
* grüne Taste, um ein Spiel zu starten,&lt;br /&gt;
* links und rechts, um einen Block zu bewegen,&lt;br /&gt;
* hoch und runter, um einen Block zu rotieren,&lt;br /&gt;
* ok, um das Fallenlassen zu beschleunigen und wieder abzubremsen.&lt;br /&gt;
&lt;br /&gt;
=== Vorschau ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Tetris.jpg|800px|Vorschau Plugin Tetris]]&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=SmartControl&amp;diff=12308</id>
		<title>SmartControl</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=SmartControl&amp;diff=12308"/>
		<updated>2024-01-03T17:37:28Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
{{Plugin Infobox | Name=SmartControl | Link=[https://vuplus-support.org/wbb4/index.php?thread/138287-smartcontrol-graphisches-interface-f%C3%BCr-smartmontools/ Forum] | Paket-Name=enigma2-plugin-extensions-smartcontrol | Autor=rdamas }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SmartControl befindet sich auf dem Feed+ und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/138287-smartcontrol-graphisches-interface-f%C3%BCr-smartmontools/ SmartControl]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
&lt;br /&gt;
SmartControl ist ein Frontend für &amp;lt;tt&amp;gt;smartctl&amp;lt;/tt&amp;gt; (aus dem smartmontools-Paket). &amp;lt;tt&amp;gt;smartctl&amp;lt;/tt&amp;gt; ist ein Programm zur Abfrage und Kontrolle von SMART-Daten (&#039;&#039;&#039;S&#039;&#039;&#039;elf-&#039;&#039;&#039;M&#039;&#039;&#039;onitoring, &#039;&#039;&#039;A&#039;&#039;&#039;nalysis, and &#039;&#039;&#039;R&#039;&#039;&#039;eporting &#039;&#039;&#039;T&#039;&#039;&#039;echnology) von Festplatten und SSD&#039;s. Mit dem Plugin können so die SMART-Daten der angeschlossenen Laufwerke ausgelesen werden, um ihren Zustand festzustellen und die Selbsttests durchzuführen.&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen und Abhängigkeiten ===&lt;br /&gt;
&lt;br /&gt;
* ein Full-HD-Skin&lt;br /&gt;
* Smartmontools &amp;gt;= Version 7.0 (wird mit installiert)&lt;br /&gt;
* das Paket util-linux (wird mit installiert)&lt;br /&gt;
&lt;br /&gt;
=== Bedienung ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss das benutzte Laufwerk ausgewählt werden. Auswahl mit den Cursor-Tasten hoch und runter, Bestätigung mit ok.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smart1a.jpg|800px|Auswahl des Laufwerks]]&lt;br /&gt;
&lt;br /&gt;
Jetzt werden die Informationen angezeigt, die das Tool &amp;lt;tt&amp;gt;smartctl&amp;lt;/tt&amp;gt; zum Laufwerk ausgelesen hat.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smart2a.jpg|800px|Informationen zum Laufwerk]]&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Tasten kann von hier weiter navigiert werden:&lt;br /&gt;
&lt;br /&gt;
* Exit kehrt zur Auswahl-Seite zurück&lt;br /&gt;
* Rot liest die SMART-Attribute des Laufwerks aus und zeigt sie an&lt;br /&gt;
* Grün zeigt das Ergebnis eines Selbsttests, falls das Laufwerk Selbsttests unterstützt&lt;br /&gt;
* Gelb liest das Errorlog des Laufwerks aus, falls das Laufwerk Errorlogs unterstützt&lt;br /&gt;
* Blau liest das Ergebnis eines kurzen Selbsttests aus, falls das Laufwerk kurze Selbsttests unterstützt&lt;br /&gt;
&lt;br /&gt;
Hinweis: Nicht jedes Laufwerk unterstützt alle Möglichkeiten. &lt;br /&gt;
&lt;br /&gt;
=== Interpretation der SMART-Attribute ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smart3a.jpg|800px|SMART-Attribute]]&lt;br /&gt;
&lt;br /&gt;
SMART-Attribute sind nicht standardisiert, sondern Laufwerk-abhängig implementiert.&lt;br /&gt;
&lt;br /&gt;
Jedes Attribut hat einen Raw- und einen normalisierten Wert. Der Raw-Wert ist komplett Laufwerk-abhängig und kann ohne Dokumentation nicht immer verlässlich interpretiert werden. Normalerweise handelt es sich dabei aber um physikalische Größen wie Temperatur, Anzahl Betriebsstunden oder einfache Zähler.&lt;br /&gt;
&lt;br /&gt;
Der normalisierte Wert bewegt sich zwischen 1 und 253, kleinere Werte bedeuten schlechterer Zustand. Hersteller legen oft auch 100 oder 200 als besten Wert fest.&lt;br /&gt;
&lt;br /&gt;
Die ausgelesenen Attribute werden in einer Tabelle mit 7 Spalten angezeigt:&lt;br /&gt;
&lt;br /&gt;
* ID - die offzielle Nummer des Attributs.&lt;br /&gt;
* Name - der offizielle Name des Attributs, wie ihn das Laufwerk meldet.&lt;br /&gt;
* Status - ok, wenn das Laufwerk den angezeigten Wert nicht für einen Fehler hält. Alles andere ist ein Fehler.&lt;br /&gt;
* Value - der ausgelesene aktuelle normierte Wert des Attributs.&lt;br /&gt;
* Worst - der schlechteste gespeicherte aufgetretene Wert des Attributs.&lt;br /&gt;
* Thresh - der Wert, unter dem ein normalisierter Wert als Fehler (&amp;quot;Fail condition&amp;quot;) angenommen wird.&lt;br /&gt;
* Raw - der Raw-Wert des Attributs.&lt;br /&gt;
&lt;br /&gt;
Die Liste kann mit den Channel-Tasten geblättert werden. Mit Exit wird diese Ansicht verlassen.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=ChessBoard&amp;diff=12307</id>
		<title>ChessBoard</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=ChessBoard&amp;diff=12307"/>
		<updated>2024-01-03T16:53:40Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
{{Plugin Infobox | Name=ChessBoard | Link=[https://vuplus-support.org/wbb4/index.php?thread/138434-chessboard-enigma2-frontend-f%C3%BCr-gnuchess/ Forum] | Paket-Name=enigma2-plugin-extensions-chessboard | Autor=rdamas }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ChessBoard befindet sich auf dem [[Feed+]] und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/138434-chessboard-enigma2-frontend-f%C3%BCr-gnuchess/ ChessBoard]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
&lt;br /&gt;
ChessBoard ist ein Plugin, um auf der Vu+ eine Partie Schach gegen den Computer zu spielen. Die Vu+ tritt mit GNU Chess oder Stockfish gegen euch an. Stockfish ist das spielstärkere Programm, aber nur für Boxen ARM-Prozessor (4k-Boxen) verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen und Abhängigkeiten ===&lt;br /&gt;
&lt;br /&gt;
* ein Full-HD-Skin&lt;br /&gt;
* gnuchess (wird mit installiert)&lt;br /&gt;
* python-chess (wird mit installiert)&lt;br /&gt;
* chess-opening-book-performance (Bibliothek für Eröffnungen, kann optional installiert werden)&lt;br /&gt;
&lt;br /&gt;
Alternativ kann im [https://vuplus-support.org/wbb4/index.php?thread/138434-chessboard-enigma2-frontend-f%C3%BCr-gnuchess/ Forum] auch die Chess-Engine Stockfish heruntergeladen und installiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Bedienung ===&lt;br /&gt;
&lt;br /&gt;
* mit den Pfeil- oder Zahlentasten das rote umrandete Feld zu einer eigenen Figur bewegen, diese mit OK markieren, mit den Pfeil- oder Zahlentasten das Zielfeld auswählen, wieder OK drücken. Jetzt ist der Computer an der Reihe.&lt;br /&gt;
* mit den Channel-Up- und -Down-Tasten kann die Bedenkzeit des Computers von einer bis zehn Sekunden eingestellt werden.&lt;br /&gt;
* mit der Menu-Taste können das Eröffnungsbuch und die Chess-Engine gewählt werden&lt;br /&gt;
* mit der blauen Taste wählt ihr, ob ihr schwarz oder weiß spielen wollt - ihr könnt auch während des Spiels wechseln.&lt;br /&gt;
* mit der gelben Taste kann das Brett gedreht werden&lt;br /&gt;
* mit der grünen Taste wird euch ein Vorschlag für euren nächsten Zug angezeigt.&lt;br /&gt;
* mit der roten Taste könnt ihr Züge wieder zurücknehmen.&lt;br /&gt;
&lt;br /&gt;
=== Vorschau ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Chessboard.jpg|800px|Plugin ChessBoard]]&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Vorlage:Plugin_Infobox&amp;diff=12306</id>
		<title>Vorlage:Plugin Infobox</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Vorlage:Plugin_Infobox&amp;diff=12306"/>
		<updated>2024-01-03T16:51:21Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Informationen zum Plugin&lt;br /&gt;
|-&lt;br /&gt;
| Name || {{{Name|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Link || {{{Link|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Paket-Name || {{{Paket-Name|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Autor || {{{Autor|-}}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=ChessBoard&amp;diff=12305</id>
		<title>ChessBoard</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=ChessBoard&amp;diff=12305"/>
		<updated>2024-01-03T16:48:19Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
{{Plugin Infobox | Name=ChessBoard | Paket-Name=enigma2-plugin-extensions-chessboard | Autor=rdamas | Version=0.2 }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ChessBoard befindet sich auf dem [[Feed+]] und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/138434-chessboard-enigma2-frontend-f%C3%BCr-gnuchess/ ChessBoard]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
&lt;br /&gt;
ChessBoard ist ein Plugin, um auf der Vu+ eine Partie Schach gegen den Computer zu spielen. Die Vu+ tritt mit GNU Chess oder Stockfish gegen euch an. Stockfish ist das spielstärkere Programm, aber nur für Boxen ARM-Prozessor (4k-Boxen) verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen und Abhängigkeiten ===&lt;br /&gt;
&lt;br /&gt;
* ein Full-HD-Skin&lt;br /&gt;
* gnuchess (wird mit installiert)&lt;br /&gt;
* python-chess (wird mit installiert)&lt;br /&gt;
* chess-opening-book-performance (Bibliothek für Eröffnungen, kann optional installiert werden)&lt;br /&gt;
&lt;br /&gt;
Alternativ kann im [https://vuplus-support.org/wbb4/index.php?thread/138434-chessboard-enigma2-frontend-f%C3%BCr-gnuchess/ Forum] auch die Chess-Engine Stockfish heruntergeladen und installiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Bedienung ===&lt;br /&gt;
&lt;br /&gt;
* mit den Pfeil- oder Zahlentasten das rote umrandete Feld zu einer eigenen Figur bewegen, diese mit OK markieren, mit den Pfeil- oder Zahlentasten das Zielfeld auswählen, wieder OK drücken. Jetzt ist der Computer an der Reihe.&lt;br /&gt;
* mit den Channel-Up- und -Down-Tasten kann die Bedenkzeit des Computers von einer bis zehn Sekunden eingestellt werden.&lt;br /&gt;
* mit der Menu-Taste können das Eröffnungsbuch und die Chess-Engine gewählt werden&lt;br /&gt;
* mit der blauen Taste wählt ihr, ob ihr schwarz oder weiß spielen wollt - ihr könnt auch während des Spiels wechseln.&lt;br /&gt;
* mit der gelben Taste kann das Brett gedreht werden&lt;br /&gt;
* mit der grünen Taste wird euch ein Vorschlag für euren nächsten Zug angezeigt.&lt;br /&gt;
* mit der roten Taste könnt ihr Züge wieder zurücknehmen.&lt;br /&gt;
&lt;br /&gt;
=== Vorschau ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Chessboard.jpg|800px|Plugin ChessBoard]]&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Vorlage:Plugin_Infobox&amp;diff=12304</id>
		<title>Vorlage:Plugin Infobox</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Vorlage:Plugin_Infobox&amp;diff=12304"/>
		<updated>2024-01-03T16:45:22Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Informationen zum Plugin&lt;br /&gt;
|-&lt;br /&gt;
| Name || {{{Name|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Paket-Name || {{{Paket-Name|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Autor || {{{Autor|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Version || {{{Version|-}}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Vorlage:Plugin_Infobox&amp;diff=12303</id>
		<title>Vorlage:Plugin Infobox</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Vorlage:Plugin_Infobox&amp;diff=12303"/>
		<updated>2024-01-03T16:42:41Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;left&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Informationen zum Plugin&lt;br /&gt;
|-&lt;br /&gt;
| Name || {{{Name|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Paket-Name || {{{Paket-Name|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Autor || {{{Autor|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Version || {{{Version|-}}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Vorlage:Plugin_Infobox&amp;diff=12302</id>
		<title>Vorlage:Plugin Infobox</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Vorlage:Plugin_Infobox&amp;diff=12302"/>
		<updated>2024-01-03T16:39:08Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: Die Seite wurde neu angelegt: „&amp;lt;onlyinclude&amp;gt; {| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;left&amp;quot; border=&amp;quot;0&amp;quot; |- ! Überschrift !! Überschrift |- | Name || {{{Name|-}}} |- | Paket-Name || {{{Paket-Name|-}}} |-…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;left&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Überschrift !! Überschrift&lt;br /&gt;
|-&lt;br /&gt;
| Name || {{{Name|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Paket-Name || {{{Paket-Name|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Autor || {{{Autor|-}}}&lt;br /&gt;
|-&lt;br /&gt;
| Version || {{{Version|-}}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Vorlage:Linkbox_Plugins&amp;diff=12204</id>
		<title>Vorlage:Linkbox Plugins</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Vorlage:Linkbox_Plugins&amp;diff=12204"/>
		<updated>2023-12-31T10:04:23Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;right&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#66CDAA;&amp;quot; | [[Plugin|Linkbox Plugins]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#B9FFC5;&amp;quot; |&lt;br /&gt;
*[[AutoShredder]]&lt;br /&gt;
*[[AutoTimer]]&lt;br /&gt;
*[[Check Timer]]&lt;br /&gt;
*[[ChessBoard]]&lt;br /&gt;
*[[Cool TV Guide]]&lt;br /&gt;
*[[CoverFind]]&lt;br /&gt;
*[[Dateimanager VTi]]&lt;br /&gt;
*[[DVD Player]]&lt;br /&gt;
*[[Enhanced Movie Center|EMC]]&lt;br /&gt;
*[[EPGrefresh]]&lt;br /&gt;
*[[GraphMultiEPG]]&lt;br /&gt;
*[[Hybrid Broadcast Broadband TV|HbbTV]]&lt;br /&gt;
*[[LCD4Linux]]&lt;br /&gt;
*[[Mediaplayer]]&lt;br /&gt;
*[[MediaPortal]]&lt;br /&gt;
*[[MiniTV Skinner]]&lt;br /&gt;
*[[MultiQuickButton]]&lt;br /&gt;
*[[OpenWebif]]&lt;br /&gt;
*[[Permanenttimeshift]]&lt;br /&gt;
*[[Quad-PiP]]&lt;br /&gt;
*[[Remote Timer]]&lt;br /&gt;
*[[Sat-Finder]]&lt;br /&gt;
*[[Schneller Kanalwechsel (FCC)]]&lt;br /&gt;
*[[Serien Recorder]]&lt;br /&gt;
*[[ShootYourScreen]]&lt;br /&gt;
*[[SmartControl]]&lt;br /&gt;
*[[Tetris]]&lt;br /&gt;
*[[VMC - Video Music Center|VMC]]&lt;br /&gt;
*[[YAMP Music Player]]&lt;br /&gt;
|}&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=SmartControl&amp;diff=12203</id>
		<title>SmartControl</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=SmartControl&amp;diff=12203"/>
		<updated>2023-12-31T10:03:02Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
&#039;&#039;&#039;SmartControl befindet sich auf dem Feed+ und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/138287-smartcontrol-graphisches-interface-f%C3%BCr-smartmontools/ SmartControl]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
&lt;br /&gt;
SmartControl ist ein Frontend für &amp;lt;tt&amp;gt;smartctl&amp;lt;/tt&amp;gt; (aus dem smartmontools-Paket). &amp;lt;tt&amp;gt;smartctl&amp;lt;/tt&amp;gt; ist ein Programm zur Abfrage und Kontrolle von SMART-Daten (&#039;&#039;&#039;S&#039;&#039;&#039;elf-&#039;&#039;&#039;M&#039;&#039;&#039;onitoring, &#039;&#039;&#039;A&#039;&#039;&#039;nalysis, and &#039;&#039;&#039;R&#039;&#039;&#039;eporting &#039;&#039;&#039;T&#039;&#039;&#039;echnology) von Festplatten und SSD&#039;s. Mit dem Plugin können so die SMART-Daten der angeschlossenen Laufwerke ausgelesen werden, um ihren Zustand festzustellen und die Selbsttests durchzuführen.&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen und Abhängigkeiten ===&lt;br /&gt;
&lt;br /&gt;
* ein Full-HD-Skin&lt;br /&gt;
* Smartmontools &amp;gt;= Version 7.0 (wird mit installiert)&lt;br /&gt;
* das Paket util-linux (wird mit installiert)&lt;br /&gt;
&lt;br /&gt;
=== Bedienung ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss das benutzte Laufwerk ausgewählt werden. Auswahl mit den Cursor-Tasten hoch und runter, Bestätigung mit ok.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smart1a.jpg|800px|Auswahl des Laufwerks]]&lt;br /&gt;
&lt;br /&gt;
Jetzt werden die Informationen angezeigt, die das Tool &amp;lt;tt&amp;gt;smartctl&amp;lt;/tt&amp;gt; zum Laufwerk ausgelesen hat.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smart2a.jpg|800px|Informationen zum Laufwerk]]&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Tasten kann von hier weiter navigiert werden:&lt;br /&gt;
&lt;br /&gt;
* Exit kehrt zur Auswahl-Seite zurück&lt;br /&gt;
* Rot liest die SMART-Attribute des Laufwerks aus und zeigt sie an&lt;br /&gt;
* Grün zeigt das Ergebnis eines Selbsttests, falls das Laufwerk Selbsttests unterstützt&lt;br /&gt;
* Gelb liest das Errorlog des Laufwerks aus, falls das Laufwerk Errorlogs unterstützt&lt;br /&gt;
* Blau liest das Ergebnis eines kurzen Selbsttests aus, falls das Laufwerk kurze Selbsttests unterstützt&lt;br /&gt;
&lt;br /&gt;
Hinweis: Nicht jedes Laufwerk unterstützt alle Möglichkeiten. &lt;br /&gt;
&lt;br /&gt;
=== Interpretation der SMART-Attribute ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smart3a.jpg|800px|SMART-Attribute]]&lt;br /&gt;
&lt;br /&gt;
SMART-Attribute sind nicht standardisiert, sondern Laufwerk-abhängig implementiert.&lt;br /&gt;
&lt;br /&gt;
Jedes Attribut hat einen Raw- und einen normalisierten Wert. Der Raw-Wert ist komplett Laufwerk-abhängig und kann ohne Dokumentation nicht immer verlässlich interpretiert werden. Normalerweise handelt es sich dabei aber um physikalische Größen wie Temperatur, Anzahl Betriebsstunden oder einfache Zähler.&lt;br /&gt;
&lt;br /&gt;
Der normalisierte Wert bewegt sich zwischen 1 und 253, kleinere Werte bedeuten schlechterer Zustand. Hersteller legen oft auch 100 oder 200 als besten Wert fest.&lt;br /&gt;
&lt;br /&gt;
Die ausgelesenen Attribute werden in einer Tabelle mit 7 Spalten angezeigt:&lt;br /&gt;
&lt;br /&gt;
* ID - die offzielle Nummer des Attributs.&lt;br /&gt;
* Name - der offizielle Name des Attributs, wie ihn das Laufwerk meldet.&lt;br /&gt;
* Status - ok, wenn das Laufwerk den angezeigten Wert nicht für einen Fehler hält. Alles andere ist ein Fehler.&lt;br /&gt;
* Value - der ausgelesene aktuelle normierte Wert des Attributs.&lt;br /&gt;
* Worst - der schlechteste gespeicherte aufgetretene Wert des Attributs.&lt;br /&gt;
* Thresh - der Wert, unter dem ein normalisierter Wert als Fehler (&amp;quot;Fail condition&amp;quot;) angenommen wird.&lt;br /&gt;
* Raw - der Raw-Wert des Attributs.&lt;br /&gt;
&lt;br /&gt;
Die Liste kann mit den Channel-Tasten geblättert werden. Mit Exit wird diese Ansicht verlassen.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=SmartControl&amp;diff=12202</id>
		<title>SmartControl</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=SmartControl&amp;diff=12202"/>
		<updated>2023-12-31T10:02:08Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: Die Seite wurde neu angelegt: „Kategorie:Plugins {{Linkbox Plugins}} &amp;#039;&amp;#039;&amp;#039;SmartControl befindet sich auf dem Feed+ und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/138287-sm…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
&#039;&#039;&#039;SmartControl befindet sich auf dem Feed+ und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/138287-smartcontrol-graphisches-interface-f%C3%BCr-smartmontools/ SmartControl]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
&lt;br /&gt;
SmartControl ist ein Frontend für &amp;lt;tt&amp;gt;smartctl&amp;lt;/tt&amp;gt; (aus dem smartmontools-Paket). &amp;lt;tt&amp;gt;smartctl&amp;lt;/tt&amp;gt; ist ein Programm zur Abfrage und Kontrolle von SMART-Daten (&#039;&#039;&#039;S&#039;&#039;&#039;elf-&#039;&#039;&#039;M&#039;&#039;&#039;onitoring, &#039;&#039;&#039;A&#039;&#039;&#039;nalysis, and &#039;&#039;&#039;R&#039;&#039;&#039;eporting &#039;&#039;&#039;T&#039;&#039;&#039;echnology) von Festplatten und SSD&#039;s. Mit dem Plugin können so die SMART-Daten der angeschlossenen Laufwerke ausgelesen werden, um ihren Zustand festzustellen und die Selbsttests durchzuführen.&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen und Abhängigkeiten ===&lt;br /&gt;
&lt;br /&gt;
* ein Full-HD-Skin&lt;br /&gt;
* Smartmontools &amp;gt;= Version 7.0 (wird mit installiert)&lt;br /&gt;
* das Paket util-linux (wird mit installiert)&lt;br /&gt;
&lt;br /&gt;
=== Bedienung ===&lt;br /&gt;
&lt;br /&gt;
Im ersten Schritt muss das benutzte Laufwerk ausgewählt werden. Auswahl mit den Cursor-Tasten hoch und runter, Bestätigung mit ok.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smart1a.jpg|800px|Auswahl des Laufwerks]]&lt;br /&gt;
&lt;br /&gt;
Jetzt werden die Informationen angezeigt, die das Tool &amp;lt;tt&amp;gt;smartctl&amp;lt;/tt&amp;gt; zum Laufwerk ausgelesen hat.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smart2a.jpg|800px|Informationen zum Laufwerk]]&lt;br /&gt;
&lt;br /&gt;
Mit folgenden Tasten kann von hier weiter navigiert werden:&lt;br /&gt;
&lt;br /&gt;
* Exit kehrt zur Auswahl-Seite zurück&lt;br /&gt;
* Rot liest die SMART-Attribute des Laufwerks aus und zeigt sie an&lt;br /&gt;
* Grün zeigt das Ergebnis eines Selbsttests, falls das Laufwerk Selbsttests unterstützt&lt;br /&gt;
* Gelb liest das Errorlog des Laufwerks aus, falls das Laufwerk Errorlogs unterstützt&lt;br /&gt;
* Blau liest das Ergebnis eines kurzen Selbsttests aus, fasll das Laufwerk kurze Selbsttests unterstützt&lt;br /&gt;
&lt;br /&gt;
Hinweis: Nicht jedes Laufwerk unterstützt alle Möglichkeiten. &lt;br /&gt;
&lt;br /&gt;
=== Interpretation der SMART-Attribute ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Smart3a.jpg|800px|SMART-Attribute]]&lt;br /&gt;
&lt;br /&gt;
SMART-Attribute sind nicht standardisiert, sondern Laufwerk-abhängig implementiert.&lt;br /&gt;
&lt;br /&gt;
Jedes Attribut hat einen Raw- und einen normalisierten Wert. Der Raw-Wert ist komplett Laufwerk-abhängig und kann ohne Dokumentation nicht immer verlässlich interpretiert werden. Normalerweise handelt es sich dabei aber um physikalische Größen wie Temperatur, Anzahl Betriebsstunden oder einfache Zähler.&lt;br /&gt;
&lt;br /&gt;
Der normalisierte Wert bewegt sich zwischen 1 und 253, kleinere Werte bedeuten schlechterer Zustand. Hersteller legen oft auch 100 oder 200 als besten Wert fest.&lt;br /&gt;
&lt;br /&gt;
Die ausgelesenen Attribute werden in einer Tabelle mit 7 Spalten angezeigt:&lt;br /&gt;
&lt;br /&gt;
* ID - die offzielle Nummer des Attributs.&lt;br /&gt;
* Name - der offizielle Name des Attributs, wie ihn das Laufwerk meldet.&lt;br /&gt;
* Status - ok, wenn das Laufwerk den angezeigten Wert nicht für einen Fehler hält. Alles andere ist ein Fehler.&lt;br /&gt;
* Value - der ausgelesene aktuelle normierte Wert des Attributs.&lt;br /&gt;
* Worst - der schlechteste gespeicherte aufgetretene Wert des Attributs.&lt;br /&gt;
* Thresh - der Wert, unter dem ein normalisierter Wert als Fehler (&amp;quot;Fail condition&amp;quot;) angenommen wird.&lt;br /&gt;
* Raw - der Raw-Wert des Attributs.&lt;br /&gt;
&lt;br /&gt;
Die Liste kann mit den Channel-Tasten geblättert werden. Mit Exit wird diese Ansicht verlassen.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Datei:Smart3a.jpg&amp;diff=12201</id>
		<title>Datei:Smart3a.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Datei:Smart3a.jpg&amp;diff=12201"/>
		<updated>2023-12-31T09:31:51Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liste der ausgelesenen SMART-Attribute eines Laufwerks&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Datei:Smart2a.jpg&amp;diff=12200</id>
		<title>Datei:Smart2a.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Datei:Smart2a.jpg&amp;diff=12200"/>
		<updated>2023-12-31T09:22:52Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Informationen zum Laufwerk&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Datei:Smart1a.jpg&amp;diff=12199</id>
		<title>Datei:Smart1a.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Datei:Smart1a.jpg&amp;diff=12199"/>
		<updated>2023-12-31T09:06:53Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Auswahl des zu überprüfenden Laufwerks&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Vorlage:Linkbox_Plugins&amp;diff=12198</id>
		<title>Vorlage:Linkbox Plugins</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Vorlage:Linkbox_Plugins&amp;diff=12198"/>
		<updated>2023-12-29T08:33:19Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;right&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#66CDAA;&amp;quot; | [[Plugin|Linkbox Plugins]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#B9FFC5;&amp;quot; |&lt;br /&gt;
*[[AutoShredder]]&lt;br /&gt;
*[[AutoTimer]]&lt;br /&gt;
*[[Check Timer]]&lt;br /&gt;
*[[ChessBoard]]&lt;br /&gt;
*[[Cool TV Guide]]&lt;br /&gt;
*[[CoverFind]]&lt;br /&gt;
*[[Dateimanager VTi]]&lt;br /&gt;
*[[DVD Player]]&lt;br /&gt;
*[[Enhanced Movie Center|EMC]]&lt;br /&gt;
*[[EPGrefresh]]&lt;br /&gt;
*[[GraphMultiEPG]]&lt;br /&gt;
*[[Hybrid Broadcast Broadband TV|HbbTV]]&lt;br /&gt;
*[[LCD4Linux]]&lt;br /&gt;
*[[Mediaplayer]]&lt;br /&gt;
*[[MediaPortal]]&lt;br /&gt;
*[[MiniTV Skinner]]&lt;br /&gt;
*[[MultiQuickButton]]&lt;br /&gt;
*[[OpenWebif]]&lt;br /&gt;
*[[Permanenttimeshift]]&lt;br /&gt;
*[[Quad-PiP]]&lt;br /&gt;
*[[Remote Timer]]&lt;br /&gt;
*[[Sat-Finder]]&lt;br /&gt;
*[[Schneller Kanalwechsel (FCC)]]&lt;br /&gt;
*[[Serien Recorder]]&lt;br /&gt;
*[[ShootYourScreen]]&lt;br /&gt;
*[[Tetris]]&lt;br /&gt;
*[[VMC - Video Music Center|VMC]]&lt;br /&gt;
*[[YAMP Music Player]]&lt;br /&gt;
|}&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Tetris&amp;diff=12197</id>
		<title>Tetris</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Tetris&amp;diff=12197"/>
		<updated>2023-12-29T08:32:25Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
&#039;&#039;&#039;Tetris befindet sich auf dem Feed+ und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/139981-tetris-v0-3-1-27-11-2023/ Tetris]&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
&lt;br /&gt;
Tetris ist ein Clone des gleichnamigen PC-Spiels aus den 80er Jahren. Idee des Spiels ist, herunterfallende Spielteile so zu bewegen, dass sie am Boden möglichst lückenlose Reihen bilden. Solche Reihen schaffen Platz für neue Spielteile.&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen und Abhängigkeiten ===&lt;br /&gt;
&lt;br /&gt;
Keine&lt;br /&gt;
&lt;br /&gt;
=== Bedienung ===&lt;br /&gt;
&lt;br /&gt;
* grüne Taste, um ein Spiel zu starten,&lt;br /&gt;
* links und rechts, um einen Block zu bewegen,&lt;br /&gt;
* hoch und runter, um einen Block zu rotieren,&lt;br /&gt;
* ok, um das Fallenlassen zu beschleunigen und wieder abzubremsen.&lt;br /&gt;
&lt;br /&gt;
=== Vorschau ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Tetris.jpg|800px|Vorschau Plugin Tetris]]&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Tetris&amp;diff=12196</id>
		<title>Tetris</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Tetris&amp;diff=12196"/>
		<updated>2023-12-29T08:31:55Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: Die Seite wurde neu angelegt: „Kategorie:Plugins {{Linkbox Plugins}} &amp;#039;&amp;#039;&amp;#039;Tetris befindet sich auf dem Feed+ und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/138434-chessboa…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
&#039;&#039;&#039;Tetris befindet sich auf dem Feed+ und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/138434-chessboard-enigma2-frontend-f%C3%BCr-gnuchess/ ChessBoard]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen gibt es im Forum unter [https://vuplus-support.org/wbb4/index.php?thread/139981-tetris-v0-3-1-27-11-2023/ Tetris]&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
&lt;br /&gt;
Tetris ist ein Clone des gleichnamigen PC-Spiels aus den 80er Jahren. Idee des Spiels ist, herunterfallende Spielteile so zu bewegen, dass sie am Boden möglichst lückenlose Reihen bilden. Solche Reihen schaffen Platz für neue Spielteile.&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen und Abhängigkeiten ===&lt;br /&gt;
&lt;br /&gt;
Keine&lt;br /&gt;
&lt;br /&gt;
=== Bedienung ===&lt;br /&gt;
&lt;br /&gt;
* grüne Taste, um ein Spiel zu starten,&lt;br /&gt;
* links und rechts, um einen Block zu bewegen,&lt;br /&gt;
* hoch und runter, um einen Block zu rotieren,&lt;br /&gt;
* ok, um das Fallenlassen zu beschleunigen und wieder abzubremsen.&lt;br /&gt;
&lt;br /&gt;
=== Vorschau ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Tetris.jpg|800px|Vorschau Plugin Tetris]]&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Datei:Tetris.jpg&amp;diff=12195</id>
		<title>Datei:Tetris.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Datei:Tetris.jpg&amp;diff=12195"/>
		<updated>2023-12-29T08:22:15Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vorschau Plugin Tetris&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Vorlage:Linkbox_Plugins&amp;diff=12194</id>
		<title>Vorlage:Linkbox Plugins</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Vorlage:Linkbox_Plugins&amp;diff=12194"/>
		<updated>2023-12-29T08:18:22Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;right&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#66CDAA;&amp;quot; | [[Plugin|Linkbox Plugins]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#B9FFC5;&amp;quot; |&lt;br /&gt;
*[[AutoShredder]]&lt;br /&gt;
*[[AutoTimer]]&lt;br /&gt;
*[[Check Timer]]&lt;br /&gt;
*[[ChessBoard]]&lt;br /&gt;
*[[Cool TV Guide]]&lt;br /&gt;
*[[CoverFind]]&lt;br /&gt;
*[[Dateimanager VTi]]&lt;br /&gt;
*[[DVD Player]]&lt;br /&gt;
*[[Enhanced Movie Center|EMC]]&lt;br /&gt;
*[[EPGrefresh]]&lt;br /&gt;
*[[GraphMultiEPG]]&lt;br /&gt;
*[[Hybrid Broadcast Broadband TV|HbbTV]]&lt;br /&gt;
*[[LCD4Linux]]&lt;br /&gt;
*[[Mediaplayer]]&lt;br /&gt;
*[[MediaPortal]]&lt;br /&gt;
*[[MiniTV Skinner]]&lt;br /&gt;
*[[MultiQuickButton]]&lt;br /&gt;
*[[OpenWebif]]&lt;br /&gt;
*[[Permanenttimeshift]]&lt;br /&gt;
*[[Quad-PiP]]&lt;br /&gt;
*[[Remote Timer]]&lt;br /&gt;
*[[Sat-Finder]]&lt;br /&gt;
*[[Schneller Kanalwechsel (FCC)]]&lt;br /&gt;
*[[Serien Recorder]]&lt;br /&gt;
*[[ShootYourScreen]]&lt;br /&gt;
*[[VMC - Video Music Center|VMC]]&lt;br /&gt;
*[[YAMP Music Player]]&lt;br /&gt;
|}&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=ChessBoard&amp;diff=12193</id>
		<title>ChessBoard</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=ChessBoard&amp;diff=12193"/>
		<updated>2023-12-29T08:15:43Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
&#039;&#039;&#039;ChessBoard befindet sich auf dem Feed+ und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/138434-chessboard-enigma2-frontend-f%C3%BCr-gnuchess/ ChessBoard]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
&lt;br /&gt;
ChessBoard ist ein Plugin, um auf der Vu+ eine Partie Schach gegen den Computer zu spielen. Die Vu+ tritt mit GNU Chess oder Stockfish gegen euch an. Stockfish ist das spielstärkere Programm, aber nur für Boxen ARM-Prozessor (4k-Boxen) verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen und Abhängigkeiten ===&lt;br /&gt;
&lt;br /&gt;
* ein Full-HD-Skin&lt;br /&gt;
* gnuchess (wird mit installiert)&lt;br /&gt;
* python-chess (wird mit installiert)&lt;br /&gt;
* chess-opening-book-performance (Bibliothek für Eröffnungen, kann optional installiert werden)&lt;br /&gt;
&lt;br /&gt;
Alternativ kann im [https://vuplus-support.org/wbb4/index.php?thread/138434-chessboard-enigma2-frontend-f%C3%BCr-gnuchess/ Forum] auch die Chess-Engine Stockfish heruntergeladen und installiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Bedienung ===&lt;br /&gt;
&lt;br /&gt;
* mit den Pfeil- oder Zahlentasten das rote umrandete Feld zu einer eigenen Figur bewegen, diese mit OK markieren, mit den Pfeil- oder Zahlentasten das Zielfeld auswählen, wieder OK drücken. Jetzt ist der Computer an der Reihe.&lt;br /&gt;
* mit den Channel-Up- und -Down-Tasten kann die Bedenkzeit des Computers von einer bis zehn Sekunden eingestellt werden.&lt;br /&gt;
* mit der Menu-Taste können das Eröffnungsbuch und die Chess-Engine gewählt werden&lt;br /&gt;
* mit der blauen Taste wählt ihr, ob ihr schwarz oder weiß spielen wollt - ihr könnt auch während des Spiels wechseln.&lt;br /&gt;
* mit der gelben Taste kann das Brett gedreht werden&lt;br /&gt;
* mit der grünen Taste wird euch ein Vorschlag für euren nächsten Zug angezeigt.&lt;br /&gt;
* mit der roten Taste könnt ihr Züge wieder zurücknehmen.&lt;br /&gt;
&lt;br /&gt;
=== Vorschau ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Chessboard.jpg|800px|Plugin ChessBoard]]&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=EPG_Share&amp;diff=12192</id>
		<title>EPG Share</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=EPG_Share&amp;diff=12192"/>
		<updated>2023-12-29T08:12:55Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Index]]&lt;br /&gt;
[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
&#039;&#039;&#039;EPG Share  erreicht man unter: [[Plugin Browser|Erweiterungen]] &amp;amp;rArr; EPG Share&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;[[VTi Menüstruktur]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;EPG Share ist ein [[Plugin]] und kann über den [[Erweiterungen|Plugin Browser]] installiert werden.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie der Name schon sagt werden hier EPG-Daten übertragen/getauscht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Senden:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Jeder Plugin-User läd beim Kanal zappen sein EPG für den aktuellen Kanal zum Server hoch, das EPG wird Zeitverzögert und auch nur wenn man auf dem Kanal länger als 10 Sekunden bleibt, hochgeladen. Das ganze läuft in einem extra Thread und führt zu keinen E2 Spinner.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empfangen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beim E2-neustart werden die EPG-Daten für die eigene Kanalliste heruntergeladen und importiert. Optional könnt ihr in den Einstellungen alle x Stunden ein Auto Download / Import vom EPG einsstellen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;&#039;&#039;&#039;Das Plugin ist obsolet und funkktioniert nicht mehr. Es sollte deinstalliert werden.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Plugin funktioniert nur wenn es auch mehrere User nutzen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Plugin läuft auch nur im Zusammenhang mit einem VTi Image, da hier im Image diverse Anpassungen vorgenommen wurden.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=EPG_Share&amp;diff=12191</id>
		<title>EPG Share</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=EPG_Share&amp;diff=12191"/>
		<updated>2023-12-29T08:12:15Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Index]]&lt;br /&gt;
[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
&#039;&#039;&#039;EPG Share  erreicht man unter: [[Plugin Browser|Erweiterungen]] &amp;amp;rArr; EPG Share&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;[[VTi Menüstruktur]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;EPG Share ist ein [[Plugin]] und kann über den [[Erweiterungen|Plugin Browser]] installiert werden.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weiter Info&#039;s gibt es im Forum unter &amp;amp;rArr; [http://www.vuplus-support.org/wbb3/index.php?page=Thread&amp;amp;threadID=91166&amp;amp;pageNo=1 EPG Share *beta*]&lt;br /&gt;
&lt;br /&gt;
Wie der Name schon sagt werden hier EPG-Daten übertragen/getauscht.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Senden:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Jeder Plugin-User läd beim Kanal zappen sein EPG für den aktuellen Kanal zum Server hoch, das EPG wird Zeitverzögert und auch nur wenn man auf dem Kanal länger als 10 Sekunden bleibt, hochgeladen. Das ganze läuft in einem extra Thread und führt zu keinen E2 Spinner.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Empfangen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beim E2-neustart werden die EPG-Daten für die eigene Kanalliste heruntergeladen und importiert. Optional könnt ihr in den Einstellungen alle x Stunden ein Auto Download / Import vom EPG einsstellen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;&#039;&#039;&#039;Das Plugin ist obsolet und funkktioniert nicht mehr. Es sollte deinstalliert werden.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Plugin funktioniert nur wenn es auch mehrere User nutzen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Das Plugin läuft auch nur im Zusammenhang mit einem VTi Image, da hier im Image diverse Anpassungen vorgenommen wurden.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Vorlage:Linkbox_Plugins&amp;diff=12190</id>
		<title>Vorlage:Linkbox Plugins</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Vorlage:Linkbox_Plugins&amp;diff=12190"/>
		<updated>2023-12-29T08:09:59Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;right&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#66CDAA;&amp;quot; | [[Plugin|Linkbox Plugins]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#B9FFC5;&amp;quot; |&lt;br /&gt;
*[[AutoShredder]]&lt;br /&gt;
*[[AutoTimer]]&lt;br /&gt;
*[[Check Timer]]&lt;br /&gt;
*[[ChessBoard]]&lt;br /&gt;
*[[Cool TV Guide]]&lt;br /&gt;
*[[CoverFind]]&lt;br /&gt;
*[[Dateimanager VTi]]&lt;br /&gt;
*[[DVD Player]]&lt;br /&gt;
*[[Enhanced Movie Center|EMC]]&lt;br /&gt;
*[[EPGrefresh]]&lt;br /&gt;
*[[GraphMultiEPG]]&lt;br /&gt;
*[[Hybrid Broadcast Broadband TV|HbbTV]]&lt;br /&gt;
*[[LCD4Linux]]&lt;br /&gt;
*[[Mediaplayer]]&lt;br /&gt;
*[[MediaPortal]]&lt;br /&gt;
*[[MiniTV Skinner]]&lt;br /&gt;
*[[MultiQuickButton]]&lt;br /&gt;
*[[OpenWebif]]&lt;br /&gt;
*[[Permanenttimeshift]]&lt;br /&gt;
*[[Quad-PiP]]&lt;br /&gt;
*[[Remote Timer]]&lt;br /&gt;
*[[Sat-Finder]]&lt;br /&gt;
*[[Schneller Kanalwechsel (FCC)]]&lt;br /&gt;
*[[Serien Recorder]]&lt;br /&gt;
*[[ShootYourScreen]]&lt;br /&gt;
*[[VMC - Video Music Center|VMC]]&lt;br /&gt;
*[[Xbmc]]&lt;br /&gt;
*[[YAMP Music Player]]&lt;br /&gt;
|}&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Vorlage:Linkbox_Plugins&amp;diff=12189</id>
		<title>Vorlage:Linkbox Plugins</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Vorlage:Linkbox_Plugins&amp;diff=12189"/>
		<updated>2023-12-29T08:09:24Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;right&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#66CDAA;&amp;quot; | [[Plugin|Linkbox Plugins]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#B9FFC5;&amp;quot; |&lt;br /&gt;
*[[AutoShredder]]&lt;br /&gt;
*[[AutoTimer]]&lt;br /&gt;
*[[Check Timer]]&lt;br /&gt;
*[[ChessBoard]]&lt;br /&gt;
*[[Cool TV Guide]]&lt;br /&gt;
*[[CoverFind]]&lt;br /&gt;
*[[Dateimanager VTi]]&lt;br /&gt;
*[[DVD Player]]&lt;br /&gt;
*[[Enhanced Movie Center|EMC]]&lt;br /&gt;
*[[EPG Share]]&lt;br /&gt;
*[[EPGrefresh]]&lt;br /&gt;
*[[GraphMultiEPG]]&lt;br /&gt;
*[[Hybrid Broadcast Broadband TV|HbbTV]]&lt;br /&gt;
*[[LCD4Linux]]&lt;br /&gt;
*[[Mediaplayer]]&lt;br /&gt;
*[[MediaPortal]]&lt;br /&gt;
*[[MiniTV Skinner]]&lt;br /&gt;
*[[MultiQuickButton]]&lt;br /&gt;
*[[OpenWebif]]&lt;br /&gt;
*[[Permanenttimeshift]]&lt;br /&gt;
*[[Quad-PiP]]&lt;br /&gt;
*[[Remote Timer]]&lt;br /&gt;
*[[Sat-Finder]]&lt;br /&gt;
*[[Schneller Kanalwechsel (FCC)]]&lt;br /&gt;
*[[Serien Recorder]]&lt;br /&gt;
*[[ShootYourScreen]]&lt;br /&gt;
*[[VMC - Video Music Center|VMC]]&lt;br /&gt;
*[[Xbmc]]&lt;br /&gt;
*[[YAMP Music Player]]&lt;br /&gt;
|}&amp;lt;/onlyinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=ChessBoard&amp;diff=12188</id>
		<title>ChessBoard</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=ChessBoard&amp;diff=12188"/>
		<updated>2023-12-28T21:46:35Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: Die Seite wurde neu angelegt: „Kategorie:Plugins {{Linkbox Plugins}} &amp;#039;&amp;#039;&amp;#039;ChessBoard befindet sich auf dem Feed+ und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/138434-ches…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Plugins]]&lt;br /&gt;
{{Linkbox Plugins}}&lt;br /&gt;
&#039;&#039;&#039;ChessBoard befindet sich auf dem Feed+ und im Forum: [https://vuplus-support.org/wbb4/index.php?thread/138434-chessboard-enigma2-frontend-f%C3%BCr-gnuchess/ ChessBoard]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Beschreibung ===&lt;br /&gt;
&lt;br /&gt;
ChessBoard ist ein Plugin, um auf der Vu+ eine Partie Schach gegen den Computer zu spielen. Die Vu+ tritt mit GNU Chess oder Stockfish gegen euch an. Stockfish ist das spielstärkere Programm, aber nur für Boxen ARM-Prozessor (4k-Boxen) verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Voraussetzungen und Abhängigkeiten ===&lt;br /&gt;
&lt;br /&gt;
* ein Full-HD-Skin&lt;br /&gt;
* gnuchess (wird mit installiert)&lt;br /&gt;
* python-chess (wird mit installiert)&lt;br /&gt;
&lt;br /&gt;
Alternativ kann im [https://vuplus-support.org/wbb4/index.php?thread/138434-chessboard-enigma2-frontend-f%C3%BCr-gnuchess/ Forum] auch die Chess-Engine Stockfish heruntergeladen und installiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Bedienung ===&lt;br /&gt;
&lt;br /&gt;
* mit den Pfeil- oder Zahlentasten das rote umrandete Feld zu einer eigenen Figur bewegen, diese mit OK markieren, mit den Pfeil- oder Zahlentasten das Zielfeld auswählen, wieder OK drücken. Jetzt ist der Computer an der Reihe.&lt;br /&gt;
* mit den Channel-Up- und -Down-Tasten kann die Bedenkzeit des Computers von einer bis zehn Sekunden eingestellt werden.&lt;br /&gt;
* mit der Menu-Taste können das Eröffnungsbuch und die Chess-Engine gewählt werden&lt;br /&gt;
* mit der blauen Taste wählt ihr, ob ihr schwarz oder weiß spielen wollt - ihr könnt auch während des Spiels wechseln.&lt;br /&gt;
* mit der gelben Taste kann das Brett gedreht werden&lt;br /&gt;
* mit der grünen Taste wird euch ein Vorschlag für euren nächsten Zug angezeigt.&lt;br /&gt;
* mit der roten Taste könnt ihr Züge wieder zurücknehmen.&lt;br /&gt;
&lt;br /&gt;
=== Vorschau ===&lt;br /&gt;
&lt;br /&gt;
[[Datei:Chessboard.jpg|800px|Plugin ChessBoard]]&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Datei:Chessboard.jpg&amp;diff=12187</id>
		<title>Datei:Chessboard.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Datei:Chessboard.jpg&amp;diff=12187"/>
		<updated>2023-12-28T21:39:18Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Plugin ChessBoard&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=VTi_Installation&amp;diff=12186</id>
		<title>VTi Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=VTi_Installation&amp;diff=12186"/>
		<updated>2023-12-27T18:54:56Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &amp;quot;auf dem USB-Stick entpacken&amp;quot; kann missverständlich sein. Durch &amp;quot;auf den USB-Stick entpacken&amp;quot; ersetzt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Index]] &lt;br /&gt;
&lt;br /&gt;
{|width=&amp;quot;30%&amp;quot;&lt;br /&gt;
 |[[Bild:deutsch.png]] - [[VTi Installation]]&lt;br /&gt;
 |[[Bild:english.png]] - [[VTi Install]]&lt;br /&gt;
 |}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Um eine Vu+ Box mit einem anderen bzw. neuen [[Image]] auszustatten, muss dieses anstelle des bisherigen Images in den [[Flashspeicher]] installiert werden, kurz &amp;quot;[[flashen]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Es gibt 4 Arten, Images zu flashen. Die USB Variante, über die Backup-Funktion, das Image Flash-Tool und über die serielle Schnittstelle des Receiver&#039;s. Das serielle Flashen gibt es mit den aktuellen Versionen des VTi jedoch nicht mehr. &lt;br /&gt;
&lt;br /&gt;
VTi-Images können [https://www.vuplus-support.org/wbb4/filebase/index.php?filebase/ hier in der Database] oder [https://www.vuplus-support.org/wbb4/vtisoftware/ hier unter VTi Images] heruntergeladen werden.&lt;br /&gt;
&lt;br /&gt;
Bitte vor der Neuinstallation eines Images überprüfen, ob ein neuer [[Bootloader]] verfügbar oder notwendig ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Soll ein VTi Image durch ein neues ersetzt werden, empfiehlt sich eine [[VTi Software-Werkzeuge#VTI_BackupSuite_-_Sicherung|Sicherung der Einstellungen]] und die [[VTi_Software-Werkzeuge#Image_Sicherung_.2F_Wiederherstellung|Sicherung des bisherigen Images]].&lt;br /&gt;
&lt;br /&gt;
Beim USB-Flashen kann es vorkommen, dass das Flashen nicht ordnungsgemäß startet oder beendet wird. In der Regel liegen diese Probleme in der Wahl des USB-Sticks, bei denen die Vu+-Boxen ziemlich wählerisch sind. Die größten Chancen hat man mit kleinen älteren USB-Sticks (&amp;lt;4GB). Wenn das Flashen mit einem bestimmten USB-Stick funktioniert hat, sollte es auch künftig mit diesem Stick klappen. Auch das Formatieren des Sticks mit dem &#039;&#039;HP Format Tool&#039;&#039; brachte schon Abhilfe.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#FFCBCB; width: 35em;&amp;quot;|&#039;&#039;&#039;Häufige Fehlerursachen:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
* falsches Image heruntergeladen z.B Vu+ Duo für eine Vu+ Duo²&lt;br /&gt;
* fehlerhafte Ordnerstruktur&lt;br /&gt;
* USB-Stick falsch formatiert&lt;br /&gt;
* USB-Stick nicht kompatibel oder defekt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Anleitung zum Image entpacken ==&lt;br /&gt;
&lt;br /&gt;
===Benötigt wird:===&lt;br /&gt;
&lt;br /&gt;
* USB-Stick mit FAT/FAT32 Formatierung&lt;br /&gt;
* Programm zum Entpacken des Archives: z.B. WinRAR, WinZIP, 7ZIP, usw&lt;br /&gt;
* Image-Datei passend zum Vu+ Receivermodell &amp;amp;rArr; [https://www.vuplus-support.org/wbb4/vtisoftware/ Hier erhältlich ab VTi 11]&lt;br /&gt;
&lt;br /&gt;
===Schritt für Schritt: Das Entpacken===&lt;br /&gt;
&lt;br /&gt;
1. Schritt: Image-Datei downloaden und auf dem PC abspeichern.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Schritt: Nach Doppelklick auf die Datei geht das Programm zum Entpacken auf. Hier im Beispiel WinRAR.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. Schritt: Dann auf &amp;quot;Entp.nach&amp;quot; klicken.&amp;lt;br /&amp;gt;&lt;br /&gt;
4. Schritt: Jetzt den USB-Stick als Zielort wählen (hier im Beispiel den &amp;quot;Wechseldatenträger Laufwerk H:&amp;quot;), dann auf OK&amp;lt;br /&amp;gt;&lt;br /&gt;
5. Schritt: Das Entpacken beginnt.&amp;lt;br /&amp;gt;&lt;br /&gt;
6. Schritt: Ordnerstruktur überprüfen!&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Das folgende Beispiel zeigt ein Solo²-Image. Die Ordnerstruktur muss aber zum jeweiligen Receiver passen. Wenn dies nicht so ist, wurde ein falsches Image heruntergeladen, das nicht zum Flashen verwendet werden darf!&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery perrow=&amp;quot;2&amp;quot; widths=&amp;quot;550&amp;quot;  heights=&amp;quot;400&amp;quot; class=&amp;quot;right&amp;quot;&amp;gt;&lt;br /&gt;
ZIP_1.png|1. und 2. Schritt: Datei Downloaden und auf dem PC abspeichern.&lt;br /&gt;
ZIP_2.png|2. und 3. Schritt: Entpacken&lt;br /&gt;
ZIP_3.png|4. Schritt: Zielort wählen.&lt;br /&gt;
ZIP_4.png|5. Schritt: Das Entpacken beginnt.&lt;br /&gt;
ZIP_5.png|6. Schritt: Ordnerstruktur überprüfen!&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flashen via USB-Stick==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| style=&amp;quot;background-color:#FFFF99; width:50em; text-align:center&amp;quot;|&amp;lt;span style=&amp;quot;color:red;background-color:&amp;quot;&amp;gt;&lt;br /&gt;
Für die ersten Geräte der Vu+ Produktlinie, [[Vu+ Duo]], [[Vu+ Solo]], [[Vu+ Uno]] und [[Vu+ Ultimo]] &amp;lt;br /&amp;gt;&lt;br /&gt;
wurde nach dem VTi 11.0.x der Image - Build-Support eingestellt.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dies bedeutet, dass es keine kompletten Image Builds von VTi für diese Boxen geben wird.&amp;lt;br /&amp;gt;&lt;br /&gt;
Sollten Treiberupdates kommen und ggf. wichtige e2 Updates, werden diese am Feed für VTi 11.0.x weitergepflegt.&lt;br /&gt;
Auch die Feeds für die bisherigen Images bleiben Online und werden nicht abgeschaltet.&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Duo]] / [[Vu+ Duo LE]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Duo herunterladen (Duo)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/duo auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 3 Dateien in dem Verzeichnis /vuplus/duo auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Update der Firmware startet automatisch&lt;br /&gt;
*auf Hinweis &amp;quot;Finished ...please reboot&amp;quot; im VF-Display warten&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Duo²]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Duo2 herunterladen (Duo²)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/duo2 auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/duo2 auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*Frontklappe öffnen.&lt;br /&gt;
*Ggf. alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Duo² hochfährt, wird am VF-Display abwechselnd die Meldung &#039;&#039;&#039;Update!&#039;&#039;&#039; und &#039;&#039;&#039;Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (befindet sich über dem Front-USB-Anschluss) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Auf Hinweis &amp;quot;Finished, Removing USB&amp;quot; warten&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Die Vu+ STB sollte selbstständig neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Duo 4K]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org herunterladen (Duo 4K)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/duo4k auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/duo4k auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*Frontklappe öffnen.&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Duo 4K hochfährt, wird am LC-Display Meldung &#039;&#039;&#039;Update! Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (Touchbutton an der Front) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Nach dem erfolgreichen Flashvorgang startet die Vu+ STB neu&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Duo 4K SE]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org herunterladen (Duo 4K SE)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/duo4kse auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/duo4kse auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*Frontklappe öffnen.&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Duo 4K SE hochfährt, wird am LC-Display Meldung &#039;&#039;&#039;Update! Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (Touchbutton an der Front) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Nach dem erfolgreichen Flashvorgang startet die Vu+ STB neu&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Solo]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Solo herunterladen (Solo)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/solo auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 3 Dateien in dem Verzeichnis /vuplus/solo auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Update der Firmware startet automatisch&lt;br /&gt;
*Die Standby LED wird rot und an dem USB Stick sollten die LEDs anfangen zu leuchten&lt;br /&gt;
*Wenn die Standby LED grün blinkt (der Flashvorgang dauert mehrere Minuten), kann man den USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Solo²]] / [[Vu+ Solo² WE]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Solo2 herunterladen (Solo² (WE))] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/solo2 auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/solo2 auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Im Display der Box auf die Meldung &#039;&#039;&#039;Update please press &amp;quot;Power&amp;quot;&#039;&#039;&#039; warten&lt;br /&gt;
*&amp;quot;Power&amp;quot; Taste an der Vorderseite der Solo² drücken (Sensor-Taste)&lt;br /&gt;
*auf Hinweis &amp;quot;Finished, Removing USB&amp;quot; im VF-Display warten&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Solo 4K]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Solo%204K herunterladen (Solo 4K)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/solo4k auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/solo4k auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*Frontklappe öffnen.&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Solo 4K hochfährt, wird am LC-Display Meldung &#039;&#039;&#039;Update! Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (hinter der Frontklappe) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Nach dem erfolgreichen Flashvorgang startet die Vu+ STB neu&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für  [[Vu+ Solo SE]] / [[Vu+ Solo SE WE]] oder [[Vu+ Solo SE V2]] / [[Vu+ Solo SE V2 WE]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Für die [[Vu+ Solo SE]] und [[Vu+ Solo SE V2]] gibt es nur ein Image!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Solo%20SE herunterladen (Solo SE (WE))] und abspeichern (USB Variante) &lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/solose auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/solose auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick anstecken&lt;br /&gt;
*Vu+ einschalten&lt;br /&gt;
*während des Flashvorgangs pulsiert die LED&lt;br /&gt;
*ist der Flashvorgang abgeschlossen blinkt die LED&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Ultimo]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Ultimo herunterladen (Ultimo)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/ultimo auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 4 Dateien in dem Verzeichnis /vuplus/ultimo auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Auf die Meldung &#039;&#039;&#039;Update please press &amp;quot;-&amp;quot;&#039;&#039;&#039; warten&lt;br /&gt;
*&amp;quot;-&amp;quot; Taste an der Vorderseite der Ultimo drücken&lt;br /&gt;
*auf Hinweis &amp;quot;Finished, Removing USB&amp;quot; im VF-Display warten&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Ultimo 4K]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Ultimo%204K herunterladen (Ultimo 4K)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/ultimo4k auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/ultimo4k auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*Frontklappe öffnen.&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Ultimo 4K hochfährt, wird am LC-Display Meldung &#039;&#039;&#039;Update! Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (Touchbutton an der Front, mehrmals mit dem Finger über den Strich fahren) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Nach dem erfolgreichen Flashvorgang startet die Vu+ STB neu&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Uno]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Uno herunterladen (Uno)] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/uno auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 4 Dateien in dem Verzeichnis /vuplus/uno auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick vorne anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Auf die Meldung &#039;&#039;&#039;Update please press &amp;quot;CH-&amp;quot;&#039;&#039;&#039; im VF-Display warten&lt;br /&gt;
*&amp;quot;CH-&amp;quot; Taste an der Vorderseite der Uno drücken&lt;br /&gt;
*auf Hinweis &amp;quot;Finished, Removing USB&amp;quot; im VF-Display warten&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Uno 4K]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Uno%204K herunterladen (Uno 4K)] und abspeichern (USB Variante) &lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/uno4k auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun x Dateien in dem Verzeichnis /vuplus/uno4k auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick anstecken&lt;br /&gt;
*Vu+ einschalten&lt;br /&gt;
*während des Flashvorgangs pulsiert die LED&lt;br /&gt;
*ist der Flashvorgang abgeschlossen blinkt die LED&lt;br /&gt;
*USB Stick von der Box abziehen&lt;br /&gt;
*Vu+ STB ausschalten und neu starten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Uno 4K SE]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Uno%204K%20SE herunterladen (Uno 4K SE)] und abspeichern (USB Variante) &lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/uno4kse auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/uno4kse auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*Alle USB Geräte von der Box entfernen&lt;br /&gt;
*USB Stick hinten einstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Sobald die Uno 4K SE hochfährt, wird am LC-Display Meldung &#039;&#039;&#039;Update! Press Power&#039;&#039;&#039; angezeigt&lt;br /&gt;
*Die &amp;quot;Power-Taste&amp;quot; (Touchbutton an der Front) innerhalb von 5 Sek. drücken. Dadurch wird der Flash-Vorgang gestartet.&lt;br /&gt;
*Nach dem erfolgreichen Flashvorgang startet die Vu+ STB neu&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen.&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Zero]] / [[Vu+ Zero WE]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Zero herunterladen (Zero (WE))] und abspeichern (USB Variante)&lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/zero auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/zero auf dem Stick!&amp;lt;/span&amp;gt; &lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Die weiße LED pulsiert während des Flashvorgangs&lt;br /&gt;
*Warten bis die weiße LED in der Frontblende blinkt&lt;br /&gt;
*Vu+ STB ausschalten&lt;br /&gt;
*USB Stick entfernen&lt;br /&gt;
*STB einschalten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Image aufspielen mit USB-Stick für [[Vu+ Zero 4K]]===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Bitte ausklappen!&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color:red;background-color:yellow&amp;quot;&amp;gt;&#039;&#039;&#039;Wichtig: Bitte das Archiv auf den USB-Stick entpacken, dann werden auch die Verzeichnisse korrekt erstellt.&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Image am PC [https://www.vuplus-support.org/wbb4/vtisoftware/?dir=sorted%20by%20set-top-box/Vu%2B%20Zero%204K herunterladen (Zero 4K)] und abspeichern (USB Variante) &lt;br /&gt;
*USB Stick mit dem Dateisystem FAT, bzw. FAT32 formatieren&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Datei auf den USB-Stick entpacken (z.B. mit WinRAR, WinZIP, 7ZIP, usw)&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es sind dann die Verzeichnisse /vuplus/zero4k auf dem Stick erstellt worden&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;es befinden sich nun 5 Dateien in dem Verzeichnis /vuplus/zero4k auf dem Stick!&amp;lt;/span&amp;gt;&lt;br /&gt;
*Vu+ STB ausschalten (in den Deepstandby oder Netzschalter)&lt;br /&gt;
*alle USB Geräte von der Box entfernen&lt;br /&gt;
*alle CI-Module und Pay-TV Karten aus der Box entfernen&lt;br /&gt;
*USB Stick anstecken&lt;br /&gt;
*Vu+ STB einschalten&lt;br /&gt;
*Das weiße VU+ Logo pulsiert während des Flashvorgangs&lt;br /&gt;
*Warten bis das weiße VU+ Logo in der Frontblende blinkt&lt;br /&gt;
*Vu+ STB ausschalten&lt;br /&gt;
*USB Stick entfernen&lt;br /&gt;
*STB einschalten&lt;br /&gt;
*Der VTi-Startwizard sollte starten, falls nicht ist etwas schief gelaufen&lt;br /&gt;
*Wenn der VTi-Startwizard beendet und das Netzwerk eingerichtet ist, sollte unbedingt zuerst ein Online-Update über VTi-Panel - Neuigkeiten oder die Tasten Blau - Grün - Grün auf der Fernbedienung durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Hilfestellung, Fehlerursachen und weitere Probleme beim Flashen ==&lt;br /&gt;
&lt;br /&gt;
Text folgt...&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#FFCBCB; width: 35em;&amp;quot;|&#039;&#039;&#039;Häufige Fehlerursachen:&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
* falsches Image heruntergeladen z.B Vu+ Duo für eine Vu+ Duo²&lt;br /&gt;
* fehlerhafte Ordnerstruktur&lt;br /&gt;
* USB-Stick falsch formatiert&lt;br /&gt;
* USB-Stick nicht kompatibel oder defekt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Flashen via Backupfunktion ==&lt;br /&gt;
&lt;br /&gt;
Man kann auch ohne USB-Stick ein neues Image flashen. Vorraussetzung ist, dass ein VTi-Image mit Imagesicherung/Wiederherstellung auf der Box vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
Ein Flashen über die Backupfunktion ist bei der [[Vu+ Solo 4K]], der [[Vu+ Uno 4K]], der [[Vu+ Duo 4K]], [[Vu+ Uno 4K SE]], [[Vu+ Ultimo 4K]] und der [[Vu+ Zero 4K]] &#039;&#039;&#039;nicht&#039;&#039;&#039; möglich.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorgehensweise:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Einen neuen Ordner mit der Bezeichnung &amp;amp;nbsp;&amp;lt;code&amp;gt;vti_0.0.0_neu_flashen&amp;lt;/code&amp;gt;&amp;amp;nbsp; im Verzeichnis &amp;amp;nbsp;&amp;lt;code&amp;gt;media/hdd/vti-image-backup&amp;lt;/code&amp;gt;&amp;amp;nbsp; anlegen.&lt;br /&gt;
# In das Verzeichnis wird der Inhalt des heruntergeladenen Images kopiert. Das sieht dann so aus: &amp;amp;nbsp;&amp;lt;code&amp;gt;media/hdd/vti-image-backup/vti_0.0.0_neu_flashen/vuplus/&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Ordner &amp;amp;nbsp;&amp;lt;code&amp;gt;vuplus&amp;lt;/code&amp;gt;&amp;amp;nbsp; befindet sich nun ein weiterer Ordner mit der genauen Bezeichnung der Vu+ z.B. &amp;lt;code&amp;gt;/solo2&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;/duo2&amp;lt;/code&amp;gt;. In diesem Ordner sollten sich dann die ca. drei bis fünf Imagedateien befinden.&lt;br /&gt;
# In der Vu+ das Menü [[VTi_Sicherungswerkzeuge#Image_Sicherung_.2F_Wiederherstellung|Image Sicherung und Wiederherstellung]] aufrufen. Dann unter [[VTi_Sicherungswerkzeuge#Wiederherstellung_eines_Images|Wiederherstellung eines Images]] den zuvor angelegten Ordner auswählen und den Flashvorgang starten.&lt;br /&gt;
&lt;br /&gt;
Nach kurzer Wartezeit ist der Flashvorgang beendet und die Vu+ startet neu.&lt;br /&gt;
&lt;br /&gt;
Link zum Forum: [http://www.vuplus-support.org/wbb3/index.php?page=Thread&amp;amp;threadID=49823 Flashen ohne Stick]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Flashen via Image Flash Tool ==&lt;br /&gt;
&lt;br /&gt;
Man kann auch Online ein neues Image flashen. Vorraussetzung ist, dass ein VTi-Image ab VTi 6.0.8 ab dem 12.07.2014 auf der Box ist.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vorgehensweise:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Aufrufen des [[Das VTi Panel|VTi Panels]] mit der &amp;quot;blauen Taste&amp;quot;&lt;br /&gt;
# In die Rubrik [[VTi Software-Werkzeuge]] wechseln&lt;br /&gt;
# Image Flash Werkzeug aufrufen&lt;br /&gt;
# Image auswählen&lt;br /&gt;
# Speicherort auswählen, nach klicken von &amp;quot;OK&amp;quot; wird der Download gestartet und entpackt&lt;br /&gt;
# Nach Bestätigung der Flashaktion im Infofenster beginnt der Flashvorgang (Achtung: Das aktuelle Image wird gelöscht und überschrieben)&lt;br /&gt;
&lt;br /&gt;
Nach kurzer Wartezeit ist der Flashvorgang beendet und die Vu+ startet mit dem [[Vu+ Schritt für Schritt#VTi Wizard|Einrichtungsassistenten]] neu.&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12184</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12184"/>
		<updated>2023-02-26T16:06:14Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &amp;lt;code&amp;gt;opkg install &amp;lt;Paket.ipk&amp;gt;&amp;lt;/code&amp;gt; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &amp;lt;code&amp;gt;/usr/bin&amp;lt;/code&amp;gt; diverse Programme mit dem Präfix &amp;lt;code&amp;gt;mipsel-oe-linux-&amp;lt;/code&amp;gt; und unterhalb von &amp;lt;code&amp;gt;/usr/mipsel-oe-linux&amp;lt;/code&amp;gt; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &amp;lt;code&amp;gt;tar xvf grep-3.8.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cd grep-3.8&amp;lt;/code&amp;gt; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; mit der &amp;lt;code&amp;gt;CC&amp;lt;/code&amp;gt;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &amp;lt;code&amp;gt;--host=mipsel-oe-linux&amp;lt;/code&amp;gt; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./configure --host=mipsel-oe-linux --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Switch &amp;lt;code&amp;gt;--prefix=/usr&amp;lt;/code&amp;gt; sagt der Umgebung, dass das fertig übersetzte Programm später nach &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; installiert werden soll; das bedeutet, dass das Binary unter &amp;lt;code&amp;gt;/usr/bin/grep&amp;lt;/code&amp;gt; installiert wird. Ohne diesen Switch wird normalerweise &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; als Ziel benutzt, und das Binary findet sich später unter &amp;lt;code&amp;gt;/usr/local/bin/grep&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; aufgerufen (ein &amp;quot;make&amp;quot; befindet sich im Paket aus dem Download &amp;quot;git-make.zip&amp;quot; in der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1098-gcc-10-2-0-f%C3%BCr-boxen-mit-arm-prozessor-4k/ Database]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &amp;lt;code&amp;gt;DESTDIR&amp;lt;/code&amp;gt; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make install-strip DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst:&lt;br /&gt;
* &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; installiert das fertig übersetzte Programm an seinen Bestimmungs-Ort.&lt;br /&gt;
* &amp;lt;code&amp;gt;make install-strip&amp;lt;/code&amp;gt; strippt Binaries vor der Installation und installiert sie dann an ihren Bestimmungs-Ort.&lt;br /&gt;
* &amp;lt;code&amp;gt;make install DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt; installiert die Binaries in ein anderes Zielverzeichnis &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt; anstatt in das dafür vorgesehene Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
Weitere nützliche Aufrufe von &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;make V=1&amp;lt;/code&amp;gt; zeigt genauer an, was beim übersetzen wirklich ausgeführt wird; manchmal unterdrücken Makefiles wie das von grep die Ausgabe, wie genau der Compiler aufgerufen wird.&lt;br /&gt;
* &amp;lt;code&amp;gt;make CC=mipsel-oe-linux-gcc&amp;lt;/code&amp;gt; &amp;quot;überschreibt&amp;quot; den Eintrag für den Compiler im Makefile; das funktioniert bei allen Variablen im Makefile, die entsprechend deklariert wurden.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &amp;lt;code&amp;gt;/media/hdd/install/usr/bin&amp;lt;/code&amp;gt;. Ein &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt; zeigt hier drei Dateien an, &amp;lt;code&amp;gt;egrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fgrep&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;file grep&amp;lt;/code&amp;gt;: Ausgabe sollte sein: &amp;lt;code&amp;gt;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mipsel-oe-linux-objdump -p grep&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Ausgabe von &amp;lt;code&amp;gt;objdump grep&amp;lt;/code&amp;gt;: bitte aufklappen.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
grep:     file format elf32-tradlittlemips&lt;br /&gt;
&lt;br /&gt;
Program Header:&lt;br /&gt;
    PHDR off    0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2&lt;br /&gt;
         filesz 0x00000140 memsz 0x00000140 flags r--&lt;br /&gt;
  INTERP off    0x00000174 vaddr 0x00400174 paddr 0x00400174 align 2**0&lt;br /&gt;
         filesz 0x0000000d memsz 0x0000000d flags r--&lt;br /&gt;
0x70000003 off    0x000001a8 vaddr 0x004001a8 paddr 0x004001a8 align 2**3&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
0x70000000 off    0x000001c0 vaddr 0x004001c0 paddr 0x004001c0 align 2**2&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**16&lt;br /&gt;
         filesz 0x00040280 memsz 0x00040280 flags r-x&lt;br /&gt;
    LOAD off    0x00040280 vaddr 0x00450280 paddr 0x00450280 align 2**16&lt;br /&gt;
         filesz 0x00000ab8 memsz 0x00011580 flags rw-&lt;br /&gt;
 DYNAMIC off    0x000001d8 vaddr 0x004001d8 paddr 0x004001d8 align 2**2&lt;br /&gt;
         filesz 0x00000118 memsz 0x00000118 flags r--&lt;br /&gt;
    NOTE off    0x00000184 vaddr 0x00400184 paddr 0x00400184 align 2**2&lt;br /&gt;
         filesz 0x00000020 memsz 0x00000020 flags r--&lt;br /&gt;
EH_FRAME off    0x00040240 vaddr 0x00440240 paddr 0x00440240 align 2**2&lt;br /&gt;
         filesz 0x00000014 memsz 0x00000014 flags r--&lt;br /&gt;
    NULL off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2&lt;br /&gt;
         filesz 0x00000000 memsz 0x00000000 flags ---&lt;br /&gt;
&lt;br /&gt;
Dynamic Section:&lt;br /&gt;
  NEEDED               libc.so.6&lt;br /&gt;
  INIT                 0x00402cf4&lt;br /&gt;
  FINI                 0x0043ca60&lt;br /&gt;
  INIT_ARRAY           0x00450280&lt;br /&gt;
  INIT_ARRAYSZ         0x00000004&lt;br /&gt;
  FINI_ARRAY           0x00450284&lt;br /&gt;
  FINI_ARRAYSZ         0x00000004&lt;br /&gt;
  HASH                 0x004002f0&lt;br /&gt;
  STRTAB               0x00401d6c&lt;br /&gt;
  SYMTAB               0x00400b8c&lt;br /&gt;
  STRSZ                0x00000c84&lt;br /&gt;
  SYMENT               0x00000010&lt;br /&gt;
  MIPS_RLD_MAP         0x004508b0&lt;br /&gt;
  MIPS_RLD_MAP_REL     0x00050670&lt;br /&gt;
  DEBUG                0x00000000&lt;br /&gt;
  PLTGOT               0x004508c0&lt;br /&gt;
  REL                  0x00402c8c&lt;br /&gt;
  RELSZ                0x00000068&lt;br /&gt;
  RELENT               0x00000008&lt;br /&gt;
  MIPS_RLD_VERSION     0x00000001&lt;br /&gt;
  MIPS_FLAGS           0x00000002&lt;br /&gt;
  MIPS_BASE_ADDRESS    0x00400000&lt;br /&gt;
  MIPS_LOCAL_GOTNO     0x00000097&lt;br /&gt;
  MIPS_SYMTABNO        0x0000011e&lt;br /&gt;
  MIPS_UNREFEXTNO      0x00000029&lt;br /&gt;
  MIPS_GOTSYM          0x00000098&lt;br /&gt;
  VERNEED              0x00402c2c&lt;br /&gt;
  VERNEEDNUM           0x00000001&lt;br /&gt;
  VERSYM               0x004029f0&lt;br /&gt;
&lt;br /&gt;
Version References:&lt;br /&gt;
  required from libc.so.6:&lt;br /&gt;
    0x0d696914 0x00 06 GLIBC_2.4&lt;br /&gt;
    0x0d696915 0x00 05 GLIBC_2.5&lt;br /&gt;
    0x0d696912 0x00 04 GLIBC_2.2&lt;br /&gt;
    0x0d696910 0x00 03 GLIBC_2.0&lt;br /&gt;
    0x0d696913 0x00 02 GLIBC_2.3&lt;br /&gt;
private flags = 1007: [abi=O32] [mips1] [not 32bitmode] [noreorder] [PIC] [CPIC]&lt;br /&gt;
&lt;br /&gt;
MIPS ABI Flags Version: 0&lt;br /&gt;
&lt;br /&gt;
ISA: MIPS1&lt;br /&gt;
GPR size: 32&lt;br /&gt;
CPR1 size: 32&lt;br /&gt;
CPR2 size: 0&lt;br /&gt;
FP ABI: Hard float (double precision)&lt;br /&gt;
ISA Extension: None&lt;br /&gt;
ASEs:&lt;br /&gt;
	None&lt;br /&gt;
FLAGS 1: 00000000&lt;br /&gt;
FLAGS 2: 00000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;br /&gt;
&lt;br /&gt;
== Nützliches zu objdump, ldd und Versionierung von Shared-Libraries ==&lt;br /&gt;
=== objdump ===&lt;br /&gt;
Das folgende ist eher allgemein gehalten und gilt für alle Architekturen. Damit man im Vorfeld schon weiß, ob die auf der Zielmaschine installierten Shared-Libraries neu genug sind, damit ein Programm läuft, gibt es ein paar Hilfsmittel. Eines haben wir vorhin schon kennen gelernt: &amp;lt;code&amp;gt;objdump&amp;lt;/code&amp;gt;. Der interessante Teil befindet sich im Abschnitt &amp;quot;Version References:&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Version References:&lt;br /&gt;
  required from libc.so.6:&lt;br /&gt;
    0x0d696914 0x00 06 GLIBC_2.4&lt;br /&gt;
    0x0d696915 0x00 05 GLIBC_2.5&lt;br /&gt;
    0x0d696912 0x00 04 GLIBC_2.2&lt;br /&gt;
    0x0d696910 0x00 03 GLIBC_2.0&lt;br /&gt;
    0x0d696913 0x00 02 GLIBC_2.3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier erfahren wir, dass das Binary gegen eine Sharded-Library &amp;lt;code&amp;gt;libc.so.6&amp;lt;/code&amp;gt; gelinkt wurde. Um nicht bei jedem Update der Libc die Versionsnummer &amp;quot;6&amp;quot; erhöhen zu müssen, werden neue Features oder geänderte Aufrufe in der Library selber versioniert. Hier sieht man, dass Features der GLIBC_2.0 bis GLIBC_2.5 benötigt werden. Ein wenig Recherche bringt zutage, dass diese Versionsnummern auch wirklich mit den Versionen der glibc übereinstimmen. Die auf unseren Boxen vorinstallierte glibc liegt in der Version 2.21 vor und benutzt deshalb für die neuen ab dieser Version integrierten Features die interne Version GLIBC_2.21. Aktuell ist übrigens die glibc-2.37. Da die glibc zweimal jährlich aktualisiert wird, liegen hier 8 Jahre (fehlende) Entwicklung dazwischen.&lt;br /&gt;
&lt;br /&gt;
=== ldd ===&lt;br /&gt;
Ein anderes sehr nützliches Tool ist &amp;lt;code&amp;gt;ldd&amp;lt;/code&amp;gt;. Ohne weitere Parameter werden hier einfach die benötigten Shared-Libraries angezeigt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@vusolo4k:~# ldd /usr/bin/grep &lt;br /&gt;
	libpcre.so.1 =&amp;gt; /usr/lib/libpcre.so.1 (0xb6f20000)&lt;br /&gt;
	libc.so.6 =&amp;gt; /lib/libc.so.6 (0xb6db8000)&lt;br /&gt;
	/lib/ld-linux-armhf.so.3 (0xb6f64000)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sehr nützlich ist der Aufruf mit Parameter &amp;quot;-v&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@vusolo4k:~# ldd -v /usr/bin/grep &lt;br /&gt;
	libpcre.so.1 =&amp;gt; /usr/lib/libpcre.so.1 (0xb6ec0000)&lt;br /&gt;
	libc.so.6 =&amp;gt; /lib/libc.so.6 (0xb6d58000)&lt;br /&gt;
	/lib/ld-linux-armhf.so.3 (0xb6eff000)&lt;br /&gt;
&lt;br /&gt;
	Version information:&lt;br /&gt;
	/usr/bin/grep:&lt;br /&gt;
		libc.so.6 (GLIBC_2.26) =&amp;gt; /lib/libc.so.6&lt;br /&gt;
		libc.so.6 (GLIBC_2.5) =&amp;gt; /lib/libc.so.6&lt;br /&gt;
		libc.so.6 (GLIBC_2.34) =&amp;gt; /lib/libc.so.6&lt;br /&gt;
		libc.so.6 (GLIBC_2.4) =&amp;gt; /lib/libc.so.6&lt;br /&gt;
	/usr/lib/libpcre.so.1:&lt;br /&gt;
		libc.so.6 (GLIBC_2.4) =&amp;gt; /lib/libc.so.6&lt;br /&gt;
	/lib/libc.so.6:&lt;br /&gt;
		ld-linux-armhf.so.3 (GLIBC_2.4) =&amp;gt; /lib/ld-linux-armhf.so.3&lt;br /&gt;
		ld-linux-armhf.so.3 (GLIBC_PRIVATE) =&amp;gt; /lib/ld-linux-armhf.so.3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie bei &amp;lt;code&amp;gt;objdump&amp;lt;/code&amp;gt; werden auch hier die benötigten Versionen der Shared-Libraries angezeigt.&lt;br /&gt;
&lt;br /&gt;
Weitere Bekannte Libraries, die versioniert sind, sind unter anderem folgende:&lt;br /&gt;
* libstdc++ - GLIBCXX_3.4.21 gehört z.B. zur libstdc++-6.0.21 (GCC-5.1), CXXABI_1.3.12 genauso wie GLIBCXX_3.4.26 zur libstdc++-6.26 (GCC-9.1). Die Versionen können der Dokumentation von gcc entnommen werden: https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html&lt;br /&gt;
* libssl und libcrypto von OpenSSL: die benötigten Versionen steht direkt in der Symboltabelle, z.B. als OPENSSL_1.0.2g&lt;br /&gt;
* zlib: die benötigten Versionen stehen ebenfalls direkt in der Symboltabelle der libz.so, z.B. ZLIB_1.2.12&lt;br /&gt;
&lt;br /&gt;
=== c++filt ===&lt;br /&gt;
Ein letztes nützliches Tool in Zusammenhang mit Dumps und wenn man mehr über die Symbol-Tabelle eines Binaries erfahren möchte, ist &amp;lt;code&amp;gt;c++filt&amp;lt;/code&amp;gt;. Mit diesem Tool können &amp;quot;gemanglte&amp;quot; Symbole wieder lesbar gemacht werden. Schauen wir z.B. in die Symbol-Tabelle von enigma2 mit &amp;lt;code&amp;gt;objdump -R /usr/bin/enigma2&amp;lt;/code&amp;gt;, sehen wir viele c++-Symbolnamen, wie z.B. &amp;lt;code&amp;gt;_ZNSt3tr18__detail12__prime_listE@GLIBCXX_3.4.10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;c++filt&amp;lt;/code&amp;gt; kann uns das wieder lesbarer machen: &amp;lt;code&amp;gt;c++filt _ZNSt3tr18__detail12__prime_listE&amp;lt;/code&amp;gt; spuckt dafür aus: &amp;lt;code&amp;gt;std::tr1::__detail::__prime_list&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Oder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;root@vusolo4k:~# c++filt _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode&lt;br /&gt;
std::basic_ifstream&amp;lt;char, std::char_traits&amp;lt;char&amp;gt; &amp;gt;::basic_ifstream(char const*, std::_Ios_Openmode)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;root@vusolo4k:~# c++filt _ZN19CaProgramMapSectionC1EPK17ProgramMapSectionhhRKSt6vectorItSaItEE&lt;br /&gt;
CaProgramMapSection::CaProgramMapSection(ProgramMapSection const*, unsigned char, unsigned char, std::vector&amp;lt;unsigned short, std::allocator&amp;lt;unsigned short&amp;gt; &amp;gt; const&amp;amp;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12183</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12183"/>
		<updated>2023-02-26T15:29:15Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Schritt 4: Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &amp;lt;code&amp;gt;opkg install &amp;lt;Paket.ipk&amp;gt;&amp;lt;/code&amp;gt; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &amp;lt;code&amp;gt;/usr/bin&amp;lt;/code&amp;gt; diverse Programme mit dem Präfix &amp;lt;code&amp;gt;mipsel-oe-linux-&amp;lt;/code&amp;gt; und unterhalb von &amp;lt;code&amp;gt;/usr/mipsel-oe-linux&amp;lt;/code&amp;gt; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &amp;lt;code&amp;gt;tar xvf grep-3.8.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cd grep-3.8&amp;lt;/code&amp;gt; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; mit der &amp;lt;code&amp;gt;CC&amp;lt;/code&amp;gt;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &amp;lt;code&amp;gt;--host=mipsel-oe-linux&amp;lt;/code&amp;gt; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./configure --host=mipsel-oe-linux --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Switch &amp;lt;code&amp;gt;--prefix=/usr&amp;lt;/code&amp;gt; sagt der Umgebung, dass das fertig übersetzte Programm später nach &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; installiert werden soll; das bedeutet, dass das Binary unter &amp;lt;code&amp;gt;/usr/bin/grep&amp;lt;/code&amp;gt; installiert wird. Ohne diesen Switch wird normalerweise &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; als Ziel benutzt, und das Binary findet sich später unter &amp;lt;code&amp;gt;/usr/local/bin/grep&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; aufgerufen (ein &amp;quot;make&amp;quot; befindet sich im Paket aus dem Download &amp;quot;git-make.zip&amp;quot; in der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1098-gcc-10-2-0-f%C3%BCr-boxen-mit-arm-prozessor-4k/ Database]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &amp;lt;code&amp;gt;DESTDIR&amp;lt;/code&amp;gt; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make install-strip DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst:&lt;br /&gt;
* &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; installiert das fertig übersetzte Programm an seinen Bestimmungs-Ort.&lt;br /&gt;
* &amp;lt;code&amp;gt;make install-strip&amp;lt;/code&amp;gt; strippt Binaries vor der Installation und installiert sie dann an ihren Bestimmungs-Ort.&lt;br /&gt;
* &amp;lt;code&amp;gt;make install DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt; installiert die Binaries in ein anderes Zielverzeichnis &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt; anstatt in das dafür vorgesehene Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
Weitere nützliche Aufrufe von &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;make V=1&amp;lt;/code&amp;gt; zeigt genauer an, was beim übersetzen wirklich ausgeführt wird; manchmal unterdrücken Makefiles wie das von grep die Ausgabe, wie genau der Compiler aufgerufen wird.&lt;br /&gt;
* &amp;lt;code&amp;gt;make CC=mipsel-oe-linux-gcc&amp;lt;/code&amp;gt; &amp;quot;überschreibt&amp;quot; den Eintrag für den Compiler im Makefile; das funktioniert bei allen Variablen im Makefile, die entsprechend deklariert wurden.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &amp;lt;code&amp;gt;/media/hdd/install/usr/bin&amp;lt;/code&amp;gt;. Ein &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt; zeigt hier drei Dateien an, &amp;lt;code&amp;gt;egrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fgrep&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;file grep&amp;lt;/code&amp;gt;: Ausgabe sollte sein: &amp;lt;code&amp;gt;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mipsel-oe-linux-objdump -p grep&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Ausgabe von &amp;lt;code&amp;gt;objdump grep&amp;lt;/code&amp;gt;: bitte aufklappen.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
grep:     file format elf32-tradlittlemips&lt;br /&gt;
&lt;br /&gt;
Program Header:&lt;br /&gt;
    PHDR off    0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2&lt;br /&gt;
         filesz 0x00000140 memsz 0x00000140 flags r--&lt;br /&gt;
  INTERP off    0x00000174 vaddr 0x00400174 paddr 0x00400174 align 2**0&lt;br /&gt;
         filesz 0x0000000d memsz 0x0000000d flags r--&lt;br /&gt;
0x70000003 off    0x000001a8 vaddr 0x004001a8 paddr 0x004001a8 align 2**3&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
0x70000000 off    0x000001c0 vaddr 0x004001c0 paddr 0x004001c0 align 2**2&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**16&lt;br /&gt;
         filesz 0x00040280 memsz 0x00040280 flags r-x&lt;br /&gt;
    LOAD off    0x00040280 vaddr 0x00450280 paddr 0x00450280 align 2**16&lt;br /&gt;
         filesz 0x00000ab8 memsz 0x00011580 flags rw-&lt;br /&gt;
 DYNAMIC off    0x000001d8 vaddr 0x004001d8 paddr 0x004001d8 align 2**2&lt;br /&gt;
         filesz 0x00000118 memsz 0x00000118 flags r--&lt;br /&gt;
    NOTE off    0x00000184 vaddr 0x00400184 paddr 0x00400184 align 2**2&lt;br /&gt;
         filesz 0x00000020 memsz 0x00000020 flags r--&lt;br /&gt;
EH_FRAME off    0x00040240 vaddr 0x00440240 paddr 0x00440240 align 2**2&lt;br /&gt;
         filesz 0x00000014 memsz 0x00000014 flags r--&lt;br /&gt;
    NULL off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2&lt;br /&gt;
         filesz 0x00000000 memsz 0x00000000 flags ---&lt;br /&gt;
&lt;br /&gt;
Dynamic Section:&lt;br /&gt;
  NEEDED               libc.so.6&lt;br /&gt;
  INIT                 0x00402cf4&lt;br /&gt;
  FINI                 0x0043ca60&lt;br /&gt;
  INIT_ARRAY           0x00450280&lt;br /&gt;
  INIT_ARRAYSZ         0x00000004&lt;br /&gt;
  FINI_ARRAY           0x00450284&lt;br /&gt;
  FINI_ARRAYSZ         0x00000004&lt;br /&gt;
  HASH                 0x004002f0&lt;br /&gt;
  STRTAB               0x00401d6c&lt;br /&gt;
  SYMTAB               0x00400b8c&lt;br /&gt;
  STRSZ                0x00000c84&lt;br /&gt;
  SYMENT               0x00000010&lt;br /&gt;
  MIPS_RLD_MAP         0x004508b0&lt;br /&gt;
  MIPS_RLD_MAP_REL     0x00050670&lt;br /&gt;
  DEBUG                0x00000000&lt;br /&gt;
  PLTGOT               0x004508c0&lt;br /&gt;
  REL                  0x00402c8c&lt;br /&gt;
  RELSZ                0x00000068&lt;br /&gt;
  RELENT               0x00000008&lt;br /&gt;
  MIPS_RLD_VERSION     0x00000001&lt;br /&gt;
  MIPS_FLAGS           0x00000002&lt;br /&gt;
  MIPS_BASE_ADDRESS    0x00400000&lt;br /&gt;
  MIPS_LOCAL_GOTNO     0x00000097&lt;br /&gt;
  MIPS_SYMTABNO        0x0000011e&lt;br /&gt;
  MIPS_UNREFEXTNO      0x00000029&lt;br /&gt;
  MIPS_GOTSYM          0x00000098&lt;br /&gt;
  VERNEED              0x00402c2c&lt;br /&gt;
  VERNEEDNUM           0x00000001&lt;br /&gt;
  VERSYM               0x004029f0&lt;br /&gt;
&lt;br /&gt;
Version References:&lt;br /&gt;
  required from libc.so.6:&lt;br /&gt;
    0x0d696914 0x00 06 GLIBC_2.4&lt;br /&gt;
    0x0d696915 0x00 05 GLIBC_2.5&lt;br /&gt;
    0x0d696912 0x00 04 GLIBC_2.2&lt;br /&gt;
    0x0d696910 0x00 03 GLIBC_2.0&lt;br /&gt;
    0x0d696913 0x00 02 GLIBC_2.3&lt;br /&gt;
private flags = 1007: [abi=O32] [mips1] [not 32bitmode] [noreorder] [PIC] [CPIC]&lt;br /&gt;
&lt;br /&gt;
MIPS ABI Flags Version: 0&lt;br /&gt;
&lt;br /&gt;
ISA: MIPS1&lt;br /&gt;
GPR size: 32&lt;br /&gt;
CPR1 size: 32&lt;br /&gt;
CPR2 size: 0&lt;br /&gt;
FP ABI: Hard float (double precision)&lt;br /&gt;
ISA Extension: None&lt;br /&gt;
ASEs:&lt;br /&gt;
	None&lt;br /&gt;
FLAGS 1: 00000000&lt;br /&gt;
FLAGS 2: 00000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12182</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12182"/>
		<updated>2023-02-26T15:28:45Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Schritt 4: Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &amp;lt;code&amp;gt;opkg install &amp;lt;Paket.ipk&amp;gt;&amp;lt;/code&amp;gt; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &amp;lt;code&amp;gt;/usr/bin&amp;lt;/code&amp;gt; diverse Programme mit dem Präfix &amp;lt;code&amp;gt;mipsel-oe-linux-&amp;lt;/code&amp;gt; und unterhalb von &amp;lt;code&amp;gt;/usr/mipsel-oe-linux&amp;lt;/code&amp;gt; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &amp;lt;code&amp;gt;tar xvf grep-3.8.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cd grep-3.8&amp;lt;/code&amp;gt; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; mit der &amp;lt;code&amp;gt;CC&amp;lt;/code&amp;gt;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &amp;lt;code&amp;gt;--host=mipsel-oe-linux&amp;lt;/code&amp;gt; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./configure --host=mipsel-oe-linux --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Switch &amp;lt;code&amp;gt;--prefix=/usr&amp;lt;/code&amp;gt; sagt der Umgebung, dass das fertig übersetzte Programm später nach &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; installiert werden soll; das bedeutet, dass das Binary unter &amp;lt;code&amp;gt;/usr/bin/grep&amp;lt;/code&amp;gt; installiert wird. Ohne diesen Switch wird normalerweise &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; als Ziel benutzt, und das Binary findet sich später unter &amp;lt;code&amp;gt;/usr/local/bin/grep&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; aufgerufen (ein &amp;quot;make&amp;quot; befindet sich im Paket aus dem Download &amp;quot;git-make.zip&amp;quot; in der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1098-gcc-10-2-0-f%C3%BCr-boxen-mit-arm-prozessor-4k/ Database]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &amp;lt;code&amp;gt;DESTDIR&amp;lt;/code&amp;gt; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make install-strip DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst:&lt;br /&gt;
* &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; installiert das fertig übersetzte Programm an seinen Bestimmungs-Ort.&lt;br /&gt;
* &amp;lt;code&amp;gt;make install-strip&amp;lt;/code&amp;gt; strippt Binaries vor der Installation und installiert sie dann an ihren Bestimmungs-Ort.&lt;br /&gt;
* &amp;lt;code&amp;gt;make install DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt; installiert die Binaries in ein anderes Zielverzeichnis &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt; anstatt in das dafür vorgesehene Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
Weitere nützliche Ausfrufe von &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;make V=1&amp;lt;/code&amp;gt; zeigt genauer an, was beim übersetzen wirklich ausgeführt wird; manchmal unterdrücken Makefiles wie das von grep die Ausgabe, wie genau der Compiler aufgerufen wird.&lt;br /&gt;
* &amp;lt;code&amp;gt;make CC=mipsel-oe-linux-gcc&amp;lt;/code&amp;gt; &amp;quot;überschreibt&amp;quot; den Eintrag für den Compiler im Makefile; das funktioniert bei allen Variablen im Makefile, die entsprechend deklariert wurden.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &amp;lt;code&amp;gt;/media/hdd/install/usr/bin&amp;lt;/code&amp;gt;. Ein &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt; zeigt hier drei Dateien an, &amp;lt;code&amp;gt;egrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fgrep&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;file grep&amp;lt;/code&amp;gt;: Ausgabe sollte sein: &amp;lt;code&amp;gt;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mipsel-oe-linux-objdump -p grep&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Ausgabe von &amp;lt;code&amp;gt;objdump grep&amp;lt;/code&amp;gt;: bitte aufklappen.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
grep:     file format elf32-tradlittlemips&lt;br /&gt;
&lt;br /&gt;
Program Header:&lt;br /&gt;
    PHDR off    0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2&lt;br /&gt;
         filesz 0x00000140 memsz 0x00000140 flags r--&lt;br /&gt;
  INTERP off    0x00000174 vaddr 0x00400174 paddr 0x00400174 align 2**0&lt;br /&gt;
         filesz 0x0000000d memsz 0x0000000d flags r--&lt;br /&gt;
0x70000003 off    0x000001a8 vaddr 0x004001a8 paddr 0x004001a8 align 2**3&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
0x70000000 off    0x000001c0 vaddr 0x004001c0 paddr 0x004001c0 align 2**2&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**16&lt;br /&gt;
         filesz 0x00040280 memsz 0x00040280 flags r-x&lt;br /&gt;
    LOAD off    0x00040280 vaddr 0x00450280 paddr 0x00450280 align 2**16&lt;br /&gt;
         filesz 0x00000ab8 memsz 0x00011580 flags rw-&lt;br /&gt;
 DYNAMIC off    0x000001d8 vaddr 0x004001d8 paddr 0x004001d8 align 2**2&lt;br /&gt;
         filesz 0x00000118 memsz 0x00000118 flags r--&lt;br /&gt;
    NOTE off    0x00000184 vaddr 0x00400184 paddr 0x00400184 align 2**2&lt;br /&gt;
         filesz 0x00000020 memsz 0x00000020 flags r--&lt;br /&gt;
EH_FRAME off    0x00040240 vaddr 0x00440240 paddr 0x00440240 align 2**2&lt;br /&gt;
         filesz 0x00000014 memsz 0x00000014 flags r--&lt;br /&gt;
    NULL off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2&lt;br /&gt;
         filesz 0x00000000 memsz 0x00000000 flags ---&lt;br /&gt;
&lt;br /&gt;
Dynamic Section:&lt;br /&gt;
  NEEDED               libc.so.6&lt;br /&gt;
  INIT                 0x00402cf4&lt;br /&gt;
  FINI                 0x0043ca60&lt;br /&gt;
  INIT_ARRAY           0x00450280&lt;br /&gt;
  INIT_ARRAYSZ         0x00000004&lt;br /&gt;
  FINI_ARRAY           0x00450284&lt;br /&gt;
  FINI_ARRAYSZ         0x00000004&lt;br /&gt;
  HASH                 0x004002f0&lt;br /&gt;
  STRTAB               0x00401d6c&lt;br /&gt;
  SYMTAB               0x00400b8c&lt;br /&gt;
  STRSZ                0x00000c84&lt;br /&gt;
  SYMENT               0x00000010&lt;br /&gt;
  MIPS_RLD_MAP         0x004508b0&lt;br /&gt;
  MIPS_RLD_MAP_REL     0x00050670&lt;br /&gt;
  DEBUG                0x00000000&lt;br /&gt;
  PLTGOT               0x004508c0&lt;br /&gt;
  REL                  0x00402c8c&lt;br /&gt;
  RELSZ                0x00000068&lt;br /&gt;
  RELENT               0x00000008&lt;br /&gt;
  MIPS_RLD_VERSION     0x00000001&lt;br /&gt;
  MIPS_FLAGS           0x00000002&lt;br /&gt;
  MIPS_BASE_ADDRESS    0x00400000&lt;br /&gt;
  MIPS_LOCAL_GOTNO     0x00000097&lt;br /&gt;
  MIPS_SYMTABNO        0x0000011e&lt;br /&gt;
  MIPS_UNREFEXTNO      0x00000029&lt;br /&gt;
  MIPS_GOTSYM          0x00000098&lt;br /&gt;
  VERNEED              0x00402c2c&lt;br /&gt;
  VERNEEDNUM           0x00000001&lt;br /&gt;
  VERSYM               0x004029f0&lt;br /&gt;
&lt;br /&gt;
Version References:&lt;br /&gt;
  required from libc.so.6:&lt;br /&gt;
    0x0d696914 0x00 06 GLIBC_2.4&lt;br /&gt;
    0x0d696915 0x00 05 GLIBC_2.5&lt;br /&gt;
    0x0d696912 0x00 04 GLIBC_2.2&lt;br /&gt;
    0x0d696910 0x00 03 GLIBC_2.0&lt;br /&gt;
    0x0d696913 0x00 02 GLIBC_2.3&lt;br /&gt;
private flags = 1007: [abi=O32] [mips1] [not 32bitmode] [noreorder] [PIC] [CPIC]&lt;br /&gt;
&lt;br /&gt;
MIPS ABI Flags Version: 0&lt;br /&gt;
&lt;br /&gt;
ISA: MIPS1&lt;br /&gt;
GPR size: 32&lt;br /&gt;
CPR1 size: 32&lt;br /&gt;
CPR2 size: 0&lt;br /&gt;
FP ABI: Hard float (double precision)&lt;br /&gt;
ISA Extension: None&lt;br /&gt;
ASEs:&lt;br /&gt;
	None&lt;br /&gt;
FLAGS 1: 00000000&lt;br /&gt;
FLAGS 2: 00000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12181</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12181"/>
		<updated>2023-02-26T15:28:12Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Schritt 4: Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &amp;lt;code&amp;gt;opkg install &amp;lt;Paket.ipk&amp;gt;&amp;lt;/code&amp;gt; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &amp;lt;code&amp;gt;/usr/bin&amp;lt;/code&amp;gt; diverse Programme mit dem Präfix &amp;lt;code&amp;gt;mipsel-oe-linux-&amp;lt;/code&amp;gt; und unterhalb von &amp;lt;code&amp;gt;/usr/mipsel-oe-linux&amp;lt;/code&amp;gt; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &amp;lt;code&amp;gt;tar xvf grep-3.8.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cd grep-3.8&amp;lt;/code&amp;gt; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; mit der &amp;lt;code&amp;gt;CC&amp;lt;/code&amp;gt;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &amp;lt;code&amp;gt;--host=mipsel-oe-linux&amp;lt;/code&amp;gt; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./configure --host=mipsel-oe-linux --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Switch &amp;lt;code&amp;gt;--prefix=/usr&amp;lt;/code&amp;gt; sagt der Umgebung, dass das fertig übersetzte Programm später nach &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; installiert werden soll; das bedeutet, dass das Binary unter &amp;lt;code&amp;gt;/usr/bin/grep&amp;lt;/code&amp;gt; installiert wird. Ohne diesen Switch wird normalerweise &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; als Ziel benutzt, und das Binary findet sich später unter &amp;lt;code&amp;gt;/usr/local/bin/grep&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; aufgerufen (ein &amp;quot;make&amp;quot; befindet sich im Paket aus dem Download &amp;quot;git-make.zip&amp;quot; in der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1098-gcc-10-2-0-f%C3%BCr-boxen-mit-arm-prozessor-4k/ Database]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &amp;lt;code&amp;gt;DESTDIR&amp;lt;/code&amp;gt; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make install-strip DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
Zusammengefasst:&lt;br /&gt;
* &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; installiert das fertig übersetzte Programm an seinen Bestimmungs-Ort.&lt;br /&gt;
* &amp;lt;code&amp;gt;make install-strip&amp;lt;/code&amp;gt; strippt Binaries vor der Installation und installiert sie dann an sienen Bestimmungs-Ort.&lt;br /&gt;
* &amp;lt;code&amp;gt;make install DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt; installiert die Binaries in ein anderes Zielverzeichnis &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt; anstatt in das dafür vorgesehene Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
Weitere nützliche Ausfrufe von &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;make V=1&amp;lt;/code&amp;gt; zeigt genauer an, was beim übersetzen wirklich ausgeführt wird; manchmal unterdrücken Makefiles wie das von grep die Ausgabe, wie genau der Compiler aufgerufen wird.&lt;br /&gt;
* &amp;lt;code&amp;gt;make CC=mipsel-oe-linux-gcc&amp;lt;/code&amp;gt; &amp;quot;überschreibt&amp;quot; den Eintrag für den Compiler im Makefile; das funktioniert bei allen Variablen im Makefile, die entsprechend deklariert wurden.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &amp;lt;code&amp;gt;/media/hdd/install/usr/bin&amp;lt;/code&amp;gt;. Ein &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt; zeigt hier drei Dateien an, &amp;lt;code&amp;gt;egrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fgrep&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;file grep&amp;lt;/code&amp;gt;: Ausgabe sollte sein: &amp;lt;code&amp;gt;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mipsel-oe-linux-objdump -p grep&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Ausgabe von &amp;lt;code&amp;gt;objdump grep&amp;lt;/code&amp;gt;: bitte aufklappen.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
grep:     file format elf32-tradlittlemips&lt;br /&gt;
&lt;br /&gt;
Program Header:&lt;br /&gt;
    PHDR off    0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2&lt;br /&gt;
         filesz 0x00000140 memsz 0x00000140 flags r--&lt;br /&gt;
  INTERP off    0x00000174 vaddr 0x00400174 paddr 0x00400174 align 2**0&lt;br /&gt;
         filesz 0x0000000d memsz 0x0000000d flags r--&lt;br /&gt;
0x70000003 off    0x000001a8 vaddr 0x004001a8 paddr 0x004001a8 align 2**3&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
0x70000000 off    0x000001c0 vaddr 0x004001c0 paddr 0x004001c0 align 2**2&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**16&lt;br /&gt;
         filesz 0x00040280 memsz 0x00040280 flags r-x&lt;br /&gt;
    LOAD off    0x00040280 vaddr 0x00450280 paddr 0x00450280 align 2**16&lt;br /&gt;
         filesz 0x00000ab8 memsz 0x00011580 flags rw-&lt;br /&gt;
 DYNAMIC off    0x000001d8 vaddr 0x004001d8 paddr 0x004001d8 align 2**2&lt;br /&gt;
         filesz 0x00000118 memsz 0x00000118 flags r--&lt;br /&gt;
    NOTE off    0x00000184 vaddr 0x00400184 paddr 0x00400184 align 2**2&lt;br /&gt;
         filesz 0x00000020 memsz 0x00000020 flags r--&lt;br /&gt;
EH_FRAME off    0x00040240 vaddr 0x00440240 paddr 0x00440240 align 2**2&lt;br /&gt;
         filesz 0x00000014 memsz 0x00000014 flags r--&lt;br /&gt;
    NULL off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2&lt;br /&gt;
         filesz 0x00000000 memsz 0x00000000 flags ---&lt;br /&gt;
&lt;br /&gt;
Dynamic Section:&lt;br /&gt;
  NEEDED               libc.so.6&lt;br /&gt;
  INIT                 0x00402cf4&lt;br /&gt;
  FINI                 0x0043ca60&lt;br /&gt;
  INIT_ARRAY           0x00450280&lt;br /&gt;
  INIT_ARRAYSZ         0x00000004&lt;br /&gt;
  FINI_ARRAY           0x00450284&lt;br /&gt;
  FINI_ARRAYSZ         0x00000004&lt;br /&gt;
  HASH                 0x004002f0&lt;br /&gt;
  STRTAB               0x00401d6c&lt;br /&gt;
  SYMTAB               0x00400b8c&lt;br /&gt;
  STRSZ                0x00000c84&lt;br /&gt;
  SYMENT               0x00000010&lt;br /&gt;
  MIPS_RLD_MAP         0x004508b0&lt;br /&gt;
  MIPS_RLD_MAP_REL     0x00050670&lt;br /&gt;
  DEBUG                0x00000000&lt;br /&gt;
  PLTGOT               0x004508c0&lt;br /&gt;
  REL                  0x00402c8c&lt;br /&gt;
  RELSZ                0x00000068&lt;br /&gt;
  RELENT               0x00000008&lt;br /&gt;
  MIPS_RLD_VERSION     0x00000001&lt;br /&gt;
  MIPS_FLAGS           0x00000002&lt;br /&gt;
  MIPS_BASE_ADDRESS    0x00400000&lt;br /&gt;
  MIPS_LOCAL_GOTNO     0x00000097&lt;br /&gt;
  MIPS_SYMTABNO        0x0000011e&lt;br /&gt;
  MIPS_UNREFEXTNO      0x00000029&lt;br /&gt;
  MIPS_GOTSYM          0x00000098&lt;br /&gt;
  VERNEED              0x00402c2c&lt;br /&gt;
  VERNEEDNUM           0x00000001&lt;br /&gt;
  VERSYM               0x004029f0&lt;br /&gt;
&lt;br /&gt;
Version References:&lt;br /&gt;
  required from libc.so.6:&lt;br /&gt;
    0x0d696914 0x00 06 GLIBC_2.4&lt;br /&gt;
    0x0d696915 0x00 05 GLIBC_2.5&lt;br /&gt;
    0x0d696912 0x00 04 GLIBC_2.2&lt;br /&gt;
    0x0d696910 0x00 03 GLIBC_2.0&lt;br /&gt;
    0x0d696913 0x00 02 GLIBC_2.3&lt;br /&gt;
private flags = 1007: [abi=O32] [mips1] [not 32bitmode] [noreorder] [PIC] [CPIC]&lt;br /&gt;
&lt;br /&gt;
MIPS ABI Flags Version: 0&lt;br /&gt;
&lt;br /&gt;
ISA: MIPS1&lt;br /&gt;
GPR size: 32&lt;br /&gt;
CPR1 size: 32&lt;br /&gt;
CPR2 size: 0&lt;br /&gt;
FP ABI: Hard float (double precision)&lt;br /&gt;
ISA Extension: None&lt;br /&gt;
ASEs:&lt;br /&gt;
	None&lt;br /&gt;
FLAGS 1: 00000000&lt;br /&gt;
FLAGS 2: 00000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12180</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12180"/>
		<updated>2023-02-26T15:27:44Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Schritt 4: Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &amp;lt;code&amp;gt;opkg install &amp;lt;Paket.ipk&amp;gt;&amp;lt;/code&amp;gt; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &amp;lt;code&amp;gt;/usr/bin&amp;lt;/code&amp;gt; diverse Programme mit dem Präfix &amp;lt;code&amp;gt;mipsel-oe-linux-&amp;lt;/code&amp;gt; und unterhalb von &amp;lt;code&amp;gt;/usr/mipsel-oe-linux&amp;lt;/code&amp;gt; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &amp;lt;code&amp;gt;tar xvf grep-3.8.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cd grep-3.8&amp;lt;/code&amp;gt; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; mit der &amp;lt;code&amp;gt;CC&amp;lt;/code&amp;gt;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &amp;lt;code&amp;gt;--host=mipsel-oe-linux&amp;lt;/code&amp;gt; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./configure --host=mipsel-oe-linux --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Switch &amp;lt;code&amp;gt;--prefix=/usr&amp;lt;/code&amp;gt; sagt der Umgebung, dass das fertig übersetzte Programm später nach &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; installiert werden soll; das bedeutet, dass das Binary unter &amp;lt;code&amp;gt;/usr/bin/grep&amp;lt;/code&amp;gt; installiert wird. Ohne diesen Switch wird normalerweise &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; als Ziel benutzt, und das Binary findet sich später unter &amp;lt;code&amp;gt;/usr/local/bin/grep&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; aufgerufen (ein &amp;quot;make&amp;quot; befindet sich im Paket aus dem Download &amp;quot;git-make.zip&amp;quot; in der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1098-gcc-10-2-0-f%C3%BCr-boxen-mit-arm-prozessor-4k/ Database]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &amp;lt;code&amp;gt;DESTDIR&amp;lt;/code&amp;gt; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make install-strip DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt; installiert das fertig übersetzte Programm an seinen Bestimmungs-Ort.&lt;br /&gt;
* &amp;lt;code&amp;gt;make install-strip&amp;lt;/code&amp;gt; strippt Binaries vor der Installation und installiert sie dann an sienen Bestimmungs-Ort.&lt;br /&gt;
* &amp;lt;code&amp;gt;make install DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt; installiert die Binaries in ein anderes Zielverzeichnis &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt; anstatt in das dafür vorgesehene Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
Weitere nützliche Ausfrufe von &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;make V=1&amp;lt;/code&amp;gt; zeigt genauer an, was beim übersetzen wirklich ausgeführt wird; manchmal unterdrücken Makefiles wie das von grep die Ausgabe, wie genau der Compiler aufgerufen wird.&lt;br /&gt;
* &amp;lt;code&amp;gt;make CC=mipsel-oe-linux-gcc&amp;lt;/code&amp;gt; &amp;quot;überschreibt&amp;quot; den Eintrag für den Compiler im Makefile; das funktioniert bei allen Variablen im Makefile, die entsprechend deklariert wurden.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &amp;lt;code&amp;gt;/media/hdd/install/usr/bin&amp;lt;/code&amp;gt;. Ein &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt; zeigt hier drei Dateien an, &amp;lt;code&amp;gt;egrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fgrep&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;file grep&amp;lt;/code&amp;gt;: Ausgabe sollte sein: &amp;lt;code&amp;gt;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mipsel-oe-linux-objdump -p grep&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Ausgabe von &amp;lt;code&amp;gt;objdump grep&amp;lt;/code&amp;gt;: bitte aufklappen.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
grep:     file format elf32-tradlittlemips&lt;br /&gt;
&lt;br /&gt;
Program Header:&lt;br /&gt;
    PHDR off    0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2&lt;br /&gt;
         filesz 0x00000140 memsz 0x00000140 flags r--&lt;br /&gt;
  INTERP off    0x00000174 vaddr 0x00400174 paddr 0x00400174 align 2**0&lt;br /&gt;
         filesz 0x0000000d memsz 0x0000000d flags r--&lt;br /&gt;
0x70000003 off    0x000001a8 vaddr 0x004001a8 paddr 0x004001a8 align 2**3&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
0x70000000 off    0x000001c0 vaddr 0x004001c0 paddr 0x004001c0 align 2**2&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**16&lt;br /&gt;
         filesz 0x00040280 memsz 0x00040280 flags r-x&lt;br /&gt;
    LOAD off    0x00040280 vaddr 0x00450280 paddr 0x00450280 align 2**16&lt;br /&gt;
         filesz 0x00000ab8 memsz 0x00011580 flags rw-&lt;br /&gt;
 DYNAMIC off    0x000001d8 vaddr 0x004001d8 paddr 0x004001d8 align 2**2&lt;br /&gt;
         filesz 0x00000118 memsz 0x00000118 flags r--&lt;br /&gt;
    NOTE off    0x00000184 vaddr 0x00400184 paddr 0x00400184 align 2**2&lt;br /&gt;
         filesz 0x00000020 memsz 0x00000020 flags r--&lt;br /&gt;
EH_FRAME off    0x00040240 vaddr 0x00440240 paddr 0x00440240 align 2**2&lt;br /&gt;
         filesz 0x00000014 memsz 0x00000014 flags r--&lt;br /&gt;
    NULL off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2&lt;br /&gt;
         filesz 0x00000000 memsz 0x00000000 flags ---&lt;br /&gt;
&lt;br /&gt;
Dynamic Section:&lt;br /&gt;
  NEEDED               libc.so.6&lt;br /&gt;
  INIT                 0x00402cf4&lt;br /&gt;
  FINI                 0x0043ca60&lt;br /&gt;
  INIT_ARRAY           0x00450280&lt;br /&gt;
  INIT_ARRAYSZ         0x00000004&lt;br /&gt;
  FINI_ARRAY           0x00450284&lt;br /&gt;
  FINI_ARRAYSZ         0x00000004&lt;br /&gt;
  HASH                 0x004002f0&lt;br /&gt;
  STRTAB               0x00401d6c&lt;br /&gt;
  SYMTAB               0x00400b8c&lt;br /&gt;
  STRSZ                0x00000c84&lt;br /&gt;
  SYMENT               0x00000010&lt;br /&gt;
  MIPS_RLD_MAP         0x004508b0&lt;br /&gt;
  MIPS_RLD_MAP_REL     0x00050670&lt;br /&gt;
  DEBUG                0x00000000&lt;br /&gt;
  PLTGOT               0x004508c0&lt;br /&gt;
  REL                  0x00402c8c&lt;br /&gt;
  RELSZ                0x00000068&lt;br /&gt;
  RELENT               0x00000008&lt;br /&gt;
  MIPS_RLD_VERSION     0x00000001&lt;br /&gt;
  MIPS_FLAGS           0x00000002&lt;br /&gt;
  MIPS_BASE_ADDRESS    0x00400000&lt;br /&gt;
  MIPS_LOCAL_GOTNO     0x00000097&lt;br /&gt;
  MIPS_SYMTABNO        0x0000011e&lt;br /&gt;
  MIPS_UNREFEXTNO      0x00000029&lt;br /&gt;
  MIPS_GOTSYM          0x00000098&lt;br /&gt;
  VERNEED              0x00402c2c&lt;br /&gt;
  VERNEEDNUM           0x00000001&lt;br /&gt;
  VERSYM               0x004029f0&lt;br /&gt;
&lt;br /&gt;
Version References:&lt;br /&gt;
  required from libc.so.6:&lt;br /&gt;
    0x0d696914 0x00 06 GLIBC_2.4&lt;br /&gt;
    0x0d696915 0x00 05 GLIBC_2.5&lt;br /&gt;
    0x0d696912 0x00 04 GLIBC_2.2&lt;br /&gt;
    0x0d696910 0x00 03 GLIBC_2.0&lt;br /&gt;
    0x0d696913 0x00 02 GLIBC_2.3&lt;br /&gt;
private flags = 1007: [abi=O32] [mips1] [not 32bitmode] [noreorder] [PIC] [CPIC]&lt;br /&gt;
&lt;br /&gt;
MIPS ABI Flags Version: 0&lt;br /&gt;
&lt;br /&gt;
ISA: MIPS1&lt;br /&gt;
GPR size: 32&lt;br /&gt;
CPR1 size: 32&lt;br /&gt;
CPR2 size: 0&lt;br /&gt;
FP ABI: Hard float (double precision)&lt;br /&gt;
ISA Extension: None&lt;br /&gt;
ASEs:&lt;br /&gt;
	None&lt;br /&gt;
FLAGS 1: 00000000&lt;br /&gt;
FLAGS 2: 00000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12179</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12179"/>
		<updated>2023-02-26T15:19:42Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Schritt 3: Compilieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &amp;lt;code&amp;gt;opkg install &amp;lt;Paket.ipk&amp;gt;&amp;lt;/code&amp;gt; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &amp;lt;code&amp;gt;/usr/bin&amp;lt;/code&amp;gt; diverse Programme mit dem Präfix &amp;lt;code&amp;gt;mipsel-oe-linux-&amp;lt;/code&amp;gt; und unterhalb von &amp;lt;code&amp;gt;/usr/mipsel-oe-linux&amp;lt;/code&amp;gt; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &amp;lt;code&amp;gt;tar xvf grep-3.8.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cd grep-3.8&amp;lt;/code&amp;gt; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; mit der &amp;lt;code&amp;gt;CC&amp;lt;/code&amp;gt;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &amp;lt;code&amp;gt;--host=mipsel-oe-linux&amp;lt;/code&amp;gt; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./configure --host=mipsel-oe-linux --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Switch &amp;lt;code&amp;gt;--prefix=/usr&amp;lt;/code&amp;gt; sagt der Umgebung, dass das fertig übersetzte Programm später nach &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; installiert werden soll; das bedeutet, dass das Binary unter &amp;lt;code&amp;gt;/usr/bin/grep&amp;lt;/code&amp;gt; installiert wird. Ohne diesen Switch wird normalerweise &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; als Ziel benutzt, und das Binary findet sich später unter &amp;lt;code&amp;gt;/usr/local/bin/grep&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; aufgerufen (ein &amp;quot;make&amp;quot; befindet sich im Paket aus dem Download &amp;quot;git-make.zip&amp;quot; in der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1098-gcc-10-2-0-f%C3%BCr-boxen-mit-arm-prozessor-4k/ Database]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &amp;lt;code&amp;gt;DESTDIR&amp;lt;/code&amp;gt; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make install-strip DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &amp;lt;code&amp;gt;/media/hdd/install/usr/bin&amp;lt;/code&amp;gt;. Ein &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt; zeigt hier drei Dateien an, &amp;lt;code&amp;gt;egrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fgrep&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;file grep&amp;lt;/code&amp;gt;: Ausgabe sollte sein: &amp;lt;code&amp;gt;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mipsel-oe-linux-objdump -p grep&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Ausgabe von &amp;lt;code&amp;gt;objdump grep&amp;lt;/code&amp;gt;: bitte aufklappen.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
grep:     file format elf32-tradlittlemips&lt;br /&gt;
&lt;br /&gt;
Program Header:&lt;br /&gt;
    PHDR off    0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2&lt;br /&gt;
         filesz 0x00000140 memsz 0x00000140 flags r--&lt;br /&gt;
  INTERP off    0x00000174 vaddr 0x00400174 paddr 0x00400174 align 2**0&lt;br /&gt;
         filesz 0x0000000d memsz 0x0000000d flags r--&lt;br /&gt;
0x70000003 off    0x000001a8 vaddr 0x004001a8 paddr 0x004001a8 align 2**3&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
0x70000000 off    0x000001c0 vaddr 0x004001c0 paddr 0x004001c0 align 2**2&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**16&lt;br /&gt;
         filesz 0x00040280 memsz 0x00040280 flags r-x&lt;br /&gt;
    LOAD off    0x00040280 vaddr 0x00450280 paddr 0x00450280 align 2**16&lt;br /&gt;
         filesz 0x00000ab8 memsz 0x00011580 flags rw-&lt;br /&gt;
 DYNAMIC off    0x000001d8 vaddr 0x004001d8 paddr 0x004001d8 align 2**2&lt;br /&gt;
         filesz 0x00000118 memsz 0x00000118 flags r--&lt;br /&gt;
    NOTE off    0x00000184 vaddr 0x00400184 paddr 0x00400184 align 2**2&lt;br /&gt;
         filesz 0x00000020 memsz 0x00000020 flags r--&lt;br /&gt;
EH_FRAME off    0x00040240 vaddr 0x00440240 paddr 0x00440240 align 2**2&lt;br /&gt;
         filesz 0x00000014 memsz 0x00000014 flags r--&lt;br /&gt;
    NULL off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2&lt;br /&gt;
         filesz 0x00000000 memsz 0x00000000 flags ---&lt;br /&gt;
&lt;br /&gt;
Dynamic Section:&lt;br /&gt;
  NEEDED               libc.so.6&lt;br /&gt;
  INIT                 0x00402cf4&lt;br /&gt;
  FINI                 0x0043ca60&lt;br /&gt;
  INIT_ARRAY           0x00450280&lt;br /&gt;
  INIT_ARRAYSZ         0x00000004&lt;br /&gt;
  FINI_ARRAY           0x00450284&lt;br /&gt;
  FINI_ARRAYSZ         0x00000004&lt;br /&gt;
  HASH                 0x004002f0&lt;br /&gt;
  STRTAB               0x00401d6c&lt;br /&gt;
  SYMTAB               0x00400b8c&lt;br /&gt;
  STRSZ                0x00000c84&lt;br /&gt;
  SYMENT               0x00000010&lt;br /&gt;
  MIPS_RLD_MAP         0x004508b0&lt;br /&gt;
  MIPS_RLD_MAP_REL     0x00050670&lt;br /&gt;
  DEBUG                0x00000000&lt;br /&gt;
  PLTGOT               0x004508c0&lt;br /&gt;
  REL                  0x00402c8c&lt;br /&gt;
  RELSZ                0x00000068&lt;br /&gt;
  RELENT               0x00000008&lt;br /&gt;
  MIPS_RLD_VERSION     0x00000001&lt;br /&gt;
  MIPS_FLAGS           0x00000002&lt;br /&gt;
  MIPS_BASE_ADDRESS    0x00400000&lt;br /&gt;
  MIPS_LOCAL_GOTNO     0x00000097&lt;br /&gt;
  MIPS_SYMTABNO        0x0000011e&lt;br /&gt;
  MIPS_UNREFEXTNO      0x00000029&lt;br /&gt;
  MIPS_GOTSYM          0x00000098&lt;br /&gt;
  VERNEED              0x00402c2c&lt;br /&gt;
  VERNEEDNUM           0x00000001&lt;br /&gt;
  VERSYM               0x004029f0&lt;br /&gt;
&lt;br /&gt;
Version References:&lt;br /&gt;
  required from libc.so.6:&lt;br /&gt;
    0x0d696914 0x00 06 GLIBC_2.4&lt;br /&gt;
    0x0d696915 0x00 05 GLIBC_2.5&lt;br /&gt;
    0x0d696912 0x00 04 GLIBC_2.2&lt;br /&gt;
    0x0d696910 0x00 03 GLIBC_2.0&lt;br /&gt;
    0x0d696913 0x00 02 GLIBC_2.3&lt;br /&gt;
private flags = 1007: [abi=O32] [mips1] [not 32bitmode] [noreorder] [PIC] [CPIC]&lt;br /&gt;
&lt;br /&gt;
MIPS ABI Flags Version: 0&lt;br /&gt;
&lt;br /&gt;
ISA: MIPS1&lt;br /&gt;
GPR size: 32&lt;br /&gt;
CPR1 size: 32&lt;br /&gt;
CPR2 size: 0&lt;br /&gt;
FP ABI: Hard float (double precision)&lt;br /&gt;
ISA Extension: None&lt;br /&gt;
ASEs:&lt;br /&gt;
	None&lt;br /&gt;
FLAGS 1: 00000000&lt;br /&gt;
FLAGS 2: 00000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12178</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12178"/>
		<updated>2023-02-26T15:17:42Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &amp;lt;code&amp;gt;opkg install &amp;lt;Paket.ipk&amp;gt;&amp;lt;/code&amp;gt; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &amp;lt;code&amp;gt;/usr/bin&amp;lt;/code&amp;gt; diverse Programme mit dem Präfix &amp;lt;code&amp;gt;mipsel-oe-linux-&amp;lt;/code&amp;gt; und unterhalb von &amp;lt;code&amp;gt;/usr/mipsel-oe-linux&amp;lt;/code&amp;gt; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &amp;lt;code&amp;gt;tar xvf grep-3.8.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cd grep-3.8&amp;lt;/code&amp;gt; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; mit der &amp;lt;code&amp;gt;CC&amp;lt;/code&amp;gt;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &amp;lt;code&amp;gt;--host=mipsel-oe-linux&amp;lt;/code&amp;gt; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./configure --host=mipsel-oe-linux --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Switch &amp;lt;code&amp;gt;--prefix=/usr&amp;lt;/code&amp;gt; sagt der Umgebung, dass das fertig übersetzte Programm später nach &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; installiert werden soll; das bedeutet, dass das Binary unter &amp;lt;code&amp;gt;/usr/bin/grep&amp;lt;/code&amp;gt; installiert wird. Ohne diesen Switch wird normalerweise &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; als Ziel benutzt, und das Binary findet sich später unter &amp;lt;code&amp;gt;/usr/local/bin/grep&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden. &lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &amp;lt;code&amp;gt;DESTDIR&amp;lt;/code&amp;gt; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make install-strip DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &amp;lt;code&amp;gt;/media/hdd/install/usr/bin&amp;lt;/code&amp;gt;. Ein &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt; zeigt hier drei Dateien an, &amp;lt;code&amp;gt;egrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fgrep&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;file grep&amp;lt;/code&amp;gt;: Ausgabe sollte sein: &amp;lt;code&amp;gt;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mipsel-oe-linux-objdump -p grep&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Ausgabe von &amp;lt;code&amp;gt;objdump grep&amp;lt;/code&amp;gt;: bitte aufklappen.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
grep:     file format elf32-tradlittlemips&lt;br /&gt;
&lt;br /&gt;
Program Header:&lt;br /&gt;
    PHDR off    0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2&lt;br /&gt;
         filesz 0x00000140 memsz 0x00000140 flags r--&lt;br /&gt;
  INTERP off    0x00000174 vaddr 0x00400174 paddr 0x00400174 align 2**0&lt;br /&gt;
         filesz 0x0000000d memsz 0x0000000d flags r--&lt;br /&gt;
0x70000003 off    0x000001a8 vaddr 0x004001a8 paddr 0x004001a8 align 2**3&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
0x70000000 off    0x000001c0 vaddr 0x004001c0 paddr 0x004001c0 align 2**2&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**16&lt;br /&gt;
         filesz 0x00040280 memsz 0x00040280 flags r-x&lt;br /&gt;
    LOAD off    0x00040280 vaddr 0x00450280 paddr 0x00450280 align 2**16&lt;br /&gt;
         filesz 0x00000ab8 memsz 0x00011580 flags rw-&lt;br /&gt;
 DYNAMIC off    0x000001d8 vaddr 0x004001d8 paddr 0x004001d8 align 2**2&lt;br /&gt;
         filesz 0x00000118 memsz 0x00000118 flags r--&lt;br /&gt;
    NOTE off    0x00000184 vaddr 0x00400184 paddr 0x00400184 align 2**2&lt;br /&gt;
         filesz 0x00000020 memsz 0x00000020 flags r--&lt;br /&gt;
EH_FRAME off    0x00040240 vaddr 0x00440240 paddr 0x00440240 align 2**2&lt;br /&gt;
         filesz 0x00000014 memsz 0x00000014 flags r--&lt;br /&gt;
    NULL off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2&lt;br /&gt;
         filesz 0x00000000 memsz 0x00000000 flags ---&lt;br /&gt;
&lt;br /&gt;
Dynamic Section:&lt;br /&gt;
  NEEDED               libc.so.6&lt;br /&gt;
  INIT                 0x00402cf4&lt;br /&gt;
  FINI                 0x0043ca60&lt;br /&gt;
  INIT_ARRAY           0x00450280&lt;br /&gt;
  INIT_ARRAYSZ         0x00000004&lt;br /&gt;
  FINI_ARRAY           0x00450284&lt;br /&gt;
  FINI_ARRAYSZ         0x00000004&lt;br /&gt;
  HASH                 0x004002f0&lt;br /&gt;
  STRTAB               0x00401d6c&lt;br /&gt;
  SYMTAB               0x00400b8c&lt;br /&gt;
  STRSZ                0x00000c84&lt;br /&gt;
  SYMENT               0x00000010&lt;br /&gt;
  MIPS_RLD_MAP         0x004508b0&lt;br /&gt;
  MIPS_RLD_MAP_REL     0x00050670&lt;br /&gt;
  DEBUG                0x00000000&lt;br /&gt;
  PLTGOT               0x004508c0&lt;br /&gt;
  REL                  0x00402c8c&lt;br /&gt;
  RELSZ                0x00000068&lt;br /&gt;
  RELENT               0x00000008&lt;br /&gt;
  MIPS_RLD_VERSION     0x00000001&lt;br /&gt;
  MIPS_FLAGS           0x00000002&lt;br /&gt;
  MIPS_BASE_ADDRESS    0x00400000&lt;br /&gt;
  MIPS_LOCAL_GOTNO     0x00000097&lt;br /&gt;
  MIPS_SYMTABNO        0x0000011e&lt;br /&gt;
  MIPS_UNREFEXTNO      0x00000029&lt;br /&gt;
  MIPS_GOTSYM          0x00000098&lt;br /&gt;
  VERNEED              0x00402c2c&lt;br /&gt;
  VERNEEDNUM           0x00000001&lt;br /&gt;
  VERSYM               0x004029f0&lt;br /&gt;
&lt;br /&gt;
Version References:&lt;br /&gt;
  required from libc.so.6:&lt;br /&gt;
    0x0d696914 0x00 06 GLIBC_2.4&lt;br /&gt;
    0x0d696915 0x00 05 GLIBC_2.5&lt;br /&gt;
    0x0d696912 0x00 04 GLIBC_2.2&lt;br /&gt;
    0x0d696910 0x00 03 GLIBC_2.0&lt;br /&gt;
    0x0d696913 0x00 02 GLIBC_2.3&lt;br /&gt;
private flags = 1007: [abi=O32] [mips1] [not 32bitmode] [noreorder] [PIC] [CPIC]&lt;br /&gt;
&lt;br /&gt;
MIPS ABI Flags Version: 0&lt;br /&gt;
&lt;br /&gt;
ISA: MIPS1&lt;br /&gt;
GPR size: 32&lt;br /&gt;
CPR1 size: 32&lt;br /&gt;
CPR2 size: 0&lt;br /&gt;
FP ABI: Hard float (double precision)&lt;br /&gt;
ISA Extension: None&lt;br /&gt;
ASEs:&lt;br /&gt;
	None&lt;br /&gt;
FLAGS 1: 00000000&lt;br /&gt;
FLAGS 2: 00000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12177</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12177"/>
		<updated>2023-02-26T14:17:17Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Schritt 5: Programm einpacken und testen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &#039;&#039;&#039;opkg install &amp;lt;Paket.ipk&amp;gt;&#039;&#039;&#039; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &#039;&#039;&#039;/usr/bin&#039;&#039;&#039; diverse Programme mit dem Präfix &#039;&#039;&#039;mipsel-oe-linux-&#039;&#039;&#039; und unterhalb von &#039;&#039;&#039;/usr/mipsel-oe-linux&#039;&#039;&#039; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &amp;lt;code&amp;gt;tar xvf grep-3.8.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cd grep-3.8&amp;lt;/code&amp;gt; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; mit der &amp;lt;code&amp;gt;CC&amp;lt;/code&amp;gt;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &amp;lt;code&amp;gt;--host=mipsel-oe-linux&amp;lt;/code&amp;gt; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./configure --host=mipsel-oe-linux --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Switch &amp;lt;code&amp;gt;--prefix=/usr&amp;lt;/code&amp;gt; sagt der Umgebung, dass das fertig übersetzte Programm später nach &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; installiert werden soll; das bedeutet, dass das Binary unter &amp;lt;code&amp;gt;/usr/bin/grep&amp;lt;/code&amp;gt; installiert wird. Ohne diesen Switch wird normalerweise &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; als Ziel benutzt, und das Binary findet sich später unter &amp;lt;code&amp;gt;/usr/local/bin/grep&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden. &lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &amp;lt;code&amp;gt;DESTDIR&amp;lt;/code&amp;gt; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make install-strip DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &amp;lt;code&amp;gt;/media/hdd/install/usr/bin&amp;lt;/code&amp;gt;. Ein &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt; zeigt hier drei Dateien an, &amp;lt;code&amp;gt;egrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fgrep&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;file grep&amp;lt;/code&amp;gt;: Ausgabe sollte sein: &amp;lt;code&amp;gt;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mipsel-oe-linux-objdump -p grep&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Ausgabe von &amp;lt;code&amp;gt;objdump grep&amp;lt;/code&amp;gt;: bitte aufklappen.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
grep:     file format elf32-tradlittlemips&lt;br /&gt;
&lt;br /&gt;
Program Header:&lt;br /&gt;
    PHDR off    0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2&lt;br /&gt;
         filesz 0x00000140 memsz 0x00000140 flags r--&lt;br /&gt;
  INTERP off    0x00000174 vaddr 0x00400174 paddr 0x00400174 align 2**0&lt;br /&gt;
         filesz 0x0000000d memsz 0x0000000d flags r--&lt;br /&gt;
0x70000003 off    0x000001a8 vaddr 0x004001a8 paddr 0x004001a8 align 2**3&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
0x70000000 off    0x000001c0 vaddr 0x004001c0 paddr 0x004001c0 align 2**2&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**16&lt;br /&gt;
         filesz 0x00040280 memsz 0x00040280 flags r-x&lt;br /&gt;
    LOAD off    0x00040280 vaddr 0x00450280 paddr 0x00450280 align 2**16&lt;br /&gt;
         filesz 0x00000ab8 memsz 0x00011580 flags rw-&lt;br /&gt;
 DYNAMIC off    0x000001d8 vaddr 0x004001d8 paddr 0x004001d8 align 2**2&lt;br /&gt;
         filesz 0x00000118 memsz 0x00000118 flags r--&lt;br /&gt;
    NOTE off    0x00000184 vaddr 0x00400184 paddr 0x00400184 align 2**2&lt;br /&gt;
         filesz 0x00000020 memsz 0x00000020 flags r--&lt;br /&gt;
EH_FRAME off    0x00040240 vaddr 0x00440240 paddr 0x00440240 align 2**2&lt;br /&gt;
         filesz 0x00000014 memsz 0x00000014 flags r--&lt;br /&gt;
    NULL off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2&lt;br /&gt;
         filesz 0x00000000 memsz 0x00000000 flags ---&lt;br /&gt;
&lt;br /&gt;
Dynamic Section:&lt;br /&gt;
  NEEDED               libc.so.6&lt;br /&gt;
  INIT                 0x00402cf4&lt;br /&gt;
  FINI                 0x0043ca60&lt;br /&gt;
  INIT_ARRAY           0x00450280&lt;br /&gt;
  INIT_ARRAYSZ         0x00000004&lt;br /&gt;
  FINI_ARRAY           0x00450284&lt;br /&gt;
  FINI_ARRAYSZ         0x00000004&lt;br /&gt;
  HASH                 0x004002f0&lt;br /&gt;
  STRTAB               0x00401d6c&lt;br /&gt;
  SYMTAB               0x00400b8c&lt;br /&gt;
  STRSZ                0x00000c84&lt;br /&gt;
  SYMENT               0x00000010&lt;br /&gt;
  MIPS_RLD_MAP         0x004508b0&lt;br /&gt;
  MIPS_RLD_MAP_REL     0x00050670&lt;br /&gt;
  DEBUG                0x00000000&lt;br /&gt;
  PLTGOT               0x004508c0&lt;br /&gt;
  REL                  0x00402c8c&lt;br /&gt;
  RELSZ                0x00000068&lt;br /&gt;
  RELENT               0x00000008&lt;br /&gt;
  MIPS_RLD_VERSION     0x00000001&lt;br /&gt;
  MIPS_FLAGS           0x00000002&lt;br /&gt;
  MIPS_BASE_ADDRESS    0x00400000&lt;br /&gt;
  MIPS_LOCAL_GOTNO     0x00000097&lt;br /&gt;
  MIPS_SYMTABNO        0x0000011e&lt;br /&gt;
  MIPS_UNREFEXTNO      0x00000029&lt;br /&gt;
  MIPS_GOTSYM          0x00000098&lt;br /&gt;
  VERNEED              0x00402c2c&lt;br /&gt;
  VERNEEDNUM           0x00000001&lt;br /&gt;
  VERSYM               0x004029f0&lt;br /&gt;
&lt;br /&gt;
Version References:&lt;br /&gt;
  required from libc.so.6:&lt;br /&gt;
    0x0d696914 0x00 06 GLIBC_2.4&lt;br /&gt;
    0x0d696915 0x00 05 GLIBC_2.5&lt;br /&gt;
    0x0d696912 0x00 04 GLIBC_2.2&lt;br /&gt;
    0x0d696910 0x00 03 GLIBC_2.0&lt;br /&gt;
    0x0d696913 0x00 02 GLIBC_2.3&lt;br /&gt;
private flags = 1007: [abi=O32] [mips1] [not 32bitmode] [noreorder] [PIC] [CPIC]&lt;br /&gt;
&lt;br /&gt;
MIPS ABI Flags Version: 0&lt;br /&gt;
&lt;br /&gt;
ISA: MIPS1&lt;br /&gt;
GPR size: 32&lt;br /&gt;
CPR1 size: 32&lt;br /&gt;
CPR2 size: 0&lt;br /&gt;
FP ABI: Hard float (double precision)&lt;br /&gt;
ISA Extension: None&lt;br /&gt;
ASEs:&lt;br /&gt;
	None&lt;br /&gt;
FLAGS 1: 00000000&lt;br /&gt;
FLAGS 2: 00000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12176</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12176"/>
		<updated>2023-02-26T14:16:13Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &#039;&#039;&#039;opkg install &amp;lt;Paket.ipk&amp;gt;&#039;&#039;&#039; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &#039;&#039;&#039;/usr/bin&#039;&#039;&#039; diverse Programme mit dem Präfix &#039;&#039;&#039;mipsel-oe-linux-&#039;&#039;&#039; und unterhalb von &#039;&#039;&#039;/usr/mipsel-oe-linux&#039;&#039;&#039; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &amp;lt;code&amp;gt;tar xvf grep-3.8.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cd grep-3.8&amp;lt;/code&amp;gt; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; mit der &amp;lt;code&amp;gt;CC&amp;lt;/code&amp;gt;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &amp;lt;code&amp;gt;--host=mipsel-oe-linux&amp;lt;/code&amp;gt; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./configure --host=mipsel-oe-linux --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Switch &amp;lt;code&amp;gt;--prefix=/usr&amp;lt;/code&amp;gt; sagt der Umgebung, dass das fertig übersetzte Programm später nach &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; installiert werden soll; das bedeutet, dass das Binary unter &amp;lt;code&amp;gt;/usr/bin/grep&amp;lt;/code&amp;gt; installiert wird. Ohne diesen Switch wird normalerweise &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; als Ziel benutzt, und das Binary findet sich später unter &amp;lt;code&amp;gt;/usr/local/bin/grep&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden. &lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &amp;lt;code&amp;gt;DESTDIR&amp;lt;/code&amp;gt; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make install-strip DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &amp;lt;code&amp;gt;/media/hdd/install/usr/bin&amp;lt;/code&amp;gt;. Ein &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt; zeigt hier drei Dateien an, &amp;lt;code&amp;gt;egrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fgrep&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;file grep&amp;lt;/code&amp;gt;: Ausgabe sollte sein: &amp;lt;code&amp;gt;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mipsel-oe-linux-objdump -p grep&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Ausgabe von &amp;lt;code&amp;gt;objdump grep&amp;lt;/code&amp;gt;: bitte aufklappen.&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
grep:     file format elf32-little&lt;br /&gt;
&lt;br /&gt;
Program Header:&lt;br /&gt;
    PHDR off    0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2&lt;br /&gt;
         filesz 0x00000140 memsz 0x00000140 flags r--&lt;br /&gt;
  INTERP off    0x00000174 vaddr 0x00400174 paddr 0x00400174 align 2**0&lt;br /&gt;
         filesz 0x0000000d memsz 0x0000000d flags r--&lt;br /&gt;
0x70000003 off    0x000001a8 vaddr 0x004001a8 paddr 0x004001a8 align 2**3&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
0x70000000 off    0x000001c0 vaddr 0x004001c0 paddr 0x004001c0 align 2**2&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**16&lt;br /&gt;
         filesz 0x00040280 memsz 0x00040280 flags r-x&lt;br /&gt;
    LOAD off    0x00040280 vaddr 0x00450280 paddr 0x00450280 align 2**16&lt;br /&gt;
         filesz 0x00000ab8 memsz 0x00011580 flags rw-&lt;br /&gt;
 DYNAMIC off    0x000001d8 vaddr 0x004001d8 paddr 0x004001d8 align 2**2&lt;br /&gt;
         filesz 0x00000118 memsz 0x00000118 flags r--&lt;br /&gt;
    NOTE off    0x00000184 vaddr 0x00400184 paddr 0x00400184 align 2**2&lt;br /&gt;
         filesz 0x00000020 memsz 0x00000020 flags r--&lt;br /&gt;
EH_FRAME off    0x00040240 vaddr 0x00440240 paddr 0x00440240 align 2**2&lt;br /&gt;
         filesz 0x00000014 memsz 0x00000014 flags r--&lt;br /&gt;
    NULL off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2&lt;br /&gt;
         filesz 0x00000000 memsz 0x00000000 flags ---&lt;br /&gt;
&lt;br /&gt;
Dynamic Section:&lt;br /&gt;
  NEEDED               libc.so.6&lt;br /&gt;
  INIT                 0x00402cf4&lt;br /&gt;
  FINI                 0x0043ca60&lt;br /&gt;
  INIT_ARRAY           0x00450280&lt;br /&gt;
  INIT_ARRAYSZ         0x00000004&lt;br /&gt;
  FINI_ARRAY           0x00450284&lt;br /&gt;
  FINI_ARRAYSZ         0x00000004&lt;br /&gt;
  HASH                 0x004002f0&lt;br /&gt;
  STRTAB               0x00401d6c&lt;br /&gt;
  SYMTAB               0x00400b8c&lt;br /&gt;
  STRSZ                0x00000c84&lt;br /&gt;
  SYMENT               0x00000010&lt;br /&gt;
  0x70000016           0x004508b0&lt;br /&gt;
  0x70000035           0x00050670&lt;br /&gt;
  DEBUG                0x00000000&lt;br /&gt;
  PLTGOT               0x004508c0&lt;br /&gt;
  REL                  0x00402c8c&lt;br /&gt;
  RELSZ                0x00000068&lt;br /&gt;
  RELENT               0x00000008&lt;br /&gt;
  0x70000001           0x00000001&lt;br /&gt;
  0x70000005           0x00000002&lt;br /&gt;
  0x70000006           0x00400000&lt;br /&gt;
  0x7000000a           0x00000097&lt;br /&gt;
  0x70000011           0x0000011e&lt;br /&gt;
  0x70000012           0x00000029&lt;br /&gt;
  0x70000013           0x00000098&lt;br /&gt;
  VERNEED              0x00402c2c&lt;br /&gt;
  VERNEEDNUM           0x00000001&lt;br /&gt;
  VERSYM               0x004029f0&lt;br /&gt;
&lt;br /&gt;
Version References:&lt;br /&gt;
  required from libc.so.6:&lt;br /&gt;
    0x0d696914 0x00 06 GLIBC_2.4&lt;br /&gt;
    0x0d696915 0x00 05 GLIBC_2.5&lt;br /&gt;
    0x0d696912 0x00 04 GLIBC_2.2&lt;br /&gt;
    0x0d696910 0x00 03 GLIBC_2.0&lt;br /&gt;
    0x0d696913 0x00 02 GLIBC_2.3&lt;br /&gt;
&lt;br /&gt;
root@vusolo4k:/media/hdd/install/tut/grep-3.8/src# ^Cjdump -p grep&lt;br /&gt;
root@vusolo4k:/media/hdd/install/tut/grep-3.8/src# mipsel-oe-linux-objdump -p grep&lt;br /&gt;
&lt;br /&gt;
grep:     file format elf32-tradlittlemips&lt;br /&gt;
&lt;br /&gt;
Program Header:&lt;br /&gt;
    PHDR off    0x00000034 vaddr 0x00400034 paddr 0x00400034 align 2**2&lt;br /&gt;
         filesz 0x00000140 memsz 0x00000140 flags r--&lt;br /&gt;
  INTERP off    0x00000174 vaddr 0x00400174 paddr 0x00400174 align 2**0&lt;br /&gt;
         filesz 0x0000000d memsz 0x0000000d flags r--&lt;br /&gt;
0x70000003 off    0x000001a8 vaddr 0x004001a8 paddr 0x004001a8 align 2**3&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
0x70000000 off    0x000001c0 vaddr 0x004001c0 paddr 0x004001c0 align 2**2&lt;br /&gt;
         filesz 0x00000018 memsz 0x00000018 flags r--&lt;br /&gt;
    LOAD off    0x00000000 vaddr 0x00400000 paddr 0x00400000 align 2**16&lt;br /&gt;
         filesz 0x00040280 memsz 0x00040280 flags r-x&lt;br /&gt;
    LOAD off    0x00040280 vaddr 0x00450280 paddr 0x00450280 align 2**16&lt;br /&gt;
         filesz 0x00000ab8 memsz 0x00011580 flags rw-&lt;br /&gt;
 DYNAMIC off    0x000001d8 vaddr 0x004001d8 paddr 0x004001d8 align 2**2&lt;br /&gt;
         filesz 0x00000118 memsz 0x00000118 flags r--&lt;br /&gt;
    NOTE off    0x00000184 vaddr 0x00400184 paddr 0x00400184 align 2**2&lt;br /&gt;
         filesz 0x00000020 memsz 0x00000020 flags r--&lt;br /&gt;
EH_FRAME off    0x00040240 vaddr 0x00440240 paddr 0x00440240 align 2**2&lt;br /&gt;
         filesz 0x00000014 memsz 0x00000014 flags r--&lt;br /&gt;
    NULL off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2&lt;br /&gt;
         filesz 0x00000000 memsz 0x00000000 flags ---&lt;br /&gt;
&lt;br /&gt;
Dynamic Section:&lt;br /&gt;
  NEEDED               libc.so.6&lt;br /&gt;
  INIT                 0x00402cf4&lt;br /&gt;
  FINI                 0x0043ca60&lt;br /&gt;
  INIT_ARRAY           0x00450280&lt;br /&gt;
  INIT_ARRAYSZ         0x00000004&lt;br /&gt;
  FINI_ARRAY           0x00450284&lt;br /&gt;
  FINI_ARRAYSZ         0x00000004&lt;br /&gt;
  HASH                 0x004002f0&lt;br /&gt;
  STRTAB               0x00401d6c&lt;br /&gt;
  SYMTAB               0x00400b8c&lt;br /&gt;
  STRSZ                0x00000c84&lt;br /&gt;
  SYMENT               0x00000010&lt;br /&gt;
  MIPS_RLD_MAP         0x004508b0&lt;br /&gt;
  MIPS_RLD_MAP_REL     0x00050670&lt;br /&gt;
  DEBUG                0x00000000&lt;br /&gt;
  PLTGOT               0x004508c0&lt;br /&gt;
  REL                  0x00402c8c&lt;br /&gt;
  RELSZ                0x00000068&lt;br /&gt;
  RELENT               0x00000008&lt;br /&gt;
  MIPS_RLD_VERSION     0x00000001&lt;br /&gt;
  MIPS_FLAGS           0x00000002&lt;br /&gt;
  MIPS_BASE_ADDRESS    0x00400000&lt;br /&gt;
  MIPS_LOCAL_GOTNO     0x00000097&lt;br /&gt;
  MIPS_SYMTABNO        0x0000011e&lt;br /&gt;
  MIPS_UNREFEXTNO      0x00000029&lt;br /&gt;
  MIPS_GOTSYM          0x00000098&lt;br /&gt;
  VERNEED              0x00402c2c&lt;br /&gt;
  VERNEEDNUM           0x00000001&lt;br /&gt;
  VERSYM               0x004029f0&lt;br /&gt;
&lt;br /&gt;
Version References:&lt;br /&gt;
  required from libc.so.6:&lt;br /&gt;
    0x0d696914 0x00 06 GLIBC_2.4&lt;br /&gt;
    0x0d696915 0x00 05 GLIBC_2.5&lt;br /&gt;
    0x0d696912 0x00 04 GLIBC_2.2&lt;br /&gt;
    0x0d696910 0x00 03 GLIBC_2.0&lt;br /&gt;
    0x0d696913 0x00 02 GLIBC_2.3&lt;br /&gt;
private flags = 1007: [abi=O32] [mips1] [not 32bitmode] [noreorder] [PIC] [CPIC]&lt;br /&gt;
&lt;br /&gt;
MIPS ABI Flags Version: 0&lt;br /&gt;
&lt;br /&gt;
ISA: MIPS1&lt;br /&gt;
GPR size: 32&lt;br /&gt;
CPR1 size: 32&lt;br /&gt;
CPR2 size: 0&lt;br /&gt;
FP ABI: Hard float (double precision)&lt;br /&gt;
ISA Extension: None&lt;br /&gt;
ASEs:&lt;br /&gt;
	None&lt;br /&gt;
FLAGS 1: 00000000&lt;br /&gt;
FLAGS 2: 00000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12175</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12175"/>
		<updated>2023-02-26T14:09:57Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Benutzung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &#039;&#039;&#039;opkg install &amp;lt;Paket.ipk&amp;gt;&#039;&#039;&#039; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &#039;&#039;&#039;/usr/bin&#039;&#039;&#039; diverse Programme mit dem Präfix &#039;&#039;&#039;mipsel-oe-linux-&#039;&#039;&#039; und unterhalb von &#039;&#039;&#039;/usr/mipsel-oe-linux&#039;&#039;&#039; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &amp;lt;code&amp;gt;tar xvf grep-3.8.tar.gz&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &amp;lt;code&amp;gt;cd grep-3.8&amp;lt;/code&amp;gt; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &amp;lt;code&amp;gt;configure&amp;lt;/code&amp;gt; mit der &amp;lt;code&amp;gt;CC&amp;lt;/code&amp;gt;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &amp;lt;code&amp;gt;--host=mipsel-oe-linux&amp;lt;/code&amp;gt; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./configure --host=mipsel-oe-linux --prefix=/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Switch &amp;lt;code&amp;gt;--prefix=/usr&amp;lt;/code&amp;gt; sagt der Umgebung, dass das fertig übersetzte Programm später nach &amp;lt;code&amp;gt;/usr&amp;lt;/code&amp;gt; installiert werden soll; das bedeutet, dass das Binary unter &amp;lt;code&amp;gt;/usr/bin/grep&amp;lt;/code&amp;gt; installiert wird. Ohne diesen Switch wird normalerweise &amp;lt;code&amp;gt;/usr/local&amp;lt;/code&amp;gt; als Ziel benutzt, und das Binary findet sich später unter &amp;lt;code&amp;gt;/usr/local/bin/grep&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden. &lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &amp;lt;code&amp;gt;DESTDIR&amp;lt;/code&amp;gt; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;make install-strip DESTDIR=/media/hdd/install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &amp;lt;code&amp;gt;/media/hdd/install&amp;lt;/code&amp;gt;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &amp;lt;code&amp;gt;/media/hdd/install/usr/bin&amp;lt;/code&amp;gt;. Ein &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt; zeigt hier drei Dateien an, &amp;lt;code&amp;gt;egrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fgrep&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;file grep&amp;lt;/code&amp;gt;: Ausgabe sollte sein: &amp;lt;code&amp;gt;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mipsel-oe-linux-objdump -p grep&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12174</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12174"/>
		<updated>2023-02-26T13:51:54Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &#039;&#039;&#039;opkg install &amp;lt;Paket.ipk&amp;gt;&#039;&#039;&#039; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &#039;&#039;&#039;/usr/bin&#039;&#039;&#039; diverse Programme mit dem Präfix &#039;&#039;&#039;mipsel-oe-linux-&#039;&#039;&#039; und unterhalb von &#039;&#039;&#039;/usr/mipsel-oe-linux&#039;&#039;&#039; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &#039;&#039;&#039;tar xvf grep-3.8.tar.gz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &#039;&#039;&#039;cd grep-3.8&#039;&#039;&#039; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &#039;&#039;&#039;configure&#039;&#039;&#039; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &#039;&#039;&#039;make&#039;&#039;&#039;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &#039;&#039;&#039;configure&#039;&#039;&#039; mit der &#039;&#039;&#039;CC&#039;&#039;&#039;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &#039;&#039;&#039;grep&#039;&#039;&#039; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &#039;&#039;&#039;--host=mipsel-oe-linux&#039;&#039;&#039; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;./configure --host=mipsel-oe-linux --prefix=/usr&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Switch &#039;&#039;&#039;--prefix=/usr&#039;&#039;&#039; sagt der Umgebung, dass das fertig übersetzte Programm später nach &#039;&#039;&#039;/usr&#039;&#039;&#039; installiert werden soll; das bedeutet, dass das Binary unter &#039;&#039;&#039;/usr/bin/grep&#039;&#039;&#039; installiert wird. Ohne diesen Switch wird normalerweise &#039;&#039;&#039;/usr/local&#039;&#039;&#039; als Ziel benutzt, und das Binary findet sich später unter &#039;&#039;&#039;/usr/local/bin/grep&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &#039;&#039;&#039;make&#039;&#039;&#039; aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;make&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden. &lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &#039;&#039;&#039;DESTDIR&#039;&#039;&#039; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;make install-strip DESTDIR=/media/hdd/install&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &#039;&#039;&#039;/media/hdd/install&#039;&#039;&#039;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &#039;&#039;&#039;/media/hdd/install/usr/bin&#039;&#039;&#039;. Ein &#039;&#039;&#039;ls -l&#039;&#039;&#039; zeigt hier drei Dateien an, &#039;&#039;&#039;egrep&#039;&#039;&#039;, &#039;&#039;&#039;fgrep&#039;&#039;&#039; und &#039;&#039;&#039;grep&#039;&#039;&#039;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &#039;&#039;&#039;grep&#039;&#039;&#039;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;file grep&#039;&#039;&#039;: Ausgabe sollte sein: &#039;&#039;&#039;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mipsel-oe-linux-objdump -p grep&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12173</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12173"/>
		<updated>2023-02-26T13:51:25Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der [https://vuplus-support.org/wbb4/filebase/index.php?entry/1146-mipsel-cross-compiler-f%C3%BCr-arm/ Database] haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Der Link zur Database:&lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &#039;&#039;&#039;opkg install &amp;lt;Paket.ipk&amp;gt;&#039;&#039;&#039; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &#039;&#039;&#039;/usr/bin&#039;&#039;&#039; diverse Programme mit dem Präfix &#039;&#039;&#039;mipsel-oe-linux-&#039;&#039;&#039; und unterhalb von &#039;&#039;&#039;/usr/mipsel-oe-linux&#039;&#039;&#039; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &#039;&#039;&#039;tar xvf grep-3.8.tar.gz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &#039;&#039;&#039;cd grep-3.8&#039;&#039;&#039; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &#039;&#039;&#039;configure&#039;&#039;&#039; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &#039;&#039;&#039;make&#039;&#039;&#039;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &#039;&#039;&#039;configure&#039;&#039;&#039; mit der &#039;&#039;&#039;CC&#039;&#039;&#039;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &#039;&#039;&#039;grep&#039;&#039;&#039; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &#039;&#039;&#039;--host=mipsel-oe-linux&#039;&#039;&#039; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;./configure --host=mipsel-oe-linux --prefix=/usr&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Switch &#039;&#039;&#039;--prefix=/usr&#039;&#039;&#039; sagt der Umgebung, dass das fertig übersetzte Programm später nach &#039;&#039;&#039;/usr&#039;&#039;&#039; installiert werden soll; das bedeutet, dass das Binary unter &#039;&#039;&#039;/usr/bin/grep&#039;&#039;&#039; installiert wird. Ohne diesen Switch wird normalerweise &#039;&#039;&#039;/usr/local&#039;&#039;&#039; als Ziel benutzt, und das Binary findet sich später unter &#039;&#039;&#039;/usr/local/bin/grep&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &#039;&#039;&#039;make&#039;&#039;&#039; aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;make&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden. &lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &#039;&#039;&#039;DESTDIR&#039;&#039;&#039; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;make install-strip DESTDIR=/media/hdd/install&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &#039;&#039;&#039;/media/hdd/install&#039;&#039;&#039;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &#039;&#039;&#039;/media/hdd/install/usr/bin&#039;&#039;&#039;. Ein &#039;&#039;&#039;ls -l&#039;&#039;&#039; zeigt hier drei Dateien an, &#039;&#039;&#039;egrep&#039;&#039;&#039;, &#039;&#039;&#039;fgrep&#039;&#039;&#039; und &#039;&#039;&#039;grep&#039;&#039;&#039;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &#039;&#039;&#039;grep&#039;&#039;&#039;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;file grep&#039;&#039;&#039;: Ausgabe sollte sein: &#039;&#039;&#039;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mipsel-oe-linux-objdump -p grep&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12172</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12172"/>
		<updated>2023-02-26T13:47:27Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Schritt 2: Sourcen konfigurieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der Database haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Der Link zur Database:&lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &#039;&#039;&#039;opkg install &amp;lt;Paket.ipk&amp;gt;&#039;&#039;&#039; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &#039;&#039;&#039;/usr/bin&#039;&#039;&#039; diverse Programme mit dem Präfix &#039;&#039;&#039;mipsel-oe-linux-&#039;&#039;&#039; und unterhalb von &#039;&#039;&#039;/usr/mipsel-oe-linux&#039;&#039;&#039; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &#039;&#039;&#039;tar xvf grep-3.8.tar.gz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &#039;&#039;&#039;cd grep-3.8&#039;&#039;&#039; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &#039;&#039;&#039;configure&#039;&#039;&#039; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &#039;&#039;&#039;make&#039;&#039;&#039;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &#039;&#039;&#039;configure&#039;&#039;&#039; mit der &#039;&#039;&#039;CC&#039;&#039;&#039;-Variablen zu testen; es gibt eine Reihe von Umgebungsvariablen, die man auf diese Weise (nicht nur) an das configure-Script weiterreichen kann. Ein paar weitere sind: CXX (c++-Compiler), CFLAGS (Flags für den C-Compiler), CXXFLAGS (Flags für den C++-Compiler)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &#039;&#039;&#039;grep&#039;&#039;&#039; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &#039;&#039;&#039;--host=mipsel-oe-linux&#039;&#039;&#039; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;./configure --host=mipsel-oe-linux --prefix=/usr&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Switch &#039;&#039;&#039;--prefix=/usr&#039;&#039;&#039; sagt der Umgebung, dass das fertig übersetzte Programm später nach &#039;&#039;&#039;/usr&#039;&#039;&#039; installiert werden soll; das bedeutet, dass das Binary unter &#039;&#039;&#039;/usr/bin/grep&#039;&#039;&#039; installiert wird. Ohne diesen Switch wird normalerweise &#039;&#039;&#039;/usr/local&#039;&#039;&#039; als Ziel benutzt, und das Binary findet sich später unter &#039;&#039;&#039;/usr/local/bin/grep&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &#039;&#039;&#039;make&#039;&#039;&#039; aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;make&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden. &lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &#039;&#039;&#039;DESTDIR&#039;&#039;&#039; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;make install-strip DESTDIR=/media/hdd/install&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &#039;&#039;&#039;/media/hdd/install&#039;&#039;&#039;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &#039;&#039;&#039;/media/hdd/install/usr/bin&#039;&#039;&#039;. Ein &#039;&#039;&#039;ls -l&#039;&#039;&#039; zeigt hier drei Dateien an, &#039;&#039;&#039;egrep&#039;&#039;&#039;, &#039;&#039;&#039;fgrep&#039;&#039;&#039; und &#039;&#039;&#039;grep&#039;&#039;&#039;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &#039;&#039;&#039;grep&#039;&#039;&#039;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;file grep&#039;&#039;&#039;: Ausgabe sollte sein: &#039;&#039;&#039;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mipsel-oe-linux-objdump -p grep&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12171</id>
		<title>Cross Compiler</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Cross_Compiler&amp;diff=12171"/>
		<updated>2023-02-26T13:17:22Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: Die Seite wurde neu angelegt: „&amp;lt;blockquote&amp;gt; Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objek…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Unter einem Cross-Compiler versteht man einen Compiler, der auf einem bestimmten System (auch Hostplattform genannt) läuft, aber Kompilate (Objektdateien oder ausführbare Programme) für andere Systeme erzeugt. Diese Ziel-Systeme können andere Betriebssysteme, andere Prozessoren oder eine Kombination der beiden sein. Ein konkretes Beispiel wäre ein Compiler, der auf einem Intel-basierten Windows-System läuft und Programme für PowerPC-basierte Linux-Systeme erzeugt. Handelt es sich bei der Zielplattform um ein eingebettetes System, das selbst nicht für Entwicklung und Übersetzung geeignet ist, spricht man auch von einem Target-Compiler. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt; ([https://de.wikipedia.org/wiki/Cross-Compiler Cross-Compiler])&lt;br /&gt;
&lt;br /&gt;
Vorgestellt wird hier ein Cross-Compiler, der auf der auf unseren ARM-Boxen läuft und Code für Mips-Boxen erstellt. Motivation dazu ist, dass unsere 4k Boxen genügend Flash-Speicher und Hauptspeicher bereitstellen, dass ein Cross-Compiler für Mips problemlos neben einem ARM-Compiler auf den Boxen erstellt und installiert werden kann. Und natürlich, dass wir als Entwickler gerne beide von Vu+ bereit gestellten Architekturen unterstützen möchten, auch wenn wir selber nicht beide Architekturen im Zugriff haben.&lt;br /&gt;
&lt;br /&gt;
Beispielhaft zeigt dieser Artikel die Installation und Benutzung des Cross-Compilers.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
In der Database haben wir einen Mips-Cross-Compiler für ARM-Boxen zur Verfügung gestellt. Dieser besteht aus mehreren Paketen :&lt;br /&gt;
* Binutils&lt;br /&gt;
* Compiler&lt;br /&gt;
* Grundstock an Include-Dateien und Libraries (&amp;quot;Sysroot&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Um Binaries für Mips-Boxen auf unseren ARM-Boxen zu erstellen, müssen alle drei Pakete installiert sein. &lt;br /&gt;
&lt;br /&gt;
Der Link zur Database:&lt;br /&gt;
&lt;br /&gt;
Nach dem Download der Pakete auf eine ARM-Box können die drei Pakete mit &#039;&#039;&#039;opkg install &amp;lt;Paket.ipk&amp;gt;&#039;&#039;&#039; wie jedes andere Paket auch installiert werden. Nach der Installation befinden sich unter &#039;&#039;&#039;/usr/bin&#039;&#039;&#039; diverse Programme mit dem Präfix &#039;&#039;&#039;mipsel-oe-linux-&#039;&#039;&#039; und unterhalb von &#039;&#039;&#039;/usr/mipsel-oe-linux&#039;&#039;&#039; das &amp;quot;Sysroot&amp;quot; mit Include-Dateien und Bibliotheken, um Mipsel-Binaries zu compilieren.&lt;br /&gt;
&lt;br /&gt;
== Benutzung ==&lt;br /&gt;
Beispielhaft wird jetzt die Benutzung des Cross-Compilers anhand eines Pakets beschrieben, welches ich oft und viel benutze: &amp;quot;grep&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 1: Sourcen besorgen ===&lt;br /&gt;
Die Sourcen für grep befinden sich auf dem GNU-FTP-Server unter https://ftp.gnu.org/gnu/grep/ - die momentan aktuelle Version ist grep-3.8. Die Sourcen werden von dort heruntergeladen und irgendwo auf der Festplatte der Box entpackt, z.B. unter /media/hdd/build. Ausgepackt wird in der Konsole (z.B. Putty) mit dem tar-Befehl: &#039;&#039;&#039;tar xvf grep-3.8.tar.gz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Schritt 2: Sourcen konfigurieren ===&lt;br /&gt;
Mit &#039;&#039;&#039;cd grep-3.8&#039;&#039;&#039; wird in den ausgpackten Source-Tree gewechselt. Die meisten der heute benutzten Software-Pakete werden mit einem &#039;&#039;&#039;configure&#039;&#039;&#039; konfiguriert; dieses schaut, ob alle benötigten Komponenten für ein erfolgreiches übersetzen vorhanden sind, und generiert die Makefiles, um das Programm anschließend zu übersetzen.&lt;br /&gt;
&lt;br /&gt;
Um Makefiles benutzen zu können, benötigt man das &#039;&#039;&#039;make&#039;&#039;&#039;-Programm. Ein fertig übersetztes Programm befindet sich in der Database beim aktuellen GCC für die ARM-Boxen.&lt;br /&gt;
&lt;br /&gt;
Ein erster Versuch, den Cross-Compiler zu benutzen, ist immer, den Aufruf von &#039;&#039;&#039;configure&#039;&#039;&#039; mit der &#039;&#039;&#039;CC&#039;&#039;&#039;-Variablen zu testen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CC=mipsel-oe-linux-gcc ./configure --prefix=/usr&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das funktioniert bei &#039;&#039;&#039;grep&#039;&#039;&#039; nicht, die Fehlermeldung sagt, dass man den Compiler über den Switch &#039;&#039;&#039;--host=mipsel-oe-linux&#039;&#039;&#039; angeben soll. Das funktioniert. Also zweiter Versuch:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;./configure --host=mipsel-oe-linux --prefix=/usr&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Der Switch &#039;&#039;&#039;--prefix=/usr&#039;&#039;&#039; sagt der Umgebung, dass das fertig übersetzte Programm später nach &#039;&#039;&#039;/usr&#039;&#039;&#039; installiert werden soll; das bedeutet, dass das Binary unter &#039;&#039;&#039;/usr/bin/grep&#039;&#039;&#039; installiert wird. Ohne diesen Switch wird normalerweise &#039;&#039;&#039;/usr/local&#039;&#039;&#039; als Ziel benutzt, und das Binary findet sich später unter &#039;&#039;&#039;/usr/local/bin/grep&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 3: Compilieren ===&lt;br /&gt;
Als nächstes soll das Programm übersetzt werden; dazu wird &#039;&#039;&#039;make&#039;&#039;&#039; aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;make&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Meistens dauert der Configure-Schritt genauso lange wie das eigentliche Übersetzen des Programms. Wenn beim Übersetzen keine Fehler passiert sind, kann das Programm installiert werden. &lt;br /&gt;
&lt;br /&gt;
=== Schritt 4: Installation ===&lt;br /&gt;
&lt;br /&gt;
Ich kontrolliere gerne vor dem installieren, was installiert werden soll. Fast alle Makefiles kennen das &amp;quot;Target&amp;quot; &amp;quot;install&amp;quot;, viele können auch mit dem Target &amp;quot;install-strip&amp;quot; umgehen, und viele kennen auch eine Möglichkeit, das Programm in einem anderen Verzeichnis zu installieren. In der Regel wird das mit der Variablen &#039;&#039;&#039;DESTDIR&#039;&#039;&#039; erreicht. Wir führen also aus:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;make install-strip DESTDIR=/media/hdd/install&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das installiert das übersetzte Programm unterhalb von &#039;&#039;&#039;/media/hdd/install&#039;&#039;&#039;, wo wir noch einmal schauen können, was wir mitnehmen möchten, und was nicht.&lt;br /&gt;
&lt;br /&gt;
=== Schritt 5: Programm einpacken und testen ===&lt;br /&gt;
Der nächste Schritt ist bei mir immer, die Dateien als IPK einzupacken. Wie das gemacht werden kann, soll hier nicht gezeigt werden; dazu habe ich unter [[Paketmanager opkg]] schon einiges geschrieben.&lt;br /&gt;
&lt;br /&gt;
Wir kontrollieren aber noch einmal, dass der Cross-Compiler ein Mipsel-Binary erstellt hat. Dazu wechseln wir in der Konsole mit &amp;quot;cd&amp;quot; nach &#039;&#039;&#039;/media/hdd/install/usr/bin&#039;&#039;&#039;. Ein &#039;&#039;&#039;ls -l&#039;&#039;&#039; zeigt hier drei Dateien an, &#039;&#039;&#039;egrep&#039;&#039;&#039;, &#039;&#039;&#039;fgrep&#039;&#039;&#039; und &#039;&#039;&#039;grep&#039;&#039;&#039;. egrep und fgrep sind Shell-Scripten, das eigentliche Binary ist &#039;&#039;&#039;grep&#039;&#039;&#039;. Wir können uns den Inhalt mit einigen Tools anschauen. Als erstes:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;file grep&#039;&#039;&#039;: Ausgabe sollte sein: &#039;&#039;&#039;grep: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.32, stripped&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Schauen wir etwas genauer in das Binary:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mipsel-oe-linux-objdump -p grep&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Hier sehen wir alle interessanten Informationen, zum Beispiel welche Shared-Libraries das Programm in welcher Version auf der Mips-Maschine benötigt. &lt;br /&gt;
&lt;br /&gt;
Das Binary kann jetzt auf eine Mips-Box kopiert werden, um endgültig sicherzustellen, dass wir hier keinen Murks produziert haben.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Vu%2B_STB_Vergleichstabelle&amp;diff=12164</id>
		<title>Vu+ STB Vergleichstabelle</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Vu%2B_STB_Vergleichstabelle&amp;diff=12164"/>
		<updated>2022-12-29T18:54:01Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: /* Vu+ 4K (UHD) STB&amp;#039;s */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Index]]&lt;br /&gt;
[[Kategorie:Hardware]]&lt;br /&gt;
== Vu+ 4K (UHD) STB&#039;s ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-datatable&amp;quot; style=&amp;quot;text-align:center&amp;quot;                                 &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; |&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Duo 4K SE]]&amp;lt;br&amp;gt;&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Duo 4K]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Solo 4K]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Ultimo 4K]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Uno 4K]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Uno 4K SE]]&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Zero 4K]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | CPU / RAM !! style=&amp;quot;background-color:#696969;&amp;quot; colspan=&amp;quot;7&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Hersteller  || Broadcom    || Broadcom    || Broadcom    || Broadcom    || Broadcom    || Broadcom    || Broadcom &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Typ 	      || BCM 7444S   || BCM 7278    || BCM 7376    || BCM 7444S   || BCM 7252S   || BCM7252S    || BCM 72604 &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Architektur || ARM         || ARM         || ARM         || ARM         || ARM         || ARM         || ARM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Takt 	      || 4x 1.5 Ghz  || 4x 2.1 Ghz  || 2x 1.5 Ghz  || 4x 1.5 Ghz  || 2x 1.7 GHz  || 2x 1.7 Ghz  || 2x 1.5 Ghz&lt;br /&gt;
|-|&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Flash Typ       || eMMC        || eMMC        || eMMC        || eMMC        || eMMC        || eMMC        || eMMC&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Flash Größe     || 4 GB        || 4 GB        || 4 GB        || 4 GB        || 4 GB        || 4 GB        || 4 GB&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | RAM             || 3 GB 	     || 2 GB        || 2 GB        || 3 GB        || 2 GB        || 2 GB        || 2 GB&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | PVR !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;7&amp;quot;| &lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | PVR-Ready       || {{Ja}}       || {{Ja}}      || {{Ja}}      || {{Ja}}      || {{Ja}}      || {{Ja}}      || {{Ja}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDD             || Plug &amp;amp; Play Wechselrahmen&amp;lt;br /&amp;gt;für 2,5&amp;quot; SATA - Festplatten&amp;lt;br /&amp;gt; Bauhöhe bis max.15mm || Plug &amp;amp; Play Wechselrahmen&amp;lt;br /&amp;gt;für 2,5&amp;quot; SATA - Festplatten&amp;lt;br /&amp;gt; Bauhöhe bis max.15mm || Plug &amp;amp; Play Wechselrahmen&amp;lt;br /&amp;gt;für 2,5&amp;quot; SATA - Festplatten&amp;lt;br /&amp;gt; Bauhöhe bis max.10,5mm || Intern&amp;lt;br /&amp;gt;2,5&amp;quot;/3,5&amp;quot;  || Extern || Plug &amp;amp; Play Wechselrahmen&amp;lt;br /&amp;gt;für 2,5&amp;quot; SATA - Festplatten&amp;lt;br /&amp;gt; Bauhöhe bis max.10,5mm ||  Extern mit PVR-Kit &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | SATA            || {{Ja}}            || {{Ja}}      || {{Ja}}      || {{Ja}}      || {{Nein}}    || {{Ja}}      || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Kartenleser / CI !! style=&amp;quot;background-color:#696969;&amp;quot; colspan=&amp;quot;7&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Kartenleser         || 1         || 1         || 2         || 2           || 1           || 1           || 1 &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Common Interface    || 2         || 2         || 1         || 2           || 1           || 1           || 1 &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CI+ zertifiziert    || {{Nein}}  || {{Nein}}  || {{Nein}}  || {{Nein}}    || {{Nein}}    || {{Nein}}    || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Netzwerk !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;7&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Ethernet&amp;lt;br /&amp;gt;Fast / Gigabit  || {{Ja}} / {{Ja}} || {{Ja}} / {{Ja}} || {{Ja}} / {{Ja}} || {{Ja}} / {{Ja}} || {{Ja}} / {{Ja}} || {{Ja}} / {{Ja}} || {{Ja}} / {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | WiFi 2,4 GHz       || {{Ja}}  || {{Ja}}  || WiFi 300 Mbit/s                   || {{Ja}} || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick) &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | WiFi 5 GHz         || {{Ja}}  || {{Ja}}  || {{Nein}} (nur via USB-WLAN Stick) || {{Ja}} || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick) &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Wake on LAN (WoL)     || {{Nein}} || {{Nein}} || {{Nein}} || {{Nein}} || {{Nein}} || {{Nein}} || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Wake on WLAN (WoWLAN) || {{Nein}}   || {{Nein}} || {{Nein}} || {{Ja}}   || {{Nein}} || {{Nein}} || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | USB / Bluetooth / Display!! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;7&amp;quot;| &lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | USB 2.0 	|| 1x Front || 1x Front || 1x Front || 1x Front || {{Nein}}               || {{Nein}} || 1x Back &lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | USB 3.0 	|| 2x Back  || 2x Back  || 2x Back  || 2x Back  || 1x Left Side / 1x Back || 2x Back  || {{Nein}}&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Bluetooth || BT 4.1   || BT 4.1   || {{Nein}} (nur via Vu+ USB-BT Dongle) || BT 4.0 || {{Nein}} (nur via Vu+ USB-BT Dongle) || {{Nein}} (nur via Vu+ USB-BT Dongle) || {{Nein}} (nur via Vu+ USB-BT Dongle) &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Display   || 3.5&amp;quot; Farb LCD&amp;lt;br&amp;gt;480 x 320 x 32  || 3.5&amp;quot; Farb LCD&amp;lt;br&amp;gt;480 x 320 x 32 || 3.5&amp;quot; Farb LCD&amp;lt;br&amp;gt;480 x 320 x 32 || 4.0&amp;quot; Farb LCD&amp;lt;br&amp;gt;800 x 480 x 32 || {{Nein}} || 2.4&amp;quot; Farb LCD&amp;lt;br&amp;gt;400 x 240 x 32 || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Tuner !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;7&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Mögliche Tuner               || DVB-S2X / MIS opt. /C/T2   || DVB-S2X/C/T2               || DVB-S2/C/T(2)         || DVB-S2/C/T(2)         || DVB-S2/C              || DVB-S2/C     || DVB-S2X/C/T2 &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tunersteckplatz neues System || 2                          || 2                          || keine                 || 2&amp;lt;sup&amp;gt;1)&amp;lt;/sup&amp;gt;        || 1                     || 1            || keine &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tunersteckplatz altes System || keine                      || keine                      || 1                     || 1                     || keine                 || keine        || keine &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tuner fest verbaut           || keine                      || keine                      || [[DVB-S2 FBC Twin-Tuner]] || keine             || keine                 || keine        || {{Ja}}  &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tuner austauschbar           || {{Ja}}                     || {{Ja}}                     || {{Ja}}                || {{Ja}}                || {{Ja}}                || {{Ja}}       || {{Nein}} &lt;br /&gt;
|-   &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Anzahl Tuner                 || variabel&amp;lt;sup&amp;gt;2)&amp;lt;/sup&amp;gt;      || variabel&amp;lt;sup&amp;gt;2)&amp;lt;/sup&amp;gt;      || variabel&amp;lt;sup&amp;gt;3)&amp;lt;/sup&amp;gt;      || variabel&amp;lt;sup&amp;gt;4)&amp;lt;/sup&amp;gt; || variabel&amp;lt;sup&amp;gt;5)&amp;lt;/sup&amp;gt; || variabel&amp;lt;sup&amp;gt;5)&amp;lt;/sup&amp;gt; || 1&amp;lt;sup&amp;gt;6)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-   &lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Audio !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;7&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Audio out analog           || {{Nein}} || {{Nein}} || {{Nein}} || Cinch   || 3,5mm A/V Buchse || {{Nein}} || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | S/PDIF out                 || optisch  || optisch  || optisch  || optisch || optisch          || optisch  || optisch&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Video !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;7&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Analog Video out           || {{Nein}}   || {{Nein}}   || {{Nein}}   || {{Nein}}   || 3,5mm A/V Buchse || {{Nein}}   || {{Nein}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDMI-Out                   || HDMI (2.0) || HDMI (2.0) || HDMI (2.0) || HDMI (2.0) || HDMI (2.0)       || HDMI (2.0) || HDMI (2.0)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDMI-In                    || HDMI (2.0) || HDMI (2.0) || {{Nein}}   || HDMI (2.0) || {{Nein}}         || HDMI (2.0) || {{Nein}}  &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | UHDTV-tauglich             || {{Ja}}     || {{Ja}}     || {{Ja}}     || {{Ja}}     || {{Ja}}           || {{Ja}}     || {{Ja}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDTV-tauglich (DVB-S/S2/C) || {{Ja}}     || {{Ja}}     || {{Ja}}     || {{Ja}}     || {{Ja}}           || {{Ja}}     || {{Ja}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDTV-tauglich (DVB-T2 HD)  || {{Ja}}      || {{Ja}}     || {{Ja}}     || {{Ja}}     || {{Ja}}           || {{Ja}}     || {{Ja}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDTV-tauglich (DVB-T2)     || {{Ja}}     || {{Ja}}     || {{Ja}}     || {{Ja}}     || {{Ja}}           || {{Ja}}     || {{Ja}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | 3D-GUI fähig               || {{Ja}}     || {{Ja}}     || {{Ja}}     || {{Ja}}     || {{Ja}}           || {{Ja}}     || {{Ja}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | VP9 fähig                  || {{Ja}}&amp;lt;sup&amp;gt;7)&amp;lt;/sup&amp;gt; || ?          || {{Nein}} || {{Ja}}&amp;lt;sup&amp;gt;7)&amp;lt;/sup&amp;gt; || {{Ja}}&amp;lt;sup&amp;gt;7)&amp;lt;/sup&amp;gt; || {{Ja}}&amp;lt;sup&amp;gt;7)&amp;lt;/sup&amp;gt; || {{Ja}}&amp;lt;sup&amp;gt;7)&amp;lt;/sup&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Transcoding                || Dual HD Transcoding || Dual HD Transcoding || {{Ja}} (dann kein [[PiP]] möglich!) || Dual HD Transcoding || HD Transcoding || HD Transcoding || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Sonstiges !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;7&amp;quot;|  &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Abmessungen in mm (BxTxH)     || 310x255x68      || 310x241x60      || 315x255x65      || 380x290x75      || 230x175x50  || 280x195x45 || 135x105x45&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Gewicht (ohne HDD)            || 1.8 kg          || 1.8 kg          || 3,0 kg          || 2,9 kg          || 0,75 kg     || ~2 kg      || ~0.6 kg &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | externer IR-Empfänger         ||  Anschluss vorh.  || Anschluss vorh. || Anschluss vorh. || Anschluss vorh. || {{Ja}}      || {{Ja}}     || {{Ja}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Leistungsaufnahme Deepstandby || &amp;lt; 0.5 W         || &amp;lt; 0.5 W         || &amp;lt; 0,5 W         ||  &amp;lt; 0,5 W        ||  &amp;lt; 0,5 W    ||  &amp;lt; 0,5 W   ||  &amp;lt; 0,5 W &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Leistungsaufnahme Betrieb     || &amp;lt; 15 W          || &amp;lt; 25 W          || &amp;lt; 13 W          || &amp;lt; 25 W          || &amp;lt; 12 W      || &amp;lt; 15 W     || &amp;lt; 10 W &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Netzteil                      || extern          || extern 60 W     || extern 60 W     || extern 60 W     || extern 36 W || extern     || extern &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
1) [[DVB-C FBC-Tuner]] werden nur in Tunersteckplatz A unterstützt &lt;br /&gt;
&lt;br /&gt;
2) 2x Steckplatz für die neuen [[Vu+ Tunersteckkarten]] mit [[DVB-S2(X) FBC Twin-Tuner]] und/oder [[DVB-C FBC-Tuner]]&lt;br /&gt;
&lt;br /&gt;
3) [[DVB-S2 FBC Twin-Tuner]] fest installiert und 1x Tunersteckplatz für die alten [[Vu+ Tunersteckkarten]] geeignet&lt;br /&gt;
&lt;br /&gt;
4) 2x Steckplatz für die neuen [[Vu+ Tunersteckkarten]] mit [[DVB-S2(X) FBC Twin-Tuner]] und/oder [[DVB-C FBC-Tuner]] (nur in Tunersteckplatz A) und 1x Steckplatz für die alten [[Vu+ Tunersteckkarten]] &lt;br /&gt;
&lt;br /&gt;
5) 1x Steckplatz für die neuen [[Vu+ Tunersteckkarten]] mit [[DVB-S2(X) FBC Twin-Tuner]] oder [[DVB-C FBC-Tuner]] geeignet&lt;br /&gt;
&lt;br /&gt;
6) DVB-S2X-Single-Tuner oder DVB-C/T2-Single-Tuner (kein FBC-Tuner)&lt;br /&gt;
&lt;br /&gt;
7) Unterstützt wird VP9 Profile 1, nur die Zero 4k unterstützt zusätzlich auch VP9 Profile 2.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Alle Angaben ohne Gewähr!&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Vu+ HD STB&#039;s ==&lt;br /&gt;
&lt;br /&gt;
=== Tabelle 1 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-datatable&amp;quot; style=&amp;quot;text-align:center&amp;quot;                                 &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; |&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Duo²]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Solo²]] [[Vu+ Solo² WE|(WE)]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Solo SE]] [[Vu+ Solo SE WE|(WE)]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Solo SE V2]] [[Vu+ Solo SE V2 WE|(WE)]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Zero]] [[Vu+ Zero WE|(WE)]]&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | CPU / RAM !! style=&amp;quot;background-color:#696969;&amp;quot; colspan=&amp;quot;5&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Hersteller  || Broadcom   || Broadcom   || Broadcom   || Broadcom   || Broadcom&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Typ 	      || BCM 7424   || BCM 7356   || BCM 7429   || BCM 7429   || BCM 7362&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Architektur || Mipsel     || Mipsel     || Mipsel     || Mipsel     || Mipsel&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Takt 	      || 2x 1,3 GHz || 2x 1,3 GHz || 2x 1,3 GHz || 2x 1,3 GHz || 742 MHz&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Flash Typ       || NAND       || NAND       || NAND       || NAND       || NAND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Flash Größe     || 1 GB       || 256 MB     || 256 MB     || 512 MB     || 256 MB&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | RAM 	      || 2 GB       || 1 GB       || 1 GB       || 1 GB       || 512 MB&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | PVR !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;5&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | PVR-Ready       || {{Ja}}    || {{Ja}}   || {{Ja}}   || {{Ja}}   || {{Ja}}  &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDD 	      || 2,5&amp;quot;/3,5&amp;quot; || 2,5&amp;quot;     || Extern   || Extern   || Extern&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | SATA 	      || {{Ja}}    || {{Ja}}   || {{Nein}} || {{Nein}} || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | eSATA 	      || {{Ja}}    || {{Nein}} || {{Ja}}   || {{Ja}}   || {{Nein}} &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Kartenleser / CI !! style=&amp;quot;background-color:#696969;&amp;quot; colspan=&amp;quot;5&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Kartenleser      || 2        || 2        || 1        || 1        || 1&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Common Interface || 2        || 1        || 1        || 1        || 0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CI+ zertifiziert || {{Nein}} || {{Nein}} || {{Nein}} || {{Nein}} || {{Nein}} &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Netzwerk !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;5&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Ethernet&amp;lt;br /&amp;gt;Fast / Gigabit || {{Ja}} / {{Ja}} || {{Ja}} / {{Ja}} || {{Ja}} / {{Nein}} || {{Ja}} / {{Nein}} || {{Ja}} / {{Nein}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | WiFi 2,4 GHz      || {{Ja}} WiFi 300 Mbit/s || {{Nein}} (nur via USB-WLAN Stick)|| {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | WiFi 5 GHz        || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick)|| {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Wake on LAN (WoL) || {{Ja}}  (mit neuem [[Bootloader]]) || {{Nein}}  || {{Nein}}  || {{Nein}}  || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | USB / Display!! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;5&amp;quot;| &lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | USB 2.0 	 || 3x          || 3x    || 2x    || 2x    || 2x &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Display    || VFD und LCD || VFD   || {{Nein}}  || {{Nein}}  || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Tuner !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Mögliche Tuner                        || DVB-S2/C/T(2)   || DVB-S2   || DVB-S2/C/T(2)   || DVB-S2/C/T(2)   || DVB-S2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tunersteckplatz nur für [[FBC-Tuner]] || {{Nein}}        || {{Nein}} || {{Nein}}        || {{Nein}}        || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tunersteckplatz altes System          || 2x&amp;lt;sup&amp;gt;1)&amp;lt;/sup&amp;gt; || {{Nein}} || 1x&amp;lt;sup&amp;gt;2)&amp;lt;/sup&amp;gt; || 1x&amp;lt;sup&amp;gt;3)&amp;lt;/sup&amp;gt; || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tuner fest verbaut                    || {{Nein}}        || 2x       || {{Nein}}        || {{Nein}}        || 1x&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tuner austauschbar                    || {{Ja}}          || {{Nein}} || {{Ja}}          || {{Ja}}          || {{Nein}} &lt;br /&gt;
|-   &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Anzahl Tuner                          || variabel (1-4)  || 2        || 1               || variabel (1-2)  || 1 &lt;br /&gt;
|-   &lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Audio !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;5&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Audio out analog         || Cinch      || Cinch      || Cinch      || Cinch      || 3,5mm A/V Buchse&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | S/PDIF out               || optisch    || optisch    || optisch    || optisch    || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Video !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Analog Video out &amp;lt;br /&amp;gt;FBAS / SCART / YPbPr || {{Ja}}  / {{Ja}}  / {{Ja}}  || {{Ja}}  / {{Ja}}  / {{Nein}} || {{Ja}}  / {{Nein}} / {{Nein}} || {{Ja}}  / {{Nein}} / {{Nein}} || &lt;br /&gt;
{{Ja}}&amp;lt;sup&amp;gt;4)&amp;lt;/sup&amp;gt; / {{Nein}} / {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDMI-Out                  || {{Ja}}    || {{Ja}}    || {{Ja}}    || {{Ja}}    || {{Ja}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | UHDTV-tauglich            || {{Nein}}  || {{Nein}}  || {{Nein}}  || {{Nein}}  || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDTV-tauglich (DVB-S/S2)  || {{Ja}}    || {{Ja}}    || {{Ja}}    || {{Ja}}    || {{Ja}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDTV-tauglich (DVB-T2 HD) || {{Nein}}  || {{Nein}}  || {{Nein}}  || {{Nein}}  || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDTV-tauglich (DVB-T2)    || {{Ja}}    || {{Ja}}    || {{Ja}}    || {{Ja}}    || {{Ja}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | 3D-GUI fähig              || {{Ja}}    || {{Ja}}    || {{Ja}}    || {{Ja}}    || {{Ja}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | VP9 fähig                 || {{Nein}}  || {{Nein}}  || {{Nein}}  || {{Nein}}  || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Transcoding               || {{Ja}} (Hardware) || {{Ja}} || {{Ja}} || {{Ja}} || {{Nein}}  &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Sonstiges !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;5&amp;quot;|  &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Abmessungen in mm (BxTxH)     || 380x290x60  || 280x200x50   || 210x185x40  || 210x185x40  || 160x145x30&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Gewicht (ohne HDD)            || 3,0 kg      || 2,0 kg       || 0,74 kg     || 0,74 kg     || 0,4 kg&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | externer IR-Empfänger         || {{Nein}}    || {{Nein}}     || {{Ja}}      || {{Ja}}      || {{Ja}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Leistungsaufnahme Deepstandby || &amp;lt; 0,5 W     ||  &amp;lt; 0,5 W     ||  &amp;lt; 0,5 W    ||  &amp;lt; 0,5 W    ||  &amp;lt; 0,5 W &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Leistungsaufnahme Betrieb     ||  &amp;lt; 15 W     || &amp;lt; 13 W       || 10 W        || 10 W        || &amp;lt; 13 W&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Netzteil                      || intern      || extern 42 W  || extern 42 W || extern 42 W || extern 42 W  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
1) Beide Steckplätze können mit jeweils einem DVB-S2 / DVB-C/T2 Dual Tuner Modul bestück werden. Hierdurch sind  maximal vier DVB-S2 / DVB-C/T(2) Tuner nutzbar. Gemischtbetrieb mit DVB-C/T(2) und DVB-S2 ist auch möglich. Mit einen DVB-C/T(2) Dual Tuner Modul ist kein Mischbetrieb zwischen DVB-C und DVB-T(2) möglich, da es nur ein Anschluss pro Modul gibt, der intern über zwei Tuner verteilt wird. Mit zwei Tunersteckkarten geht das natürlich schon.&lt;br /&gt;
&lt;br /&gt;
2) Der Tuner Steckplatz kann entweder mit einem DVB-C/T(2) oder einem DVB-S2 Tuner bestückt werden. Dual-Tuner werden nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
3) Der Tuner Steckplatz kann mit allen erhältlichen Tunermodulen des alten Systems (keine [[FBC-Tuner]]) bestückt werden.&lt;br /&gt;
&lt;br /&gt;
4) FBAS und Audio über 3,5mm Klinke&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Alle Angaben ohne Gewähr!&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Tabelle 2 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable mw-datatable&amp;quot; style=&amp;quot;text-align:center&amp;quot;                                 &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; |&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Duo]] [[Vu+ Duo LE|(LE)]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Solo]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Ultimo]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
! style=&amp;quot;background-color:#e0e0e0;width:15em&amp;quot; | [[Vu+ Uno]]&amp;lt;br&amp;gt;(no longer available)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | CPU / RAM !! style=&amp;quot;background-color:#696969;&amp;quot; colspan=&amp;quot;4&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Hersteller     || Broadcom   || Broadcom   || Broadcom   || Broadcom &lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Typ 	         || BCM 7335   || BCM 7325   || BCM 7413   || BCM 7413&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Architektur    || Mipsel     || Mipsel     || Mipsel     || Mipsel&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CPU Takt 	         || 400 MHz    || 333 MHz    || 2x 400 MHz || 2x 400 MHz   &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Flash Typ          || NAND       || NAND       || NAND       || NAND&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Flash Größe        || 128 MB     || 128 MB     || 1 GB       || 128 MB&lt;br /&gt;
|-  &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | RAM 	         || 384 MB     || 256 MB     || 512 MB     || 512 MB&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | PVR !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;4&amp;quot;| &lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | PVR-Ready          || {{Ja}}     || {{Ja}}     || {{Ja}}     || {{Ja}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDD 	         || 2,5&amp;quot;/3,5&amp;quot;  || Extern     || 2,5&amp;quot;/3,5&amp;quot;  || 2,5&amp;quot;/3,5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | SATA 	         || {{Ja}}     || {{Nein}}   || {{Ja}}     || {{Ja}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | eSATA 	         || {{Ja}}     || {{Nein}}   || {{Ja}}     || {{Ja}}  &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Kartenleser / CI !! style=&amp;quot;background-color:#696969;&amp;quot; colspan=&amp;quot;4&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Kartenleser        || 2          || 1          || 2          || 2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Common Interface   || 2          || 2          || 2          || 2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | CI+ zertifiziert   || {{Nein}}   || {{Nein}}   || {{Nein}}   || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Netzwerk !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;4&amp;quot;| &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Ethernet&amp;lt;br /&amp;gt;Fast / Gigabit || {{Ja}} / {{Nein}} || {{Ja}} / {{Nein}} || {{Ja}} / {{Nein}} || {{Ja}} / {{Nein}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | WiFi 2,4 GHz       || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | WiFi 5 GHz         || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick) || {{Nein}} (nur via USB-WLAN Stick)&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | USB / Display!! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;4&amp;quot;| &lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | USB 2.0 	         || 3x USB 2.0    || 2x USB 2.0    || 3x USB 2.0    || 3x USB 2.0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Display            || VFD           || {{Nein}}      || VFD           || VFD&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Tuner !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Mögliche Tuner                        || DVB-S2   || DVB-S2   || DVB-S2/C/T(2)  || DVB-S2/C/T(2)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tunersteckplatz nur für [[FBC-Tuner]] || {{Nein}} || {{Nein}} || {{Nein}}       || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tunersteckplatz altes System          || {{Nein}} || {{Nein}} || 3&amp;lt;sup&amp;gt;1)&amp;lt;/sup&amp;gt; || 1&amp;lt;sup&amp;gt;2)&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tuner fest verbaut                    || 2        || 1        || {{Nein}}       || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Tuner austauschbar                    || {{Nein}} || {{Nein}} || {{Ja}}         || {{Ja}} &lt;br /&gt;
|-   &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Anzahl Tuner                          || 2        || 1        || variabel (1-4) || variabel (1-2)&lt;br /&gt;
|-   &lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Audio !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;4&amp;quot;| &lt;br /&gt;
|-  &lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Audio out analog           || Cinch   || Cinch   || Cinch   || Cinch&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | S/PDIF out                 || optisch || optisch || optisch || optisch&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Video !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Analog Video out &amp;lt;br /&amp;gt;FBAS / SCART / YPbPr || {{Ja}}  / {{Ja}}  / {{Ja}} || {{Ja}}  / {{Ja}}  / {{Ja}} || {{Ja}}  / {{Ja}}  / {{Ja}} || {{Ja}}  / {{Ja}}  / {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDMI-Out                   || {{Ja}}   || {{Ja}}   || {{Ja}}   || {{Ja}}  &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | UHDTV-tauglich             || {{Nein}} || {{Nein}} || {{Nein}} || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDTV-tauglich (DVB-S/S2/C) || {{Ja}}   || {{Ja}}   || {{Ja}}   || {{Ja}}  &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDTV-tauglich (DVB-T2 HD)  || {{Nein}} || {{Nein}} || {{Nein}} || {{Nein}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | HDTV-tauglich (DVB-T2)     || {{Ja}}   || {{Ja}}   || {{Ja}}   || {{Ja}}&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | 3D-GUI fähig               || {{Nein}} || {{Nein}} || {{Ja}}   || {{Ja}}   &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | VP9 fähig                  || {{Nein}} || {{Nein}} || {{Nein}} || {{Nein}}   &lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;color:white; background-color:#696969;&amp;quot; | Sonstiges !! style=&amp;quot;background-color:#696969&amp;quot; colspan=&amp;quot;4&amp;quot;|  &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Abmessungen in mm (BxTxH)     || 380x290x60  || 280x200x50  || 380x290x60  || 340x272x60&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Gewicht (ohne HDD)            || 3,0 kg      || 1,42 kg     || 3,0 kg      || 2,35 kg  &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | externer IR-Empfänger         || {{Nein}}    || {{Nein}}    || {{Nein}}    || {{Nein}} &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Leistungsaufnahme Deepstandby || 1 W         ||  &amp;lt; 0,5 W    ||  1 W        ||  &amp;lt; 0,5 W   &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Leistungsaufnahme Betrieb     ||  20 W       || 12 W        || 25 W        || 15 W &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background-color:#e0e0e0;&amp;quot; | Netzteil                      || intern      || extern      || intern      || intern  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
1) Nur der dritte Steckplatz (r.v.h.) kann mit einem DVB-S2 Dual Tuner Modul bestück werden. Hierdurch sind maximal vier DVB-S2 Tuner nutzbar. Gemischtbetrieb mit DVB-C/T(2) und DVB-S2 ist auch möglich.&lt;br /&gt;
&lt;br /&gt;
2) Ein vorhandener Steckplatz kann mit einem DVB-S2 / DVB-C/T2 Dual Tuner Modul bestück werden. Hierdurch sind maximal zwei DVB-S2 / DVB-C/T2 Tuner nutzbar. &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;Alle Angaben ohne Gewähr!&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Zurück zur [[Hauptseite]]&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.vuplus-support.org/index.php?title=Kanalreferenz&amp;diff=12163</id>
		<title>Kanalreferenz</title>
		<link rel="alternate" type="text/html" href="https://wiki.vuplus-support.org/index.php?title=Kanalreferenz&amp;diff=12163"/>
		<updated>2022-12-04T11:12:58Z</updated>

		<summary type="html">&lt;p&gt;Rdamas: Übersicht Kanalreferenz, Serviceref, sref&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wissenswertes zu Kanalreferenzen ==&lt;br /&gt;
&lt;br /&gt;
=== Aufbau ===&lt;br /&gt;
&lt;br /&gt;
Eine Kanalreferenz (auch: Servicereferenz, sref) wird in Enigma2 zur eindeutigen Referenzierung eines Kanals benutzt; Kanalreferenzen findest Du z.B. in den Bouquets, die die Zusammenstellung der Fernseh- und Radiosender beschreiben, oder in den Filenamen der Picons. Ein Beispiel für eine Kanalreferenz ist (Das Erste HD): &amp;lt;tt&amp;gt;1:0:19:283D:3FB:1:C00000:0:0:0:&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Teile der Servicereferenzen werden im DVB-Standard definiert:&lt;br /&gt;
&lt;br /&gt;
ETSI EN 300 468 V1.16.1 (2019-08)&lt;br /&gt;
https://www.etsi.org/deliver/etsi_en/300400_300499/300468/01.16.01_60/en_300468v011601p.pdf&lt;br /&gt;
&lt;br /&gt;
Kanalreferenzen bestehen aus mehreren Teilen, die durch Doppelpunkte getrennt sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;REFTYPE:FLAGS:STYPE:SID:TSID:ONID:NS:PARENT_SID:PARENT_TSID:UNUSED:PATH:NAME&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bedeutung der einzelnen Teile:&lt;br /&gt;
* &amp;lt;tt&amp;gt;REFTYPE&amp;lt;/tt&amp;gt;: Art des Kanals (Dezimalzahl); Bedeutung:&lt;br /&gt;
  1: DVB-Kanal&lt;br /&gt;
  2: File&lt;br /&gt;
  3: ServiceM2TS&lt;br /&gt;
  4097: ServiceMP3&lt;br /&gt;
  ...&lt;br /&gt;
* &amp;lt;tt&amp;gt;FLAGS&amp;lt;/tt&amp;gt;: (Dezimalzahl) normalerweise &amp;quot;0&amp;quot;, kann aber weitere Bedeutungen haben:&lt;br /&gt;
  64: Marker&lt;br /&gt;
  ...&lt;br /&gt;
* &amp;lt;tt&amp;gt;STYPE&amp;lt;/tt&amp;gt;: (Hexadezimalzahl) Service-Typ:&lt;br /&gt;
  1: Digital-TV, SD, MPEG2&lt;br /&gt;
  2: Digital-Radio MPEG1.2&lt;br /&gt;
  A: Digital-Radio AAC&lt;br /&gt;
  16: Digital-TV, SD, H264&lt;br /&gt;
  19: Digital-TV, HD, H264&lt;br /&gt;
  1F: Digital-TV, HD, HEVC&lt;br /&gt;
  ...&lt;br /&gt;
* &amp;lt;tt&amp;gt;SID&amp;lt;/tt&amp;gt;: (Hexadezimalzahl) Stream-ID.&lt;br /&gt;
* &amp;lt;tt&amp;gt;TSID&amp;lt;/tt&amp;gt;: (Hexadezimalzahl) Transport-Stream-ID.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ONID&amp;lt;/tt&amp;gt;: (Hexadezimalzahl) Originating Network-ID.&lt;br /&gt;
* &amp;lt;tt&amp;gt;NS&amp;lt;/tt&amp;gt;: (Hexadezimalzahl) Namespace&lt;br /&gt;
  EEEE0000: DVB-T&lt;br /&gt;
  FFFF0000: DVB-C&lt;br /&gt;
  alle anderen: Sat-Position in Hex:&lt;br /&gt;
  C00000: C0 = 192 =&amp;gt; Astra 19.2&lt;br /&gt;
* &amp;lt;tt&amp;gt;PARENT_SID&amp;lt;/tt&amp;gt;: &lt;br /&gt;
* &amp;lt;tt&amp;gt;PARENT_TSID&amp;lt;/tt&amp;gt;:&lt;br /&gt;
* &amp;lt;tt&amp;gt;UNUSED&amp;lt;/tt&amp;gt;:&lt;br /&gt;
* &amp;lt;tt&amp;gt;PATH&amp;lt;/tt&amp;gt;: (Optional) Pfad zur Ressource - kann Filesystem oder URL sein.&lt;br /&gt;
* &amp;lt;tt&amp;gt;NAME&amp;lt;/tt&amp;gt;: (Optional) Name der Ressource&lt;br /&gt;
&lt;br /&gt;
Die Namen der Picons werden aus der Kanalreferenz gebildet, indem Doppelpunkte durch Unterstriche ersetzt werden. Der letzte Unterstrich wird einfach weggelassen.&lt;br /&gt;
&lt;br /&gt;
=== lamedb ===&lt;br /&gt;
Die Bestandteile der Kanalreferenzen findest Du auch in der Datei &amp;lt;tt&amp;gt;/etc/enigma2/lamedb&amp;lt;/tt&amp;gt; wieder. Diese Datei wird durch einen Sendersuchlauf aufgebaut.&lt;br /&gt;
&lt;br /&gt;
Die Datei lamedb hat zwei große Bereiche: die Transponder-Liste und die Service-Liste. &lt;br /&gt;
&lt;br /&gt;
In der Service-Liste sind alle gefundenen Sender oder Kanäle in jeweils drei Zeilen gespeichert; als Beispiel wieder der Eintrag für &amp;quot;Das Erste HD&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
  283d:00c00000:03fb:0001:25:0&lt;br /&gt;
  Das Erste HD&lt;br /&gt;
  p:ARD,c:0013ed,c:0213f0,c:0313ed,c:0413f2,c:050001&lt;br /&gt;
&lt;br /&gt;
Die ersten Zeile hat alle Infos für die Kanal-Referenz: &amp;lt;tt&amp;gt;SID:NS:TSID:ONID:STYPE:0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die zweite Zeile beinhaltet den Namen des Kanals, die dritte Zeile enthält den Provider-Namen, gecachte PID&#039;s und CA-PID&#039;s, sowie Flags zur Verschlüsselung.&lt;/div&gt;</summary>
		<author><name>Rdamas</name></author>
	</entry>
</feed>