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:
-
conf.git: Grundkonfiguration für Yocto. MACHINE etc.
-
helloyocto.git: Repository der eigenen Anwendung.
-
meta-helloyocto.git: Repository des Layers und des Rezeptes (recipe) der eigenen Anwendung. Erweiterung Image "core-image-minimal".
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'.