Docker auf RevPi Geräten verwenden

Docker kannst Du grundsätzlich auf allen RevPi Geräten verwenden. In diesem Tutorial zeigen wir Dir, wie Du auf dem RevPi Core und dem RevPi Connect innerhalb eines Docker‑Containers mit Tools wie z. B. piTest auf I/O‑Module zugreifen kannst. Mit Python oder C kannst Du dafür ganz einfach direkt im Prozessabbild lesen und schreiben.

Unter Verwendung von Python und dem Benutzer “pi” gehst Du dazu folgendermaßen vor:

Docker installieren

Wie in “Install Docker Engine on Debian“ beschrieben, kannst Du Docker aus dem apt‑Repository, mit lokalen Paketen oder mit einem von Docker bereitgestellten Skript installieren.

Aus dem apt-Repository installieren

  • Aktualisiere den apt-Paketindex.
    sudo apt-get update
  • Installiere die benötigten Tools.
    sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
  • Füge den offiziellen GPG-Schlüssel von Docker hinzu.
    curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  • Füge das offizielle apt-Repository von Docker hinzu.
    echo "deb [arch=armhf signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • Aktualisiere den apt-Paketindex erneut.
    sudo apt-get update
  • Installiere Docker.
    sudo apt-get install docker-ce docker-ce-cli containerd.io

Mit Convenience-Skript installieren

  • Hole Dir das “Convenience-Skript” für die Docker-Installation.
    curl -fsSL https://get.docker.com -o get-docker.sh
  • Führe das Skript aus.
    sudo sh get-docker.sh

Das kann nun einige Minuten dauern – ein guter Zeitpunkt, z. B. mal die Fenster zu öffnen und dem Kopf frischen Sauerstoff zu gönnen.

  • Überprüfe dann die Docker-Engine mit “hello world”.
    sudo docker run hello-world
  • Füge z. B. den Benutzer “pi” zur Docker-Gruppe hinzu, um Docker als Nicht-Root-User zu benutzen:
    sudo usermod -aG docker pi
  • Melde Dich aus der Konsole ab und wieder an, um die Benutzereinstellung zu aktivieren:
    exit

Auf die I/O-Module zugreifen


#/bin/bash
#$1: file
#$2: offset
#$3: length
#$4: value
function writeByte() {
printf “$(printf ‘\\x%02X’ $4)” | dd of=”$1″ bs=1 seek=$2 count=$3 conv=notrunc &> /dev/null
}
#$1: file
#$2: offset
#$3: length
function readByte() {
od -t x1 -j “$2” -N “$3” -Ad “$1”
}
echo “write 0 to address $1 in host $(hostname)…”
writeByte /dev/piControl0 $1 1 0
echo “read address $1 in host $(hostname):”
readByte /dev/piControl0 $1 1
echo
sleep 1
echo
echo “write 1 to address $1 in host $(hostname)…”
writeByte /dev/piControl0 $1 1 1
echo “read address $1 in host $(hostname):”
readByte “/dev/piControl0” $1 1
  • Führe ein Docker-Image (z. B. Debian) mit “–dev=/dev/piControl0” aus, um den Zugriff auf die Geräteknoten im Container herzustellen.
    docker run -i -t --device=/dev/piControl0 -v /home/pi/io.sh:/io.sh debian bash /io.sh 70

Beim Ausführen dieses Befehls sollte die LED einmal blinken und die Ausgabe sieht folgendermaßen aus:
write 0 to address 70 in host 43b83b9dd777... (Hostname des Containers)
read address 70 in host 43b83b9dd777:
0000070 00
(Wert der Variable)
0000071
write 1 to address 70 in host 43b83b9dd777...
read address 70 in host 43b83b9dd777:
0000070 01
(Wert der Variable)
0000071

Der Parameter für io.sh ist der Offset (Adresse) des Prozessabbilds, der entsprechend der Konfiguration der IO-Module mit dem Verweis “Full Control by using PiControl” variabel ist. Hier wird der Offset 70 für die Ansteuerung der wie oben konfigurierten LED verwendet.

Das hier dargestellte Shell-Skript ist vereinfacht und soll die Grundidee aufzeigen. Wir empfehlen Dir, im realen Anwendungsbereich Python und C wegen ihrer viel größeren programmatischen Fähigkeiten zu verwenden.

Weiterführende Informationen findest Du auch unter:

Full Control by using PiControl

Mit Python auf das Prozessabbild zugreifen:
Video: https://youtu.be/cz163tcQCsM
Code: https://revolutionpi.com/de/download/1608/