Montag, 24. Juni 2024

iRadio im Jahre 2024

iRadio unter bullseye und bookworm

 

ganz unerwartet ist der 3B / 3B+ wieder erhältlich. Mit:

free -m -t

wird angezeigt ob man die 512 MB oder die 1 GB Variante vor sich hat. Die 1107 im Beispiel bedeutet 1 GB RAM:

Booten von USB

Die Raspberry Pi 3, 4 und 5 bieten unter bullseye und bookworm die Option anstatt von der Speicherkarte von USB zu booten. Während bei den Modellen 4 und 5 einfach über:

sudo raspi-config

das boot-Verhalten konfiguriert werden kann muss beim Modell 3 ein spezielles Bit in der Firmware einmalig gesetzt werden. Beim 3B+ sollte es eigentlich von Haus aus gesetzt sein, bei meinem Board war das aber nicht der Fall.

Wie man dazu vorgeht ist im Netz zwar hinreichend beschrieben, ich gehe aber trotzdem darauf ein, weil ich mir die Infos aus verschiedenen Quellen zusammensuchen musste.

Eigentlich wird nur in der config.txt eine Zeile angehängt und dann einmal durchgestartet.

program_usb_boot_mode=1

Es gibt aber eine Falle. Benutzt man für den Eintrag der Zeile einen normalen Editor wie nano (unter Linux) oder Editor (unter Windows) funktioniert der Eintrag nicht! Was aber funktioniert ist die config.txt nicht direkt zu editieren, sondern sie vom Systemprompt aus ergänzen zu lassen. Es wird also erst mal ein beliebiges Raspberry Pi OS auf eine Speicherkarte installiert. Es genügt eine lite-Version. Dann ist erst mal der korrekte Pfad zur config.txt zu ermitteln. Sie kann nämlich je nach OS im Pfad /boot/ oder im Pfad /boot/firmware/ (bookworm) oder im Pfad /bootfs/ liegen.


 

Dies muss bei dem folgenden Terminalbefehl zum Anhängen der Zeile berücksichtigt werden:

echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

Nach dem Neustart wird kontrolliert ob das Bit erfolgreich gesetzt wurde. Wir geben im Terminal ein:

vcgencmd otp_dump | grep 17:

Den Doppelpunkt nicht vergessen! Kommt vom System keine Antwort zurück ist das Bit nicht gesetzt. Wenn es funktioniert hat meldet sich das System mit:

17:3020000a

Nun ist der Raspberry für das booten von USB vorbereitet. Es empfehlen sich aber noch 2 weitere Aktionen die auf die gleiche Weise nacheinander ausgeführt werden.

Die erste Aktion betrifft das Aufheben der USB-Strombegrenzung. Hier gibt es 2 Möglichkeiten. Weil wir nicht wissen welche der beiden greift führen wir beide aus.

Dazu im Terminal eingeben:

echo safe_mode_gpio=4 | sudo tee -a /boot/config.txt

und einmal durchstarten.

das gleiche nochmal mit der Anweisung:

echo max_usb_current=1 | sudo tee -a /boot/config.txt


Der letzte Punkt betrifft das timeout beim booten. Wieder die gleiche Vorgehensweise mit der Anweisung:

echo program_usb_timeout=1 | sudo tee -a /boot/config.txt

Die zusaätzlichen Zeilen dürfen nun wieder entfernt werden.

Der Raspberry Pi kann nun von einem USB-Stick starten, oder von einer Speicherkarte in einem USB-Adapter, oder sogar von einer SSD im USB-Rahmen. Dazu gleich mehr. Zum Aufpielen eines Images eignet sich Win32DiskImager oder Balena Etcher (beides unter Windows). Am liebsten beschreibe ich meine Medien aber mit dem Raspberry Pi Imager, weil man gleich alle möglichen Voreinstellungen übergeben kann. Wer dies nicht kennt betätige mal innerhalb des Imager die Tastenkombination CTRL-SHIFT-X.

 

Das Problem der Abschaffung der rc.local bei bookworm

Unsere iRadio-Installation erzeugt die Datei /etc/rc.local, in der die einzelnen daemons beim Hochfahren des Raspberry gestartet werden. Unter Bookworm wird die rc.local aber nicht mehr berücksichtigt. Bullseye ist davon nicht betroffen. Unser iRadio wird also nicht starten, und mit

htop

sehen wir auch dass keine VLC-Task läuft.

Wir kontrollieren ob die Datei vorhanden ist und setzen auf alle Fälle das Flag zum Ausführen:

sudo chmod +x /etc/rc.local

Dann erzeugen wir eine Datei:

sudo nano /etc/systemd/system/rc-local.service

mit folgendem Inhalt:

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target

der Dienst rc.local wird enabled und gestartet:

sudo systemctl enable rc-local

sudo systemctl start rc-local.service

 

Soweit die Theorie. Die rc.local wird nämlich vermutlich mit einem Kompatibilitätsproblem abbrechen und vlcd und damit iRadio kommt nicht auf die Beine.

[18.010429] rc.local[544]: grep: /root/.config/vlc/vlcrc: Datei oder Verzeichnis nicht gefunden

[28.193417] rc.local[697]: /etc/rc.local: 43: nc: not found

[FAILED] Failed to start /etc/rc.local Compatibility.

netcat wird nachinstalliert:

sudo apt-get install netcat-openbsd

oder:

sudo apt-get install netcat-traditional

evtl. ist vorher ein

sudo apt --fix-broken install

nötig

Damit verschwinden beide Fehlermeldungen und iRadio startet.

 

Als letzten Punkt will ich eine mögliche Konfiguration durchspielen

Es handelt sich um die ältere und schon mehrfach realisierte Idee ein iRadio zu bauen mit einer X11-Cassettensimulation, welches sich auf Mediabetrieb umschalten lässt und dann (auf Wunsch) in Zufallsreihenfolge Mediaclips im mp4-Format abspielt. Dazu habe ich ein Raspberry Pi OS auf ein 120 GB SSD-Laufwerk aufgespielt. Es wird eine Bootpartition von ein paar MB und eine Linux-Partition von ca. 5 GB erstellt.

Beim ersten Start von Raspbian würde nun automatisch ein resize starten welches die Linuxpartition auf den physikalischen Speicher erweitern würde.

Das habe ich unterlassen und die Wechselplatte an einen Linux-PC aufgesteckt. Mit dem tool gparted habe ich die Linuxpartition auf 16 GB erweitert und den Rest der Platte mit einer neuen ExtFAT-Partition versehen. Auf diese werde ich meine Video-Dateien aufspielen.

Die Wechselplatte vereint nun das OS und die Mediendateien. Eine SD-Karte oder einen weiteren Datenträger gibt es nicht. Zum Abspielen der Mediadateien dient iRadio mit mediaplayerd.

sdl2 wird nachinstalliert

sudo apt-get install libsdl2-*

und iRadio durchläuft seine normale Installation:

git clone https://github.com/BM45/iRadio.git

cd /home/pi/iRadio

sudo ./install.sh

sudo reboot

 

Einrichten des Mediaplayers

der mediaplayerd wird vorbereitet indem in der Datei iRadio/mediaplayerd/mpvlcd die Zufallsoption ergänzt wird:

--random \

danach wird er gebaut:

cd /home/pi/iRadio/mediaplayerd

und der Aufruf in die /etc/rc.local eingetragen:

/usr/bin/mediaplayerd & 

Zur Funktionsweise: der Mediaplayer wird automatisch aktiv wenn ein Datenträger als device sda1 mit Mediendateien eingesteckt wird. Zieht man ihn ab wird wieder auf Radiobetrieb zurückgeschaltet. Mit einer modifizierten mediaplayerd.cxx kann eine gpio-Umschaltung eingebaut werden.

In meinem speziellen Fall benutze ich aber keinen Stick sondern eine USB-Wechselplatte. Mit der Anweisung:

sudo blkid -o list -w /dev/null

sehe ich dass meiner Mediapartition als device sda5 zugewiesen wurde:


in der Datei /home/pi/iRadio/mediaplayerd/chkmount.sh ändere ich sda1 auf sda5:

DEVICE=/dev/sda5

und baue den mediaplayerd neu. Nun wird meine Wechselplatte für die Mediadateien benutzt.

 

Kassettensimulation

mit diesem Punkt sind wir schnell durch. Wir bauen die Kassettensimulation (bzw. Cassettensimulation) mit:

cd /home/pi/display/x11/cassettensim/

sudo nano ./build.sh

und tragen den Aufruf:

startx /home/pi/iRadio/display/x11/cassettensim/sdlskale &

in der rc.local ein.


Einbinden des HDMI-Bildschirm

Hier scheiden sich jetzt die Geister. Während ich unter bullseye das 5" Aufsteckdisplay ganz normal einbinden kann habe ich für bookworm noch keine Lösung gefunden. Die config.txt wird nicht mehr berücksichtigt, und LCD-show greift genausowenig. Mit bookworm wurde ein neues Grafiksystem eingeführt (wayland). Aber auch wenn ich in der raspi-config auf x11 umschalte läßt sich das Display nicht konfigurieren. Mit dem Effekt dass meine Simulation mit einer viel zu hohen Auflösung läuft:

die Medienwiedergabe ist zwar nicht betroffen, da die Videos passend skaliert werden. Aber sie tut sich schwer auf die Beine zu kommen. Es läuft zwar gleich der Ton der Mediadateien, aber das Bild schaltet von der Cassettensimulation erst nach mehreren Titeln auf die Mediateien um 
(wenn überhaupt), und es gibt kurze Knackgeräusche zwischendurch.

Unter bullseye ist die Grafikkonfiguration einfach. Es werden nur diese Zeilen in die /boot/config.txt eingetragen:

max_usb_current=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0
hdmi_drive=1

 

Fazit

mit bullseye läßt sich iRadio wie gewohnt einrichten, und alles was ich bisher durchgetestet habe funktioniert. Bei bookworm sind ein paar Klimmzüge notwendig und speziell für die Grafik sind (noch) nicht alle Probleme gelöst. Wenigstens muss man nicht auf ein Uralt-OS ausweichen, da bullseye immer noch aktuell ist. Ganz neue Möglichkeiten eröffnen sich bei bullseye und bookworm mit der boot-Möglichkeit per USB. Für stromhungrige Wechselplatten empfiehlt sich aber dringend ein eigenes Netzteil. Die USB-Ports des Raspberry sind nur begrenzt belastbar.

iRadio ist noch nicht ganz tot. Und vielleicht bin ich der einzige der es noch nutzt. Für mich ist es immer noch einzigartig und die Ergebnisse überzeugen.

 

 


 


 

Keine Kommentare:

Kommentar veröffentlichen