Yocto:SDK:HD51
Die Basis um Images für aktuelle Hardware zu erstellen, auf der Neutrino-HD/MP läuft, wurde bereits für stlinux-basiernde Geräte beschrieben. Damit ist es generell möglich, mit bestimmten Linux-Grundkenntnissen, sein eigenes Image zu erzeugen, bzw. gibt Distributoren ein solides Werkzeug in die Hand, um Releases mit einer zuverlässigen Paktierung für Updates bereitzustellen und zu warten. Das Yocto-Build ist dafür quasi ein Standard und besitzt hierfür eine recht ausgereifte, gewartete und nachhaltig durchdachte Struktur. Für Entwickler ist es allerdings notwendig einen flexiblen Arbeitsbereich zu haben, um Applikationen zu entwickeln, zu warten und zu testen. Auch hierfür bietet Yocto passende Mittel. Dieser Artikel soll erklären, wie man eine solche Umgebung (SDK) aufsetzt und benutzt.
Inhaltsverzeichnis
- 1 Vorbereitungen
- 2 SDK erzeugen
- 3 SDK verwenden
- 4 SDK aktuell halten
- 5 Weblinks
Vorbereitungen
Diese Anleitung wurde getestet mit OpenSuse 42.3. Für Debian basierende Distributionen sollten im wesentlichen die bereits hier genannten Schritte zur Vorbereitung zutreffend sein.
Die hier verwendete Basis für die Erstellung einer Arbeitsumgebung basiert auf der Arbeit von Community-Mitgliedern. Auf Vollständigkeit, inhaltliche und rechtliche Korrektheit sowie Funktionsfähigkeit kann daher keine Garantie gegeben werden. Fehlerberichte, Meinungen und Vorschläge sollten daher an die Betreuer der jeweiligen Buildsysteme bzw. Layer gerichtet werden.
Pakete installieren
Für Debian basierte Systeme (getestet mit Wheezy und Jessie in 32/64bit).
$ sudo apt-get update
$ sudo apt-get install libsdl1.2-dev chrpath git build-essential automake texinfo
Für OpenSuse (getestet mit OpenSuse 42.3/15.0 64bit)
$ sudo zypper install git make gcc-g++ diffstat texinfo chrpath libSDL-devel python3-curses zip glew-devel freeglut-devel libid3tag-devel libmad-devel libogg-devel libsigc++2-devel flac-devel
libvorbis-devel yasm
Bei Bedarf kann man weitere benötigte Pakete auch mit Hilfe der Suse Downloadsuche direkt nachinstallieren:
https://software.opensuse.org/search
Des Weiteren benötigt man ein extra Verzeichnis im $HOME
in dem man alle nötigen Verzeichnisse samt zusätzlicher Unterverzeichnisse anlegen kann. Im folgenden wird $HOME/yocto
verwendet, das kann natürlich jeder seinen Gepflogenheiten anpassen. Achtung, ein späteres Verschieben ist nicht einfach möglich da innerhalb der erzeugten Toolchain mit absoluten Pfaden gearbeitet wird!
$ mkdir ~/yocto && cd ~/yocto
Innerhalb dieses Verzeichnisses sollte man direkt auch einen gemeinsamen Downloadordner für die möglichen verschiedenen Systeme anlegen, dies erspart später mehrfaches Herunterladen der diversen Source Pakete. Wer ein entsprechendes Verzeichnis für derartige Downloads schon besitzt kann natürlich dieses auch per Symlink einbinden (oder in der späteren Konfiguration den entsprechenden Pfad angeben).
$ mkdir download
SDK erzeugen
Option 1 Download SDK
Hierbei wird nur ein von der Größe her moderates Installationsskript für das SDK heruntergeladen und nachfolgend bei der Erzeugung der Entwicklungsumgebung alles nachgeladen, was benötigt wird. Diese Variante ist recht simpel und mit einer geeigneten Internetverbindung relativ schnell erledigt. Wer lieber selbst bauen will, sollte mit der Option 2 fortfahren. Das Ergebnis ist aber im Wesentlichen gleich.
SDK Installations-Skript herunterladen
$ cd Downloads
$ wget https://tuxbox-images.de/images/hd51/sdk/oecore-x86_64-cortexa15hf-neon-vfpv4-toolchain-ext-nodistro.0.sh
--2017-11-10 17:08:08-- https://tuxbox-images.de/images/hd51/sdk/oecore-x86_64-cortexa15hf-neon-vfpv4-toolchain-ext-nodistro.0.sh
Auflösen des Hostnamen »tuxbox-images.de (tuxbox-images.de)«... 217.160.11.114
Verbindungsaufbau zu tuxbox-images.de (tuxbox-images.de)|217.160.11.114|:443... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 28509099 (27M) [text/x-sh]
In »»oecore-x86_64-cortexa15hf-neon-vfpv4-toolchain-ext-nodistro.0.sh«« speichern.
100%[============================================================================================================================>] 28.509.099 1,53MB/s in 18s
2017-11-10 17:08:27 (1,49 MB/s) - »»oecore-x86_64-cortexa15hf-neon-vfpv4-toolchain-ext-nodistro.0.sh«« gespeichert [28509099/28509099]
$
Anschließend das Installationsscript ausführbar machen:
$ chmod 755 oecore-x86_64-cortexa15hf-neon-vfpv4-toolchain-ext-nodistro.0.sh
- Anschließend wie unter SDK installieren beschrieben fortfahren!
Hinweis: Yocto bietet auch diverse Standard-SDK's für verschiendene Plattformen an siehe: http://downloads.yoctoproject.org/releases/yocto/. Das hier verwendete SDK ist speziell für axHD51 vorgesehen.
Option 2 Eigenbau SDK
Hierbei wird quasi das komplette SDK mit Bitbake selbst erzeugt und anschließend das erzeugte SDK installiert. Im Gegensatz zur oben genannten Downloadmethode sind hier mehrere Schritte notwendig. Dies nimmnt natürlich mehr Zeit in Anspruch.
Schritt 1: Benötigte Repos klonen
Klonen des Yocto Poky Projektes in den Buildsystemordner
$ git clone git://git.yoctoproject.org/poky.git poky
Klonen der Meta-Layer-Repos für Neutrino und der jeweiligen Plattform in den poky-Ordner
In diesem Fall wird als Beispiel die AX/Mut@nt HD51 Plattform verwendet.
$ cd poky
$ git clone https://github.com/neutrino-hd/meta-hd51.git
$ git clone https://github.com/neutrino-hd/meta-neutrino.git
Schritt 2: Umgebung einrichten
Zuweisen der Vorlage für die Beispielkonfiguration
$ export TEMPLATECONF=meta-hd51/example_neutrino
Umgebung für "build-hd51" mittels dem "Environment Skript" erzeugen
Es werden dabei automatisch die benötigten Umgebungsvariablen und ein Buildordner erzeugt und in diesen gewechselt
$ . ./oe-init-build-env build-sdk-hd51
Schritt 3: Anpassen der Konfiguartion
- mit einem Editor deiner Wahl, die Konfiguration bearbeiten
$ kate conf/local.conf
Falls gewünscht, einen Downloadordner bestimmen. Dieser wird standardmäßig im Yocto-Ordner als yocto/download angelegt. Man kann auch einen Link auf einen bereits vorhandenen Ordner setzen, was durchaus Sinn macht, denn die Downloads dürften sehr umfangreich sein. Ein vorhandenes Archiv kann sich daher als vorteilhaft erweisen.
DL_DIR = "/path/to/your/archiv"
- Hosttyp zuweisen, auf dem dieses SDK lokal verwendet werden soll. Hier als Beispiel x86_64:
#SDKMACHINE ?= "i686" SDKMACHINE ?= "x86_64" #SDK_LOCAL_CONF_WHITELIST = "SSTATE_MIRRORS" SDK_INCLUDE_PKGDATA = "0" #SSTATE_MIRRORS = "file://.* http://my.server.com/path/to/sstate-cache/PATH"
- Entwicklung am Tuxbox-Neutrino erfordert diesen Eintrag, dies ist auch der Standard:
FLAVOUR ="mp"
- Je nachdem was die Hostmaschine verträgt, kann man hier die Anzahl der Threads und Parallel-Makes angeben.
# Determine how many tasks bitbake should run in parallel: BB_NUMBER_THREADS ?= "4" # Determine how many processes make should run in parallel when running compile tasks: PARALLEL_MAKE ?= "-j 4"
DIESE EINSTELLUNG MUSS BLEIBEN!
# What image to build ? IMAGENAME = "neutrino-image"
- um mögliche Prüfsummenfehler zu vermeiden kann es erforderlich sein, diese Einträge auszukommentieren:
#UNINATIVE_CHECKSUM[x86_64] #SSTATE_MIRRORS += " file://universal/(.*) file://universal-4.9/\1 file://universal-4.9/(.*) file://universal-4.8/\1"
Die anderen Einstellungen sollten sich von selbst ergeben.
Schritt 4: SDK bauen
mit bitbake das SDK bauen
$ bitbake -c populate_sdk_ext neutrino-image
Dies dauert eine Weile. Dabei werden jede Menge Tasks ausgeführt. Wenn alles glatt geht, ist das benötigte Installationsskript für das SDK unter diesem Ordner zu finden:
tmp/deploy/sdk/oecore-x86_64-cortexa15hf-neon-vfpv4-toolchain-nodistro.0.sh
Installationsskript ausführbar machen
$ chmod 755 oecore-x86_64-cortexa15hf-neon-vfpv4-toolchain-nodistro.0.sh
SDK installieren
Je nachdem ob das Installationsskript frisch erzeugt wurde oder wie hier beschrieben heruntergeladen wurde, jetzt in das Verzeichnis wechseln, in dem es sich befindet.
Installationsscript ausführen
Den Anweisungen folgen. Einige Eingaben können leer bleiben, um Standardwerte setzen zu lassen. Falls nötig, ist sudo erforderlich. Das Zielverzeichnis sollte man aber an einer für sich günstigen Stelle setzen, also möglichst schon etwas voraus planen.
$ cd <Pfad/zum/Installations-Skript-Ordner>
$ ./oecore-x86_64-cortexa15hf-neon-vfpv4-toolchain-nodistro.0.sh
OpenEmbedded SDK installer version nodistro.0
=============================================
Enter target directory for SDK (default: /home/<USER<>/sdk):
You are about to install the SDK to "/home/<USER<>/sdk". Proceed[Y/n]? y
Extracting SDK......................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
...
Nach der Installation, sollte in etwa diese Struktur vorhanden sein:
$ your@hostname:~/yocto/poky/build-sdk-hd51/tmp/deploy/sdk$ tree -L 4 /home/<USER<>/sdk
/home/<USER>/sdk
├── environment-setup-cortexa15hf-neon-vfpv4-oe-linux-gnueabi <- Das ist das SDK environment script
├── site-config-cortexa15hf-neon-vfpv4-oe-linux-gnueabi
├── sysroots
│ ├── cortexa15hf-neon-vfpv4-oe-linux-gnueabi
.
.
.
└── version-cortexa15hf-neon-vfpv4-oe-linux-gnueabi
SDK Umgebung erzeugen
In das frisch erzeugte SDK-Verzeichnis wechseln
$ /home/<USER>/sdk
Environment Script ausführbar machen (falls erfordelich)
$ chmod 755 environment-setup-cortexa15hf-neon-vfpv4-oe-linux-gnueabi
Um zu testen, wie die aktuelle Umgebung eingerichtet ist, kann man die $PATH Variable ausgeben lassen. Ohne das ausgeführte Skript würde das etwa so aussehen:
$ echo $PATH
$ /home/<USER>/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin
Environment Script ausführen
$ . ./environment-setup-cortexa15hf-neon-vfpv4-oe-linux-gnueabi
Was ist passiert? Das Skript sollte nun die Umgebung angepasst haben und man kann erahnen, worauf das Ganze hinausläuft.
$ echo $PATH
$ /home/<USER>/devel/sdk/hd51/sysroots/x86_64-oesdk-linux/usr/bin:/home/<USER>/devel/sdk/hd51/buildtools/sysroots/x86_64-oesdk-linux/usr/bin:/home/<USER>/devel/sdk/hd51/tmp/sysroots/x86_64/usr/bin:/home/<USER>/devel/sdk/hd51/tmp/sysroots/x86_64/usr/sbin:/home/<USER>/devel/sdk/hd51/tmp/sysroots/x86_64/bin:/home/<USER>/devel/sdk/hd51/tmp/sysroots/x86_64/sbin:/home/<USER>/devel/sdk/hd51/tmp/sysroots/x86_64/usr/bin/../x86_64-oesdk-linux/bin:/home/<USER>/devel/sdk/hd51/tmp/sysroots/x86_64/usr/bin/arm-oe-linux-gnueabi:/home/<USER>/devel/sdk/hd51/tmp/sysroots/x86_64/usr/bin/arm-oe-linux-musl:/home/<USER>/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin
Immer wenn man das SDK nutzen möchte und dafür eine neue Shell-Sitzung geöffnet hat, muss dieses Environment-Skript ausgeführt werden. Die Umgebung bleibt dann solange erhalten, bis diese Sitzung geschlossen wird!
Umgebungsvariablen
Neben der bereits angepassten $PATH-Umgebung, sind nun auch einige weitere Umgebungsvariablen verfügbar:
SDKTARGETSYSROOT - The path to the sysroot used for cross-compilation PKG_CONFIG_PATH - The path to the target pkg-config files CONFIG_SITE - A GNU autoconf site file preconfigured for the target CC - The minimal command and arguments to run the C compiler CXX - The minimal command and arguments to run the C++ compiler CPP - The minimal command and arguments to run the C preprocessor AS - The minimal command and arguments to run the assembler LD - The minimal command and arguments to run the linker GDB - The minimal command and arguments to run the GNU Debugger STRIP - The minimal command and arguments to run 'strip', which strips symbols RANLIB - The minimal command and arguments to run 'ranlib OBJCOPY - The minimal command and arguments to run 'objcopy OBJDUMP - The minimal command and arguments to run 'objdump AR - The minimal command and arguments to run 'ar NM - The minimal command and arguments to run 'nm TARGET_PREFIX - The toolchain binary prefix for the target tools CROSS_COMPILE - The toolchain binary prefix for the target tools CONFIGURE_FLAGS - The minimal arguments for GNU configure CFLAGS - Suggested C flags CXXFLAGS - Suggested C++ flags LDFLAGS - Suggested linker flags when you use CC to link CPPFLAGS - Suggested preprocessor flags
SDK verwenden
Umgebung direkt nutzen
Quellcodedateien könnten praktisch damit bereits direkt kompiliert werden. Auch IDE's könnten damit eingerichtet werden. Befände man sich in dieser Umgebung, würde z.B. dieses Kommando ein Programm für die gewünschte Plattform erzeugen:
$ $CC main.cpp -o test
Auf Basis dieser angepassten Umgebung könnten bereits vorhandene Makfiles oder ganze Buildsysteme angepasst werden. Dabei müssten diese Umgebungsvariablen an das Buildsystem durchgereicht werden. Dies kann je nach Aufbau der Makefiles oder der Buildsystemstruktur sogar bereits funktionieren. Gut durchdachte Systeme sollten das durchaus ermöglichen, andernfalls kann es auch einen gewissen Aufwand bedeuten.
Arbeiten mit devtool
Wie bereits erwähnt wurde, bietet das Yocto-SDK Lösungen an, um gezielt an (fast) jeder beliebigen Applikation, die im Buildsystem übersetzt wird, zu arbeiten. Im SDK wird dafür zwar auch Bitbake genutzt, jedoch wird ein dafür speziell zugeschnittenes Script namens devtool verwendet. Dieses Script setzt zwar in gewissem Umfang auf Bitbake auf, stellt aber speziell für das SDK verwendbare Kommandos bereit. Die direkten Bitbake-Kommandos stehen daher in der SDK Umgebung nicht mehr zur Verfügung.
Vorbereitung
Konfiguration anpassen
Die Konfiguration des SDK befindet sich nun im SDK-Ordner unter:
sdk-hd51/conf/local.conf
Im Wesentlichen wurde die ursprüngliche Konfiguration des Buildsystems in die SDK-Konfiguration übernommen, jedoch sollte man dies zumindest nachprüfen und wenn nötig einige Anpassungen vornehmen, die den lokalen Gegebenheiten entsprechen. Wurde das SDK mit dem heruntergeladenen Installationsskript erzeugt, sollte man dies auf jeden Fall tun, da hier bestimmmte Einstellungen des Verteilers noch vorhanden sind und mit Sicherheit nicht zutreffen. Wenn alles passt, weiter mit dem nächsten Schritt.
Image bauen
$ devtool build-image
Das dauert eine Weile. Hier wird ähnlich wie mit dem Befehl
bitbake neutrino-image
ein lauffähiges Image mit den zugehörigen Paketen erstellt und eine abgewandelte Version des Buildsystems erzeugt.
Arbeitsbereich einrichten
Devtool hat nun quasi ein modifiziertes Duplikat des Buildsystems erstellt. Wie oben schon bemerkt wurde, ist das "normale" Yocto-Buildsystem, mehr für den Bedarf von Distributoren vorgesehen. Man kann damit zwar auch entwicklen, aber die Arbeit am Quellcode dürfte im Vergleich zu gewohnten Buildsystemen teilweise recht träge verlaufen.
Mit dem SDK werden flexiblere Möglichkeiten angeboten. Es können z.B. erzeugte Pakete sofort auf die Zielhardware geladen und getestet werden. Weiterhin wird nicht immer generell ein Paket bei jedem angestoßenem Buildvorgang komplett neu gebaut, sondern mit bestimmten Kommandos nur das, was notwendig ist. Auch bei Abbrüchen wird immer dort fortgesetzt, wo dieser Abbruch statt fand. Das ist wesentlich handlicher und entspricht etwa dem Ablauf, den man von bisherigen Buildsystemen oder beim Ausführen von Make her kennt.
Eine Echtzeitverfolgung der Makevorgänge wird standardmäßig zwar nicht angezeigt, aber dafür werden bei Build-Abbrüchen standesgemäß sofort entsprechende Ausgaben angezeigt, die mögliche Fehler sofort erkennen lassen. Ein dauerhaftes und ausführliches Logging mit Anzeige wo diese Logs im Falle von Build-Fehlern zu finden sind, ermöglicht zudem eine genaue Durchsicht aller gemachten Vorgänge und zwar getrennt nach Konfigurierung, Kompilierung, Paketierung usw.
Die Imageerstellung erfolgt konform zum normalem Bauen mit Bitbake. Änderungen an Quellcodes werden normalerweise direkt übernommen. Der dafür notwendige Befehl
devtool build-image
wurde ja schon erwähnt.
Das Erzeugen von neuen Receipes, wird durch Nutzung durch Templates, welche man mit Devtool erzeugen kann, vereinfacht. Auch die Layer befinden sich in der neu erstellten Struktur und können dort gewartet werden. Diese befinden sich allerdings quasi in reinem Quellzustand, also ohne Anbindung an eine Versionsverwaltung. Dies kann man aber selbst nachholen, indem man die betreffenden Layer nur durch die GIT-Repositories ersetzt. Man klont nur einfach die Git-Repositories an deren Stelle.
├── hd51
│ ├── bitbake-cookerdaemon.log
│ ├── buildtools
...
│ ├── cache
...
│ ├── conf
...
│ ├── downloads
...
│ ├── environment-setup-cortexa15hf-neon-vfpv4-oe-linux-gnueabi
│ ├── layers
│ ├── site-config-cortexa15hf-neon-vfpv4-oe-linux-gnueabi
│ ├── sstate-cache
...
│ └── 'workspace'
│ ├── appends
│ ├── conf
│ ├── README
│ └── 'sources'
└── oecore-x86_64-cortexa15hf-neon-vfpv4-toolchain-ext-nodistro.0.sh
...
Quelldaten importieren
Wie man sieht, gibt es nun ein "workspace"-Verzeichnis, welches einen Unterordner namens "sources" beinhaltet. Darin befinden sich normalerweise die Quelldaten der Applikationen an denen gearbeitet wird. Dieser Bereich ist noch leer und muss noch befüllt werden. Wenn man z.B. an Neutrino arbeiten möchte, folgendes eingeben:
$ devtool modify neutrino-mp-ax51 $ devtool modify libstb-hal
Devtool wird den zugehörigen Quellcode, der in der Regel als GIT-Repository vorliegt, in den Workspace-Ordner "umsiedeln".
Den Status des Arbeitsbereiches, also welche Applikationen derzeit in Verwendung sind, kann man so abfragen:
$ devtool status
Entwickeln
Quelldaten ändern
In den jeweiligen Git-Repos, kann man jetzt seine Änderungen am Quellcode wie gewohnt vornehmen und neu kompileren.
...
│ └── workspace
...
│ └── sources
│ └── 'neutrino-mp-ax51'
...
Neutrino kompilieren
$ devtool build neutrino-mp-ax51
Wie dieser Befehl schon vom Namen her sagt, wird damit Neutrino einschließlich aller Abhängigkeiten gebaut bzw. die dazugehörigen Pakete erzeugt. Das Ergebnis muss aber erst noch zum Testen auf die Zielhardware geladen werden.
Neutrino auf Ziel-Hardware laden
$ devtool deploy-target -s neutrino-mp-ax51 root@<BOX-IP>
oder auch kombiniert:
$ devtool build neutrino-mp-ax51 && devtool deploy-target -s neutrino-mp-ax51 root@<BOX-IP>
Alle benötigten Daten, welche in entsprechenden Paketen enthalten sind, werden damit via SSH auf die Zielhardware geladen. Die Option -s bewirkt, dass man verfolgen kann, welche Daten gerade hochgeladen werden. Anschließend kann man direkt auf der Hardware testen.
Für Binaries sei noch zu beachten, dass diese standardmäßig ungestrippt hochgeladen werden. Das bedeutet, das man unter Umständen längere Ladezeiten in Kauf nehmen muss und genügend Speicherplatz auf der Zielhardware einplanen sollte. Vorausgesetzt, man benötigt keine ungestrippten Daten, hilft die Option -S, um nur gestrippt Binaries hochzuladen:
$ devtool deploy-target -s -S neutrino-mp-ax51 root@<BOX-IP>
Die Option -S gibt es aber unglücklicherweise erst in neueren Yocto-Versionen. Derzeit werden für die CST-Geräte aber eben keine aktuellen Versionen (z.Z. nur krogoth) verwendet und eine Portierung ist auch nicht in Aussicht, da die neueren Versionen unter anderem keinen Support mehr für die veralteten Kernel und uclibc-Support leisten. Zudem stellen die closed-Source Treiber ein Problem dar, die mit den neuen Yocto-Images nicht kompatibel wärwn.
Für Geräte wie die AX51 sind die Ladezeiten allerdings zu vernachlässigen und Speicher ist normalerweise auch großzügig vorhanden. Bei CST Hardware sollte man daher wegen des knappen Speichers nur mit einem möglichst schnellem USB-Stick arbeiten und nicht den Flash nutzen. Bei den CST-HD2 Serien ist die Ladezeit zwar noch moderat, aber wegen unterschiedlicher Flashbestückung der einzelenen HD2 Modelle, sollte man auch hier genau auf die Speichergrößen achten!
TIP:
devtool deploy-target nutzt Zugriff via SSH auf die Box und es wäre daher recht unpraktisch, immer wieder nach einem Passwort gefragt zu werden. Um dies abzustellen kann man sich auf der Zielhardware via SSH einloggen und das Passwort entfernen:
~$ passwd -d root
Neutrino von Ziel-Hardware entfernen
$ devtool undeploy-target neutrino-mp-ax51 root@<BOX-IP>
Dies entfernt die devtool-Modifikationen auf der Zielhardware und stellt den ursprünglichen Zustand auf der Zielhardware wieder her.
Aktuelles Image erzeugen
$ devtool build-image
An einem beliebigem Paket entwickeln
Man kann quasi jedes Paket aus dem Buildsystem separat bearbeiten, debuggen und selbst daran entwickeln. Wie weiter oben schon wie für Neutrino angedeutet wurde, wird dafür der gewünschte Quellcode des jeweiligen Recipes mittels modify in den eigenen Arbeitsbereich unter ../workspace/sources umgesiedelt.
$ devtool modify [Recipe]
Dies ist allerdings auch notwendig, um gezielt nur ein bestimmtes Recipe bauen zu wollen. Das Recipe selbst wird dabei nicht in den Workspace übertragen, sondern nur der Quellcode. Sollten Abhängigkeiten bestehen, werden diese aus den dafür bereits vorgesehenen Recipes weiterhin eingebunden. Es sei denn, es sind auch dort Anpassungen notwendig oder gewollt, dann muss man diese natürlich ebenso in den Arbeitsbereich holen.
Um ein Solches Recipe wieder aus dem Arbeitsbereich abzukoppeln, wird reset verwendet.
$ devtool reset [Recipe]
Dabei wird das übertragene Recipe allerdings nicht gelöscht, was unter Umständen fatal wäre, sondern es wird im Buildsystem nur ein Verweis entfernt, der auf das Recipe im Workspace verweist. Man kann also bei Bedarf wieder darauf zurückgreifen. Außerdem werden die gemachten Änderungen nicht zurückgeführt. Diese bleiben im Workspace.
Um Änderungen zu übertragen wird update-recipe verwendet.
Auf der Ziel-Hardware debuggen
Um direkt auf der Zielhardware debuggen zu können, gibt es natürlich den GDB. Falls GDB sich noch nicht auf der Zielhardware befindet, kann man GDB über die Paketverwaltung (opkg) auf der Zielhardware installieren, oder man holt sich GDB in den Workspace, baut es separat und überträgt es auf die Zielhardware:
$ devtool build gdb && devtool deploy-target gdb root@<BOX-IP>
Danach kann man GDB direkt auf der Zielhardware nutzen.
Zu beachten wäre noch, dass unter Umständen bestimmte Abhängikeiten, die evtl. parallel über die Layer-Repos angepasst wurden oder neu dazu gekommen sind, falls es notwendig ist in den Workspace geladen werden sollten. Natürlich müssen diese, falls es erforderlich ist, auch auf die Zielhardware geladen werden. Die Notwendigkeit dafür ergibt sich normalerweise immer dann, wenn bestimmte Libs fehlen oder sich geändert haben und dadurch beim Kompilieren Buildfehler auftreten oder Fehlfunktionen während der Ausführung auf der Zielhardware passieren. Alternativ wäre auch eine entprechende Anpassung der Paketverwaltung auf der Zielhardware möglich, die auf die Pakete der Entwicklungsumgebung Zugriff hat und damit aktuell gehalten werden kann.
Pakete erzeugen
$ devtool package [Paketname]
Devtool hat noch weitere Möglickeiten auf Lager. Eine Übersicht gibt
$ devtool -h
bzw. für die Unterkommandos
$ devtool <Unterkommando> -h
Die Vorgehensweise, um neue oder bestehende Receipes oder Layer zu erstellen oder zu warten, ist teilweise ähnlich. Weitere Informationen dazu findet man in der Devtool-Dokumentation.
SDK aktuell halten
Diese Funktion ist derzeit noch nicht verfügbar.
Weblinks
- aktuelle SDK-Downloads https://tuxbox-images.de/images/hd51/sdk
- https://www.yoctoproject.org/documentation
- https://wiki.yoctoproject.org/wiki/Developer_Workflow_Improvements
- https://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html
- http://www.yoctoproject.org/docs/2.4/sdk-manual/sdk-manual.html
- http://downloads.yoctoproject.org/releases/yocto/yocto-2.1/toolchain/