Yocto*-Builds für das IoT Devkit – Beispiel: Hinzufügen der Java* JRE

Auf Anfrage eine erweiterte deutsche Übersetzung zu dem Blog https://software.intel.com/en-us/blogs/2014/04/04/some-hints-on-yocto-builds-for-iot-devkit-example-adding-java-jre. 

IoT Devkit

Die folgende Beschreibung bezieht sich auf das IoT Devkit Yocto* Image für Intel(R) Galileo, die unter https://software.intel.com/en-us/iotdevkit frei verfügbar ist.

Yocto* Build Umgebung

Das Yocto* Projekt wurde im Jahr 2010 ins Leben gerufen, um eine FOSS Buildumgebung für embedded Linux Systeme zu etablieren (s.a. http://www.yoctoproject.org/). So wird auch das IoT Devkit Linux unter Yocto* gebaut. Alle für den Bau benötigten Dateien befinden sich auf http://git.yoctoproject.org/cgit/cgit.cgi/meta-intel-iot-devkit/. Mit Hilfe des Yocto* Build Systems lässt sich ein image mit relativ wenig Aufwand erstellen und für den eigenen Bedarf anpassen.

Für Details über die Verwendung des Yocto* Build Systemes sei auf das online Benutzerhandbuch verwiesen http://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html. 

 

Lohnt sich der Aufwand?

Für jemand, der nicht im Bereich eingegettete Systeme gearbeitet hat mag es sonderbar anmuten, ein Linux Image selbst zu bauen. Häufig wird nicht einmal der Linux Kernel angepasst und selbst gebaut, geschweige denn ein komplettes Image. Eine Anpassung der Linux Installation erfolgt typischerweise durch Installation von Paketen im rpm-, deb-, oder ipk-Format.

Und tatsächlich gibt es auch für das IoT devkit Yocto* Linux ein repository mit verschiedenen Paketen, das durch die folgende Modifikation (bzw. Erstellen) der Datei /etc/opkg/iotdk.conf zur Verfügung steht (siehe http://software.intel.com/sites/default/files/managed/f1/49/building_yocto_and__ipks.pdf (Abschnitt "Using the Repository with IOTDL builds")  :


# cat >> /etc/opkg/iotdk.conf <<EOF

	src/gz all http://iotdk.intel.com/ipk/all

	src/gz i586 http://iotdk.intel.com/ipk/i586

	src/gz clanton http://iotdk.intel.com/ipk/clanton

	EOF

	

Im Anschluss lassen sich Pakete folgendermaßen installieren:


# opkg install <package name>

	

Die Liste aller verfügbarer Pakete lässt sich beispielsweise folgendermaßen ausgeben:


# opkg list

	

Software, für die keine Pakete im repository verfügbar sind, kann beispielsweise in der Eclipse-Umgebung des Live USB Debian Development image gebaut werden, das auf http://software.intel.com/en-us/iotdevkit liegt.

Allerdings gibt es durchaus Gründe, die dafür sprechen, in einer eigenen Yocto* Build Umgebung zusätzliche Pakete zu bauen. Mit dieser Thematik befasst sich der Rest dieses Blogs am Beispiel von Oracle* Java* JRE.

Zusätzliche Pakete in Yocto* bauen - Beispiel Oracle* Jave* JRE

 

Erstellen der Yocto* Build Umgebung

Um das IoT devkit Linux unter Yocto* zu erstellen, sollte mindestens 40 GB Plattenplatz verfügbar sein. Zunächst werden die Quelltexte kopiert:


	git clone git://git.yoctoproject.org/meta-intel-iot-devkit

Dies kann in ein beliebiges Verzeichnis geschehen. Hier Yocto Build Root $YBR:

 YBR = /Quark/meta-intel-iot-devkit/ 
 

 

Folgende Schritte skizzieren das weitere Vorgehen:

  1. Überprüfung und ggfs Modifikation der Konfiguration in ${YBR}/build/conf/local.conf. 
  2. Umgebungsvariablen setzen mittels
     source ${YBR}/iot-devkit-init-build-env 
  3. Dabei wird pwd auf ${YBR}/build gesetzt. Innerhalb dieses Verzeichnisses stehen das von OpenEmbedded* stammende tool bitbake zur Verfügung um Pakete oder auch ein ganzes Image zu bauen. Z.B.
     bitbake iot-devkit-image 
  4. Der Bau des images kann mehrere Stunden in Anspruch nehmen - das fertige Image befindet sich im Anschluss in dem Verzeichnis ${YBR}/build/tmp/deploy/images und die dazugehörigen ipk packages in ${YBR}/build/tmp/deploy/ipk. 

 

Verfügbare Yocto* Layers

Das Yocto* Build System baut sich hierarchisch aus verschiedenen layers auf, in denen die einzelnen Pakete organisiert sind. Auf    http://layers.openembedded.org/layerindex/branch/master/layers/ befindet sich eine ganze Anzahl fertig konfigurierter Layer unter anderem auch der meta-oracle-java Layer, den wir im Folgenden verwenden. Ggfs muss dieser modifiziert werden. Folgende Schritte waren zum Bau dieses Layers nötig:

  1. git clone des Layers nach ${YBR}.
  2. Hinzufügen von meta-oracle-java zu der BBLAYERS Variablen in ${YBR}/build/conf/bblayers.conf
  3. Hinzufügen (hier whitelisting) der proprietären Oracle Java Lizenz in ${YBR}/build/conf/local.conf  LICENSE_FLAGS_WHITELIST += "oracle_java"
  4. Da der Download von der in meta-oracle-java/recipes-devtools/oracle-java/oracle-jse-jre-i586_1.7.0.bb angegebenen Web-Adresse nicht funktionierte, hatte ich den tarball manuell heruntergeladen und dann direkt vom lokalen System "geladen". Eine entsprechende Modifikation des URI Eintrages in meta-oracle-java/recipes-devtools/oracle-java/oracle-jse-jre-i586_1.7.0.bb ist erforderlich (hier SRC_URI = "file:///Quark/meta-intel-iot-devkit/meta-oracle-java/jre-7u51-linux-i586.tgz"). Ebenso müssen die md5 Prüfsumme sowie der LIC_FILES_CHKSUM  "license hash" in meta-oracle-java/recipes-devtools/oracle-java/oracle-jse.inc angepasst werden.
    Tipp: die neuen Hashwerte werden in einer Fehlermeldung ausgegeben, wenn zunächst bitbake mit den unveränderten Hashwerten gestartet wird.

Im Anschluss an diese Schritte sollte der Layer bitbake bekannt sein


	$ bitbake-layers show-layers

	layer                 path                                      priority

	==========================================================================

	meta                  /Quark/meta-intel-iot-devkit/meta         5

	meta-oe               /Quark/meta-intel-iot-devkit/meta-oe      6

	meta-iot-devkit       /Quark/meta-intel-iot-devkit/meta-iot-devkit  6

	meta-yocto            /Quark/meta-intel-iot-devkit/meta-yocto   5

	meta-intel            /Quark/meta-intel-iot-devkit/meta-intel   5

	meta-clanton-bsp      /Quark/meta-intel-iot-devkit/meta-clanton-bsp  6

	meta-galileo          /Quark/meta-intel-iot-devkit/meta-galileo  9

	meta-hob              /Quark/meta-intel-iot-devkit/meta-hob     1

	meta-oracle-java      /Quark/meta-intel-iot-devkit/meta-oracle-java  6

	

und das JRE mittels 

 $ ${YBR}/bitbake oracle-jse-jre-i586 

gebaut werden können.

Falls der Vorgang erfolgreich war, befindet sich das neue Paket im Anschluss in ${YBR}/build/tmp/deploy/ipk. Dieses kann auf das Galileo Zielsystem übertragen und mittels opkg installiert werden. 

Zum Schluss noch der Test der erfolgreichen JRE Installation 


	# /usr/jre1.7.0_51/bin/java hallo      

	Hallo Welt

	

 

 

 

For more complete information about compiler optimizations, see our Optimization Notice.
Tags: