Yocto:ImageBuild:Stlinux
Der User seife hat diverse Recipies für das Yocto Buildsystem erstellt die es ermöglichen ein Neutrino-MP für verschiedene Settopboxen zu erstellen. Momentan kann man USB Images und entsprechende Softwarepakete für die Receiver der 1. Generation (armv6 basierend) von Coolstream, für die SH4 basierten Boxen mit dem Prozessortypen STI7111 und STI7162, für die Tripledragon und den Raspberry (nicht Version 2) erstellen.
Inhaltsverzeichnis
Vorbereitungen
Für Debian basierte System (momentan getestet mit Wheezy und Jessie in 32/64bit) sind folgende Pakete vor dem Setup von Yocto nötig.
$ sudo apt-get update
$ sudo apt-get install libsdl1.2-dev chrpath git build-essential automake
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 Downloaden der diversen Source Pakete. Wer ein enstprechende Verzeichnis für derartige Downloads schon besitzt kann natürlich dieses auch per Symlink einbinden (oder in der späteren Konfiguration den entsprechnden Pfad anegben).
$ mkdir download
Due STLinux Boxen benötigen eine Firmware für den Audio- und Videodekoder! Diese sind nicht Bestandteil von Yocto oder der Recipes von seife! Diese Firmware kann aus der Originalfirmware kopiert werden oder man bemüht die Internet Suchmaschine seiner Wahl!
Damit das Buildsystem komplette funktionsfähige Images erstellen kann benötigt man die audio.elf
und die video.elf
. Diese werden im Buildsystem über die Variable BINARY_STSLAVE_FW_PATH
referenziert. Dieses zeigt im default auf /data/stslave_fw/${MACHINE}
was allerdings außerhalb des Homeverzeichnis liegen würde. Wir können das umschiffen indem wir die Firmware innerhalb des eben erstellten Downloadordner ablegen und später in der Konfiguration dies dem Buildsystem mitgeben. Da das Recipe auch noch die Zielplattform auswertet und dies an die Variable BINARY_STSLAVE_FW_PATH mit anhängt müssen wir nun innerhalb vom Ordner download/
noch einen Ordner spark/
erstellen und dort die Firmware ablegen.
$ mkdir download/spark
$ cp /Pfad/zu/audio.elf download/spark
$ cp /Pfad/zu/viedio.elf download/spark
Erstsetup Yocto für STLinux (Spark) Boxen
Da die benötigten Buildtools die durch Yocto zur Verfügung gestellt werden per Git Tree verwaltet werden, können wir diese einfach per Git klonen. Beim Yocto Projekt heißt dieser Git Tree "poky" und es gibt noch zahlreiche andere Git Tree's beim Yocto Projekt. Um die möglichen verschiedenen Systeme lokal später auseinander halten zu können werden wir aber den Git Tree in ein anders benanntes Verzeichnis pullen, es empfiehlt sich den Treenamen von Upstream plus die benutze Plattform in die Benamung einfliesen zu lassen. Für die ST basierten Boxen benutzt diese Anleitung den Namen 'yocto-poky-stl'.
$ git clone http://git.yoctoproject.org/git/poky yocto-poky-stl
Nach dem Pullen wechselt man in den Git Tree und wechselt dort auf den Branch 'dizzy', dies ist der aktuell als stabil geltende Branch von Yocto Poky.
$ cd yocto-poky-stl
$ git checkout -b dizzy origin/dizzy
Auschecken der Neutrino-MP relevanten Git Tree's
Direkt nach dem Wechseln des Yocto Branches können nun zwei benötigte Git Verzeichnisse geklont werden die der Benutzer seife erstellt hat und pflegt. Dies geht recht einfach und gewohnt per git Kommando.
$ git clone https://github.com/seife/meta-stlinux.git
$ git clone https://github.com/seife/meta-neutrino-mp.git
Erstellen und Anpassen der Konfiguration
Dieser Schritt ist sehr wichtig da sonst keine Pakete und Images erstellt werden können, wir müssen quasi Yocto bekannt machen was es wie bauen soll. Ohne den folgenden Schritt hat unser System keine gültige Konfiguration! Zum Erstellen einer allgemein gültigen Konfiguration führt folgende Zeile aus.
$ . ./oe-init-build-env build-stl
Dies sourced die Datei 'oe-init-build-env' und übergibt dieser als Argument 'build-stl', was, wie der Name schon vermuten lässt, unser Build Verzeichnis sein soll. Ihr solltet dabei folgenden Output sehen.
### Shell environment set up for builds. ###
You can now run 'bitbake <target>'
Common targets are:
core-image-minimal
core-image-sato
meta-toolchain
adt-installer
meta-ide-support
You can also run generated qemu images with a command like 'runqemu qemux86'
user@host:~/yocto/yocto-poky-stl/build-stl
Das Skript erstellt benötigte Variablen und erweitert auch die PATH Variable für die späteren Kommandos. Wenn Ihr obige Ausgabe nicht seht und ebenfalls auch nicht Verzeichnis ~/yocto/yocto-poky-stl/build-stl
steht habt Ihr etwas falsch gemacht!
Nachdem nun eine Grundkonfiguration vorhanden ist muss diese um diverse Notwendigkeiten erweitert werden, wie zum Beispiel die Zielplattform oder andere optionale Parameter. Dazu muss die Datei conf/local.conf
(mit Sicht innerhalb des lokalen Verzeichnisses) angepasst werden. Folgende Zeilen erstellen die nötigen Information für das Yocto System. Achtung, bitte beachtet das die Variable DL_DIR
mit dem richtigen Pfad ergänzt wird!
$ cat << EOF >> conf/local.conf
### DON'T CHANGE ANYTHING HERE UNLESS YOU KNOW WHAT YOU DOING!!!
### Config for STLinux based boxes
MACHINE = "spark"
### Prefered package system
PACKAGE_CLASSES = "package_ipk"
### Additional image feature, we want a package management
EXTRA_IMAGE_FEATURES += "package-management"
### Needed for using cached build informations
PRSERV_HOST = "localhost:0"
### Adopt these settings to your needs!
### Setup the seperate download folder here! Use your username instead of [YOUR_USERNAME] !!!
DL_DIR ?= "/home/[YOUR_USERNAME]/yocto"
### Setup a local mirror if wanted
#SOURCE_MIRROR_URL ?= "file:///home/[YOUR_USERNAME]/src/Archive"
### Uncomment if you want to use the mirror
#INHERIT += "own-mirrors"
## if you want to use ccache...
#INHERIT += "ccache"
## save some space by cleaning up after every build
#INHERIT += "rm_work"
### If you have the firmware {audio,video}.elf not in /data/stslave_fw/${MACHINE} ...
### then you can adjust the variable BINARY_STSLAVE_FW_PATH to a appropriate folder.
### Don't forget, the recipe is appending a ${MACHINE} (remind: we are using 'spark'!)
### later to the folder you adjust here!!!
BINARY_STSLAVE_FW_PATH="${DL_DIR}"
EOF