Der Raspberry Pi4 bezieht seinen Strom via USB-C - gleichzeitig lässt sich der USB-C Port aber auch zur Datenübertragung benutzen. Das lässt sich ganz wunderbar kombinieren, wenn man z.B. keinen Monitor dabei hat oder zwischen den verschiedenen Modellen (mal wieder) der HDMI Steckertyp gewechselt wird. Kein Micro-HDMI Kabel auffindbar? Kein Problem!

Zur Ersteinrichtung der USB Konsole benötigt man zumindest einmal Zugang per Netzwerk zum Raspberry Pi4. Also: Auf die SD-Karte ein aktuelles Betriebssystem nach Anleitung installieren und das Gerät per Ethernet-Kabel mit dem heimischen Switch oder Router verbinden. Im Boot Verzeichnis der frischen SD-Karte noch eine leere Datei mit dem Namen “ssh” anlegen, SD-Karte in den Pi4 einlegen und booten. Ab jetzt lässt sich der frisch installierte Rasbperry Pi zumindest per Netzwerk konfigurieren.
Um eine serielle Console per USB-C zu aktivieren braucht es nur weniger Schritte:
Schritt 1: USB Gadget Treiber (Host Mode) aktivieren
Damit der Device-Tree vom Pi die USB Gadget Treiber und Devices kennt, teilen wir ihm das per Overlay zur Bootzeit mit. Dazu an das Ende der /boot/config.txt die Zeile “dtoverlay=dwc2” einfügen. Damit der Pi das passende Kernel Modul lädt, an das Ende der /etc/modules die Zeile “dwc2” hinzufügen - das wars. Alternativ führt man folgende zwei Befehle aus:
echo 'dtoverlay=dwc2' | sudo tee -a /boot/config.txtecho 'dwc2' | sudo tee -a /etc/modules
Ab sofort meldet sich der Rasbperry Pi4 per USB-C nach einem reboot als serielles Schnittstellengerät:
Schritt 2: Einen virtuellen Terminal (tty) auf dem USB Port starten
Nehmt einen beliebigen getty um auf die eben erstellte serielle USB-Console (/dev/ttyGS0) Daten zu schreiben. Ich möchte mich über die serielle Console am Raspberry Pi4 anmelden, also benötige ich eine Möglichkeit um Daten über das Termin ein- und auszugeben.
Das debian-basierende Betriebssystem mit systemd bringt dazu einen agetty mit sich, der dazu völlig ausreichen ist. Dem agetty muss nur gesagt werden, das er dazu /dev/ttyGS0 benutzen soll. Ich habe mich entschieden die mitgelieferte /lib/systemd/system/serial-getty@.service zu benutzen und kopiere sie nach /etc/systemd/system/serial-getty@ttyGS0.service. Damit weiß systemd qalles, was es zu wissen braucht um den erfolgreich zu starten. Danach noch den Service aktivieren und ab sofort startet systemd den agetty automatisch. Mehr Hintergrund zu serielle Consolen und systemd sind hier ausführlicher dokumentiert.
sudo cp /lib/systemd/system/serial-getty@.service /etc/systemd/system/serial-getty@ttyGS0.servicesudo systemctl enable serial-getty@ttyGS0.service
Schritt 3: Sich am Raspberry Pi4 über eine serielle USB-C Schittstelle anmelden
Sobald der agetty läuft (service starten oder ab hier noch 1x rebooten), meldet sich auf der anderen Seite der Raspberry Pi4 über USB-C:
Wer statt Windows mit Linux oder MacOS unterwegs ist und den Raspberry Pi4 dort anschließt, findet nach einen Boot des kleinen Rechners unter /dev neue Geräte, z.B. ttyusbmodem o.ä., was sich z.B. mit screen ansprechen lässt:
Wer sich als root am Raspberry Pi4 über die serielle USB-C Console anmelden möchte, muss die /etc/securetty noch dementsprechend um /dev/ttyGS0 erweitern.