Yocto cmake

Diese Seite beschreibt die Einbindung einer existierenden Anwendung (Buildsystem cmake) in ein Yocto Image (Dunfell 3.1.3).

Nach dem Bauen eines Yocto Images (siehe "Yocto Project Quick Build") hat man erst einmal ein minimales Linux-System mit den üblichen Verdächtigen, aber ohne projektspezifische Anwendungen. Hier die Anwendungen des Yocto Images "core-image-minimal":

Eigene Anwendung

Als Beispiel dient eine einfache Ausgabe vergleichbar 'hello world' auf die Konsole, per C++ Programm 'helloyocto'.

Das Projekt hat folgenden einfachen Aufbau:

Anforderungen

Das Einbinden einer eigenen Anwendung in das Yocto Image soll über Einträge in der CMakeLists.txt erfolgen. Durch einige Git Repositories soll die Einbindung einer eigenen Anwendung auf einem anderen Build-PC oder in eine neuere Yocto-Version leicht möglich sein.

Voraussetzungen

Es muss ein Git Server vorhanden sein, von dem sich die Yocto Tools bitbake und devtool die aktuelle (oder irgendeine andere) Version der Anwendung holen können.

Es sollen sauber getaggte Versionen der Anwendung auf dem Git Server vorhanden sein, damit die Yocto Tools die Anwendung im Image mit der Versionsnummer verwalten können.

Folgende Git Repositories werden genutzt:

CMakeLists.txt für Yocto erweitern

Auf dem Entwicklungs-System soll die Anwendung nicht installiert werden, sondern nur innerhalb des Yocto Image. Die Projektdatei CMakeLists.txt wird deshalb um "install nur bei Crosscompiling" ergänzt, damit ausschließlich Yocto bitbake die ausführbare Datei nach /usr/bin installiert:

message ("Crosscompiling ${CMAKE_CROSSCOMPILING}")
if (${CMAKE_CROSSCOMPILING})
    install(TARGETS ${PROJECT_NAME})
endif()

Wahrscheinlich gibt es noch schönere Environment-Variablen, die man abfragen könnte, z.B. DISTRO_NAME.

Layer erzeugen und hinzufügen

Ein zusätzlicher Layer für die eigene Anwendung "helloyocto" wird wie folgt im Verzeichnis "build" erzeugt und hinzugefügt. Die Beispiel-Rezepte werden danach entfernt:

bitbake-layers create-layer meta-helloyocto
bitbake-layers add-layer meta-helloyocto
rm -fr recipes-example

Rezept erzeugen

Mit den folgenden Kommandos wird im Layer-Verzeichnis "meta-helloyocto" ein für die Anwendung passendes Rezept erzeugt, das nicht angepasst werden muss:

devtool add recipe-helloyocto git@linux4711:/home/quadt/git/quadt/helloyocto.git
devtool finish recipe-helloyocto meta-helloyocto

Image erweitern

Mit den folgenden Kommandos wird das Yocto Image "core-image-minimal" um das Rezept "recipe-helloyocto" mit Hilfe einer bbappend-Datei erweitert:

cd meta-helloyocto
mkdir -p recipes-core/images
# Einfügen der folgenden Zeile in die neue Datei recipes-core/images/core-image-minimal.bbappend
IMAGE_INSTALL += " recipe-helloyocto"

Image bauen

bitbake core-image-minimal

Starten von Yocto

Mit dem folgenden Kommando wird Yocto in der Konsole per Virtualisierungssoftware 'QEMU' gestartet.

runqemu qemux86-64

Starten der Anwendung

Nun findet man die eigene Anwendung 'helloyocto' in /usr/bin und startet sie mit der Eingabe von 'helloyocto'.