Wo nun das Konstruktive erledigt ist, soll es mit den speziellen softwaretechnischen Belangen weitergehen. Es muss der USB-Treiber für den Gadget-Mode aktiviert werden, dazu zuerst die Datei /boot/config.txt editieren und an deren Ende die Zeile

 dtoverlay=dwc2

anfügen. Die /etc/modules erthält den Eintrag

 dwc2

Diesen Eintrag auskommentieren, sollte er etwa schon nach der „i2c-dev“-Zeile stehen. Nach dem nächsten Start sollte der dwc2-Treiber geladen sein.

Um einen Massenspeicher zu erhalten, müssen wir unserem Gadget zuerst ein Container-File verpassen. So zweigt man 4 GB von der SD-Karte des Pi Zero ab und erzeugt ein leeres Binärfile „piusb.bin“:

 $ sudo dd bs=1M if=/dev/zero of=/piusb.bin count=4096

Anschließend nutzt man „mkdosfs“, um es als FAT32-Filesystem zu formatieren:

 $ sudo mkdosfs /piusb.bin -F 32 -I

Jetzt kann es gemountet und permanent nach fstab eingetragen werden. Wir mounten hier nach /mnt/usb_share :

 $ sudo mkdir /mnt/usb_share

In die Partitionstabelle unter /etc/fstab am Ende die Zeile eintragen:

 /piusb.bin /mnt /usb_share vfat users,umask=000 0 2

Mittels

 $ sudo mount -a

laden wir die modifizierte Tabelle nach.

Falls noch nicht gemacht, sollte man jetzt den Pi herunterfahren und schon einmal an einen USB-Port vom Laptop oder an ein TV-Gerät anstecken. Unser Stick holt sich nun die Stromversorgung von der USB-Buchse vom Gerät. Da dafür schon alles vorbereitet wurde, greifen wir spätestens jetzt per ssh von einem entfernten Rechner im heimischen Netzwerk zu. Auf einem Windows-Rechner kann man dafür Putty verwenden, auf einem Linux-Rechner öffnet man ein Terminal und gibt wie gewohnt

 $ ssh pi@ [piname]

und im Anschluss das Passwort ein.

Wer jetzt den Massenspeichermode testen möchte, kann nun schon ein File nach /mnt/usb_share downloaden:

 $ cd /mnt /usb_share
 $ wget https://github.com/raspberrypi/documentation/blob/master/installation/images/noobs.png
 $ sync

Damit haben wir uns eine PNG-Datei von einem Server in unser gemountetes Verzeichnis geholt. Jetzt muss der Massenspeichermodus aktiviert werden:

 $ sudo modprobe g_mass_storage file=/piusb.bin stall=0 ro=1

Und es wird richtig spannend, denn wenn bisher alles funktioniert hat, sollte der Smart-TV nun die Bilddatei erkennen oder am Laptop ein File-Dialog aufpoppen, der das Volume (bei uns 4 GB groß) und die Datei darin anzeigt. Geschafft – der Host zeigt den Inhalt des Smartsticks an

Den smarten Stick nun von Ferne mit immer neuen Bildern oder anderen Inhalten zu bestücken, das kann man nicht nur per ssh bewerkstelligen. Mit dem Pi als Unterbau hat man da alle Möglichkeiten, die man auch bei anderen Netzwerkrechnern hat.

So ist es nun möglich, unseren Stick als Samba-Share ins Netzwerk einzubinden, so dass man ihn als Freigabe im Netzwerkordner auf anderen Rechnern finden kann. Dort kann man dann einfach per Dateiexplorer auf dem Desktop neue Dateien einstellen. Oder man macht das textbasiert auf der Kommandozeile, gerne auch automatisiert per Skript. Und per ftp geht das Ganze auch.

Bleibt zu organisieren, wie man die Auffrischung der Inhalte dem Host mitteilt, ohne den Stick vom jeweiligen Gerät abzuziehen und wieder anzustecken, denn auf einem Smart-TV beispielsweise wird nur nach dem Anstecken die Anzeige aktualisiert. So einen Mechanismus kann man auch selbst bauen, aber es gibt bereits gute Lösungen dazu.

Deshalb wollen wir auf ein Python-Skript, auf Git von David Honess veröffentlicht, zurückgreifen, das sich relativ einfach installieren und unter /usr/local/share ablegen lässt:

 $ cd /usr /local/share
 $ sudo wget http://rpf.io/usbzw -O usb_share.py
 $ sudo chmod +x usb_share.py

Außerdem benötigen wir noch die Python-Library für den Watchdog:

 $ sudo apt-get install python-watchdog

Was passiert in diesem Skript? Der Pfad /mnt/usb_share , unter welchem unser Massenspeicher gemounted ist, wird mittels Observer überwacht und der Event-Handler hängt beim Kopieren oder Löschen von Dateien das Volume neu ein, genau so, wie wir es beim ersten Mal mittels modprobe oben schon anfänglich gemacht haben.

Dazu muss das Ganze im Background-Service laufen und soll deshalb noch die entsprechenden Einträge in einem neuen File (bei uns usbshare.service ) unter /etc/systemd/system bekommen:

 $ cd /etc/systemd/system
 $ sudo nano usbshare.service

Nun per Editor eintragen:

 [Unit]
 Description=USB Share Watchdog
 
 [Service]
 Type=Simple
 ExecStart=/usr/local/share/usb_share.py
 Restart=always
 [Install]
 WantedBy=multi-user.target

Abschließend müssen wir den Service noch registrieren und einschalten:

 $ sudo systemctl daemon-reload
 $ sudo systemctl enable usbshare.service
 $ sudo systemctl start usbshare.service

Damit haben wir nun bewerkstelligt, dass im Abstand von 30 Sekunden ein Reconnect zum Gerät erfolgt, an das wir unseren Smartstick gesteckt haben. Smart-TV oder elektronischer Bilderrahmen zeigen neue Bilder zuverlässig an.