Yocto UART
Diese Seite beschreibt die Erstellung eines Yocto Image (Kirkstone 4.0.6) für den Raspberry Pi 2 mit Ansteuerung der UART0 als Konsole. Das Entwicklungssystem läuft unter Debian 11 (bullseye).
Ein schneller Einstieg in das Bauen eines Yocto Images ist unter "Yocto Project Quick Build" beschrieben. Zusätzlich zu den dort aufgezählten Paketen für das Entwicklungssystem sollte das Paket bmap-tools zum Schreiben des erzeugten Images <image>.wic.bz2 auf SD-Card installiert werden.
GIT Server
Auf irgendeinem GIT Server sollte ein leeres Repository 'conf' für die yocto Konfiguration angelegt werden. Das erleichtert das Aufsetzen weiterer Entwicklungssysteme und das Update auf eine neuere Version von Yocto.
Yocto clone
Mit den folgenden Befehlen wird der Branch Kirkstone von Yocto geclont, das Directory build angelegt und das oben erzeugte GIT Repository 'conf' geclont.
cd ~ git clone -b kirkstone git://git.yoctoproject.org/poky # Dadurch entsteht das Directory poky (ca. 260 MB) cd ~/poky # noch kein Directory poky/build vorhanden mkdir build cd build # in das aktuelle Directory poky/build das leere Repository 'conf' des GIT-Servers holen git clone git@linux99:/home/git/conf.git
Erste Konfiguration erzeugen
Mit den folgenden Befehlen wird die erste Konfiguration erzeugt und im GIT Repository 'conf' abgelegt.
cd ~/poky source oe-init-build-env # Commit der durch 'source oe-init-build-env' erzeugten ersten Konfiguration cd conf git add *.conf *.cfg git commit -m "initial configuration created by source oe-init-build-env" git push
Layer Raspberry Pi holen
Mit den folgenden Befehlen wird der zum gewählten Yocto Branch passende Layer für den Raspberry geclont, das gewünschte Raspberry Modell ausgewählt, die UART0 aktiviert, der Layer für den Raspberry zu den bitbake Layern hinzugefügt und danach alles wieder im GIT Repository 'conf' abgelegt.
cd ~/poky git clone -b kirkstone git://git.yoctoproject.org/meta-raspberrypi # "MACHINE" konfigurieren. UART einschalten. uart0.dtbo mit ins Image packen. cd build/conf # local.conf so modifizieren MACHINE ?= "raspberrypi2" ENABLE_UART = "1" RPI_KERNEL_DEVICETREE_OVERLAYS:append = " overlays/uart0.dtbo" # Den Layer für den Raspberry in bblayers.conf hinzufügen cd .. bitbake-layers add-layer ~/poky/meta-raspberrypi/ cd conf # Commit ins git repository "conf" git commit -m "configuration for raspberry pi 2 added" git push
Build Image
Mit der genannten Konfiguration wird dann das Image core-image-minimal gebaut:
cd ~/poky/build time bitbake core-image-minimal real 244m4.373s user 0m21.839s sys 0m2.975s
Image auf SD-Card schreiben
Das Image wird anschließend auf die SD-Card geschrieben. "bmaptool" schreibt dabei nur die genutzten Bereiche der Partitionen.
# Image auf SD-Card schreiben (als root) cd ~/poky/build/tmp/deploy/images/raspberrypi2 # Größe core-image-minimal-raspberrypi2.wic.bz2: 12582912 bmaptool copy core-image-minimal-raspberrypi2.wic.bz2 /dev/sdg
Image booten
Das Image bootet auf einem Raspberry Pi 2 in ungefähr 20 Sekunden. Mit minicom sieht das so aus:
Das Entwicklungssystem ist dabei über einen USB-to-serial-TTL-Adapter (K1USB-TTL) so angeschlossen:
GPIO Function GPIO PIN K1USB-TTL Function K1USB-TTL Color Ground 6 Ground black TX 8 RX white RX 10 TX green
Partitionen der SD-Card
Die Partitionierung einer 16GB-SD-Card sieht so aus: