====== Raspberry Pi ====== Was man noch zum RPi dazu sagen sollte ist, das dieser nicht nur diesen ganzen Multimedia Schnick-schnack kann. Sondern viel mehr sind es die GPIO Pin's mit denen sich eben viele schöne Sachen realisieren lassen, wenn man kreativ ist. Zur Hausautomatisierung oder zum einfachen auslesen von Sensoren und Motorsteuerung. Hier ist der Raspberry vielen anderen MiniPC's, die teilweise im USB-Stick Gehäuse daher kommen, überlegen. Oft wird der RPi mit anderen MiniPC's verglichen und es kommt am Ende des Vergleichs raus, der mit den dicksten CPU ist der bessere. Aber der RPi hat eben ganz andere Qualitäten, mit viel Anschluss Potential und mittlerweile eine große Community welches nicht zu unterschätzen ist. ===== Infos über Hardware ===== * CPU lscpu * Netzwerkkarte ethtool * Speicher RAM meminfo * SD-Card I/O * Performance Messung ==== Temperatur, Takt & Spannung ==== Die Temperatur lässt sich über die Shell ganz einfach und schnell über folgendes Kommando auslesen: vcgencmd measure_temp Zurückgegeben wird z.B. folgendes: temp=47.6'C Mit vcgencmd kann man übrigens nicht nur die Temperatur der CPU, sondern auch Spannung und Takt auslesen: vcgencmd measure_volts Bzw. vcgencmd measure_clock arm ==== onboard WLAN Kernel Modul ==== Es wurde der WLAN Chip BCM43143 verbaut, welcher 2,4 GHz, b/g/n unterstützt. ~ $ modinfo brcmfmac filename: /lib/modules/4.14.50-v7+/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac/brcmfmac.ko license: Dual BSD/GPL description: Broadcom 802.11 wireless LAN fullmac driver. author: Broadcom Corporation firmware: brcm/brcmfmac4373-sdio.bin firmware: brcm/brcmfmac4356-sdio.bin firmware: brcm/brcmfmac4354-sdio.bin firmware: brcm/brcmfmac43455-sdio.bin firmware: brcm/brcmfmac43430-sdio.bin firmware: brcm/brcmfmac43430a0-sdio.bin firmware: brcm/brcmfmac4339-sdio.bin firmware: brcm/brcmfmac43362-sdio.bin firmware: brcm/brcmfmac4335-sdio.bin firmware: brcm/brcmfmac43341-sdio.bin firmware: brcm/brcmfmac43340-sdio.bin firmware: brcm/brcmfmac4334-sdio.bin firmware: brcm/brcmfmac4330-sdio.bin firmware: brcm/brcmfmac4329-sdio.bin firmware: brcm/brcmfmac43241b5-sdio.bin firmware: brcm/brcmfmac43241b4-sdio.bin firmware: brcm/brcmfmac43241b0-sdio.bin firmware: brcm/brcmfmac43143-sdio.bin firmware: brcm/brcmfmac4373.bin firmware: brcm/brcmfmac43569.bin firmware: brcm/brcmfmac43242a.bin firmware: brcm/brcmfmac43236b.bin firmware: brcm/brcmfmac43143.bin srcversion: 80D355F77AD3A822E27B771 alias: usb:v04B4p0BDCd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0A5Cp0BDCd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v043Ep3101d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v04B4pBD29d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v13B1p0039d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0A5CpBD27d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0A5CpBD1Fd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0A5CpBD17d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0A5CpBD1Ed*dc*dsc*dp*ic*isc*ip*in* alias: sdio:c*v02D0d4373* alias: sdio:c*v02D0d4356* alias: sdio:c*v02D0d4354* alias: sdio:c*v02D0dA9BF* alias: sdio:c*v02D0d4345* alias: sdio:c*v02D0dA9A6* alias: sdio:c*v02D0d4339* alias: sdio:c*v02D0d4335* alias: sdio:c*v02D0dA962* alias: sdio:c*v02D0dA94D* alias: sdio:c*v02D0dA94C* alias: sdio:c*v02D0d4334* alias: sdio:c*v02D0d4330* alias: sdio:c*v02D0d4329* alias: sdio:c*v02D0d4324* alias: sdio:c*v02D0dA887* depends: brcmutil,cfg80211 intree: Y name: brcmfmac vermagic: 4.14.50-v7+ SMP mod_unload modversions ARMv7 p2v8 parm: txglomsz:Maximum tx packet chain size [SDIO] (int) parm: debug:Level of debug output (int) parm: p2pon:Enable legacy p2p management functionality (int) parm: feature_disable:Disable features (int) parm: alternative_fw_path:Alternative firmware path (string) parm: fcmode:Mode of firmware signalled flow control (int) parm: roamoff:Do not use internal roaming engine (int) parm: ignore_probe_fail:always succeed probe for debugging (int) ===== SD Karte für das Raspberry Pi vorbereiten ===== ==== Download und entpacken ==== Die offiziellen Images können von der Raspberry Pi Webseite [[http://www.raspberrypi.org/downloads]] geladen werden. Die Images befinden sich in einer zip-Datei, welche optional mit sha1sum archlinux-hf-2013-02-11.zip überprüft werden kann, indem der vom Befehl zurück gegebene Hex-Wert mit dem Wert auf der Raspberry Pi Webseite verglichen wird. Die Werte sollten dabei exakt gleich sein. Die img-Datei kann entpackt werden mit unzip archlinux-hf-2013-02-11.zip nun erscheint die img-Datei im aktuellen Verzeichnis. ==== Das Image kommt auf die SD-Karte oder USB-Speicher ==== Um herauszufinden welches Device unsere SD-Karte ist kann man den Kommando fdisk -l anwenden. Fdisk zeigt mit der Option ''-l'' eine Auflistung aller verfügbaren Speichergeräte. Meine SD-Karte habe ich als ''/dev/sdd'' identifiziert. Das Image wird mit ''dd'' auf die komplette Karte geschrieben, dazu wird unsere Karte entladen(unmount). Was gemountet ist kann man mit den Befehl ''mount'' oder ''df -h'' sehen. Da auf meiner Karte 2 Partitionen sind, werde ich beide Partitionen un-mounten. umount /dev/sdd1 umount /dev/sdd2 Anschließend kann das schreiben des Images auf die Karte erfolgen. dd bs=4M if=archlinux-hf-2013-02-11.img of=/dev/sdd Oder gleichzeitiges entpacken und anschließendes schreiben: unzip -p 2019-07-10-raspbian-buster.zip | sudo dd of=/dev/sdX bs=4M conv=fsync bzw. falls es als xz komprimiert wurde: xzcat 2023-12-05-raspios-bookworm-arm64.img.xz | dd of=/dev/sdb status=progress mit folgenden ging es mit raspios-bookworm-arm64.img.xz nicht(Boot-Partition zeigte nur komische Zeichen als Dateinamen): xzcat openSUSE-ARM-LXQT-raspberrypi4.aarch64.raw.xz | dd bs=4M of=/dev/sdX iflag=fullblock oflag=direct status=progress Die Blockgröße von 4MB funktioniert in der Regel immer, wenn nicht, versuch es mit 1MB, auch wenn 1M erheblich länger dauern wird. Der ''dd'' Kommando gibt keine Status Informationen zurück, eine Möglichkeit Informationen über den Status von ''dd'' zu erhalten ist ''pkill -USR1 -n -x dd''. Zum Schluß kann mit dem ausführen des ''sync'' Kommando sichergestellt werden das alle Daten auf die Karte geschrieben worden sind. ==== Partition vergrößern ==== Die images sind immer in 2 GB Größe verfügbar, bei einer 8GB Karte werden nur 2 GB genutzt. Deshalb kann man nun die Partition auf der SD-Karte vergrößern um den vollen verfügbaren Platz zu bekommen. Dies kann man unter Raspbian später auch automatisch machen lassen, hier wird das manuelle vorgehen trotzdem noch einmal beschrieben. Die 2. Partition /dev/sdd2 ist die Daten Partition auf der SD-Karte. Mit ''fdisk -l /dev/sdd'' lässt man sich vorher einene Überblick ausgeben. root@iglu:/# fdisk -l /dev/sdd Platte /dev/sdd: 7964 MByte, 7964983296 Byte 246 Köpfe, 62 Sektoren/Spur, 1019 Zylinder, zusammen 15556608 Sektoren Einheiten = Sektoren von 1 × 512 = 512 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Festplattenidentifikation: 0x00014d34 Gerät boot. Anfang Ende Blöcke Id System /dev/sdd1 8192 122879 57344 c W95 FAT32 (LBA) /dev/sdd2 122880 15556607 7716864 83 Linux Gestartet wird nun mit fdisk /dev/sdd nun kann man sich unter fdisk mit **m** die Hilfe anzeigen lassen. Mit **d** kann die zweite Partition gelöscht werden - dabei wird nur die Partition entfernt nicht die Daten - und anschließend mit **n** eine neue erstellt werden. Als Anfangssektor ist es **wichtig** nun 122880 von der mit fdisk -l erstellten Liste auszuwählen, der Endsektor kann so als Standard bestehen bleiben. Mit **w** werden die Änderungen auf die SD-Karte geschrieben. Die weiteren Schritte sind: e2fsck -f /dev/sdd2 resize2fs /dev/sdd2 überprüfen mit: fdisk -l mount /dev/sdd2 /mnt/ df -h ==== WLAN SSH on first Boot ==== Möchte man WLAN beim ersten starten der neuen SD-Karte haben dann muss die Datei ''wpa_supplicant.conf'' direkt in die Boot-Partition abgelegt werden. Mit dem Namen des WLANs und den Zugangs-PW, welches idealerweise mit ''wpa_passphrase'' verschlüsselt wurde. Die Datei sieht dann z.B. wie folgt aus: ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=DE network={ ssid="homeWLAN" psk="verschlüsseltes-pw-erstellt-mit-wpa_passphrase" } network={ ssid="FRITZBox Fon WLAN 7660" psk="pw-funktioniert-auch-unverschlüsselt" key_mgmt=WPA-PSK } Möchte man SSH beim ersten starten der neuen SD-Karte haben, dann muss die Datei ''ssh'' direkt in die Boot-Partition abgelegt werden. Die Datei kann einfach leer sein, das war es auch schon. ===== Firmware ===== Seit dem Raspberry Pi4 gibt es das neue Paket ''rpi-eeprom'' welches die Tools ''rpi-eeprom-config'' und ''rpi-eeprom-update'' bereit stellt. Damit lässt sich dann z.B. die Firmware aktualisieren. ~ $ sudo rpi-eeprom-update *** UPDATE AVAILABLE *** BOOTLOADER: update available CURRENT: Do 3. Sep 12:11:43 UTC 2020 (1599135103) LATEST: Do 29. Apr 16:11:25 UTC 2021 (1619712685) RELEASE: default (/lib/firmware/raspberrypi/bootloader/default) Use raspi-config to change the release. VL805_FW: Using bootloader EEPROM VL805: up to date CURRENT: 000138a1 LATEST: 000138a1 ===== USB Boot ===== Zunächst auf dem RPi überprüfen ob USB Booten bereits aktiviert ist: vcgencmd otp_dump | grep 17: 17:3020000a Wird die obige Ausgabe zurück geliefert ist alles Okay und das Image kann genauso mit ''dd'' auf USB-Stick geschrieben werden wie es mit der SD-Karte gemacht wird. Falls etwas anderes zurück geliefert wird, dann muss in der ''/boot/config.txt'' die Zeile ''program_usb_boot_mode=1'' eingefügt und der RPi neu gestartet werden. Beim Booten wird dann der USB-Boot Modus fest in den OTP (one-time programmable) Speicher geschrieben. Nachdem dieser gestartet ist kann der RPi wieder ausgeschaltet, die SD-Karte entnommen und ein USB-Speicher zum Booten verwendet werden. ===== Die Datei config.txt ===== Bei HDMI-Kabel Verbindung (mit Audio) zum Bildschirm folgende Einstellung verwenden: hdmi_drive=2 Bei DVI-Kabel Verbindung (ohne Audio) zum Bildschirm folgende Einstellung verwenden: hdmi_drive=1 Die Onboard Soundkarte kann auch deaktiviert werden, evtl. kann damit Energie eingespart werden. dtparam=audio=off ~ $ aplay -l aplay: device_list:270: keine Soundkarten gefunden ... Soundkarte aktivieren(ist der Standard): # Enable audio (loads snd_bcm2835) dtparam=audio=on Der Kommando ''aplay -l'' sollte nun wieder eine Soundkarte anzeigen. Test Sound Datei .mp3 {{:wiki:battle_isle_2_-_03.mp3|}} ==== Multimedia Lizenz Key ==== Nur mit Raspbian Version vor 2018: sudo su - cd /boot cp start.elf start.elf_backup perl -pne 's/\x47\xE9362H\x3C\x18/\x47\xE9362H\x3C\x1F/g' < start.elf_backup > start.elf Nachsehen ob auf dem Raspberry die Multimedia Lizenz aktiviert ist: $ vcgencmd codec_enabled MPG2 MPG2=enabled $ vcgencmd codec_enabled WVC1 WVC1=enabled ===== Swap Memory ===== Raspbian verwendet für den Auslagerungs-Speicher eine Swap-Datei, welche in den Standard Einstellungen 100MB groß ist. Einstellungen zu dieser Swap-Datei werden in der Konfig-Datei ''/etc/dphys-swapfile'' vorgenommen. Ausserdem gibt es einen Systemd Start-Jobs mit den sich der Swap ein oder ausschalten lässt. Für die Kompilierung von größeren Programmen, wie z.B. den Spiel Wesnoth, muss genug Arbeitsspeicher zur Verfügung stehen. === Den Swap erweitern === Die Swap Konfig-Datei mit einen Editor öffnen: sudo nano /etc/dphys-swapfile Den Swap auf 1000MB vergrößern durch das anpassen folgender Zeile: CONF_SWAPSIZE=1000 Im nano-Editor mit Strg + O die Änderung speichern. Anschließend folgenden Kommando aufrufen: sudo /sbin/dphys-swapfile setup Es wird als Ausgabe zurückgeliefert: want /var/swap=1000MByte, checking existing: deleting wrong size file (104857600), generating swapfile ... of 1000MBytes Als letztes den ''swapon'' Kommando ausführen: sudo swapon /var/swap Neue Werte mit Kommando ''free'' überprüfen: free -h total used free shared buff/cache available Mem: 748M 297M 76M 45M 375M 370M Swap: 999M 0B 999M ===== Full Power ===== Um die Maximale Leistung aus den Raspberrys zu holen muss auf eine gute Kühlung geachtet werden, denn bei 80° Grad taktet er automatisch runter um Beschädigungen der Platine zu vermeiden. Ein passiver Alu Kühlkörper reicht aus - Die Temperatur im Auge behalten. ungetestet!! FIXME cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors conservative ondemand userspace powersave performance schedutil cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ondemand In die Datei ''/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor'' den Wert ''performance'' eintragen. Für höhere Grafik und Video Leistung den Grafikspeicher höher setzen: gpu_mem=256 Das System übertakten: arm_freq=1300 core_freq=500 gpu_freq=500 sdram_freq=500 over_voltage=4 ===== Akku Energieversorgung ===== Es geht darum eine einfache Spannungsversorgung über 4xAA (Mingon) Akku-Stapel zu realisieren und das ganze per WLAN ins lokale Netz erreichbar zu machen. Um die Laufzeit zu erhöhen werden insgesamt 2 Akku-Stapel, bestehend aus 4 Mignon Akkus eingesetzt. Parallel dazu ist eine Solarzelle geschaltet, welche aus mehreren zusammen-geschalteten Einzel-Zellen besteht. Diese Zellen stammten von billigen Solar-Leuchten die es oft in 5er Pack für 5€ gibt. Die zusammengeschaltete Solarzelle liefert ohne Last ca. 6,2 Volt. Ein Strom von nur 0,0186A wurde im Betrieb an der Solarzelle gemessen bei bedeckten Himmel. Eine Diode 1N4007 sorgt dafür das der Strom nur in Richtung zur Batterie hin fließt und nicht nachts von der Batterie zurück zur Solarzelle. An der GPIO-Leiste wird an den Pin 2(5V) und 6(GND) der RPi mit Energie versorgt. Zwei große Kondensatoren mit 4,7mF und 470µF sind parallel zu den Akkus und der Solarzelle geschaltet, diese sollen Spannungsschwankungen mildern. vereinfachter Schaltplan: {{:wiki:raspberrypi_energieversorgung01.png?200|}} Am Versuchs Aufbau liegt an einem leicht bedeckten Tag ein Spannung von 5,16 Volt. Diese wäre optimal für den RPi, welcher mit einer Spannung von 4,7 bis 5,6 Volt arbeitet. Versuchs Aufbau: {{:wiki:raspberrypi_energieversorgung02.jpg?200|}} Das folgende Bild zeigt den gestarteten Raspberry Pi mit aktivierten WLAN: {{:wiki:raspberrypi_energieversorgung03.jpg?200|}} ==== und Action ==== Der Raspberry 1 verfügt über 2 Messpunkte auf seiner Platine TP1 und TP2, hier sollte man die Versorgungsspg. messen können. In der ersten Minuten waren es immerhin noch 4,78V aber schon nach ca. 3 Minuten waren es nur noch 3,8 V dann wird der RPi instabil und schaltet sich ab. Der WLAN Stick war nach diesen max. 4 Minuten schon ordentlich warm, meiner Meinung nach ist das WLAN der größte Energiefresser. ===== Energie Sparen ===== Um die Laufzeit bei Akku Betrieb zu erhöhen gibt es verschiedene Möglichkeiten. Zum einen sollten die Optionen aus der ''/boot/config.txt'' genutzt werden. Nachfolgend findet man hier weitere Punkte zum Energie sparen. ==== Dienste abschalten ==== Falls das light-Image genutzt wird, sollten die meisten Dienste schon nicht installiert sein. Andernfalls sollte man sehe, das man noch weiter Dienste deaktivieren kann: Der folgende Kommando sollte ''multi-user.target'' zurück liefern aber niemals ''graphial.target'', da dies bedeuten würde, das die komplette graphische Oberfläche geladen wird. systemctl get-default Die folgenden Dienste jeweils mit ''sudo systemctl stop Dienstname'' stoppen und dann mit ''disable'' auch für den nächsten reboot dauerhaft deaktivieren: sudo systemctl disable cups sudo systemctl disable sound.target sudo systemctl disable bluetooth.target ==== WLAN und Bluetooth ==== WLAN und Bluetooth abschalten, wenn es nicht benötigt wird und deaktiviere mit ''rfkill'' auch die zugehörigen Funk-Module um weitere Energie zu sparen. WLAN ist in meinem Fall allerdings ein muss, aber ich kann die Tx-Power auf den niedrigsten Wert setzen: iwconfig wlan0 txpower 0 Hier kann am besten in der ''config.txt'' folgender Eintrag gesetzt werden: # turn wifi and bluetooth off dtoverlay=disable-wifi dtoverlay=disable-bt ==== Grafik HDMI ==== HDMI deaktivieren, aber keine Ahnung wie viel Einsparung es bringt /opt/vc/bin/tvservice --off Einschalten lässt sich HDMI wieder mit: /opt/vc/bin/tvservice -p Eine weitere Möglichkeit ist das Generieren des Videobildes und seine Ausgabe über HDMI zu deaktivieren. Da dies ansonsten ständig geschehen würde, auch wenn der Monitor abgeschaltet ist, spart dies zusätzliche Energie (wenn auch vermutlich nicht besonders viel). /opt/vc/bin/vcgencmd display_power off Damit die Einstellungen beim nächsten reboot überleben, muss die Zeile ''iwconfig wlan0 txpower 0'' und die Zeile ''/opt/vc/bin/tvservice --off'' in die Datei ''/etc/rc.local'' vor dem //exit0// eingetragen werden. ==== Power und ACT LED ==== Neben der Möglichkeit die Funktionen der Power und ACT LED fast beliebig über die Datei ''/sys/class/leds/led1/trigger'' zu definieren. Kann man diese LED's zum Energie sparen auch einfach ausschalten. Die rote Power LED deaktivieren: echo none | sudo tee /sys/class/leds/led0/trigger echo 0 | sudo tee /sys/class/leds/led1/brightness Die grüne ACT LED deaktivieren: echo none | sudo tee /sys/class/leds/led1/trigger echo 0 | sudo tee /sys/class/leds/led0/brightness Zum dauerhaften deaktivieren muss das folgende in die ''/boot/config.txt'' eingetragen sein: # Disable the ACT LED. dtparam=act_led_trigger=none dtparam=act_led_activelow=off # Disable the PWR LED. dtparam=pwr_led_trigger=none dtparam=pwr_led_activelow=off Falls die Original Pi Camera per Flachbandkabel angeschlossen sein sollte, lässt sich auch hier die rote LED an der Pi Camera deaktivieren. Hierzu muss die folgende Zeile in die ''/boot/config.txt'' eingetragen werden. disable_camera_led=1 ==== CPU Takt ==== CPU Takt verringern. Dies bringt wahrscheinlich den größtmöglichen Erfolg: root@raspberryA1:~# cat /boot/config.txt #uncomment to overclock the arm. 700 MHz is the default. #arm_freq=800 gpu_mem=16 arm_freq_min=250 core_freq_min=100 sdram_freq_min=150 over_voltage_min=0 Er läuft nun mit 250MHz und braucht dadurch eine Minute länger zum hochfahren. Ohne Last läuft er mit 250MHz aber bei Last kann er automatisch wieder auf 700MHz zurück gehen. ==== USB deaktivieren ==== Achtung auch die LAN Schnittstelle wird dann deaktiviert, da diese per USB angebunden ist. # disable USB at Raspberry Pi 2 und 3 on Raspbian Stretch echo 0x0 > /sys/devices/platform/soc/3f980000.usb/buspower # to enable USB use the same line as above with "echo 0x1" echo 0x1 > /sys/devices/platform/soc/3f980000.usb/buspower Um den System Pfad für die USB Energieversorgung in Raspbian Stretch zu finden: find /sys/devices/ -name `dmesg -t | grep dwc_otg | grep "DWC OTG Controller" | awk '{print $2}' | cut -d ":" -f1` ==== LAN Abschalten ==== Nicht benutzte NIC´s deaktivieren. sudo ip link set eth0 down sudo ifconfig eth0 down ==== zweiter Anlauf ==== Nachdem der Energie verbrauch des WLANs, die CPU herunter getaktet und die 4 Mignon Zellen eines AkkuStapels mit einem Standard Akkuladegerät geladen wurden gab es einen zweiten Versuch. Dieses mal aber noch mit angeschlossenen Audio Verstärker und angeschlossenen Lautsprecher aus WakiTalki. Die Solarzelle wurde an diesen sonnigen Tag gut platziert. * 13:24 - Vor Einschalten 5,31V * 13:25 - Eingeschaltet, Spg. ist auf 4,31V gefallen und hält sich dort stabil. * 13:30 - per WLAN mit SSH Musik Ordner(40MB) rüber kopiert, Musik abgespielt. Paket mpg123 installiert. * 13:55 - Nach 5 Minuten Pause, Spg. hält sich bei 4,35V * 14:00 - Steigt sogar manchmal auf 4,37V * 14:15 - Aktuell bei 4,38V, Ausser 2 SSH Verbindungen keine weitere Aktivität, ausser ''top''-Kommando wird ausgeführt. * 15:00 - Nachdem ich 2 Monate keine Updates mehr auf meine Versuchs SD-Karte gespielt hatte, starte ich das Kommando ''aptitude update && aptitute full-upgrade'', Nach 20 Minuten fällt die Spg. ab unter 4V. * 15:21 - RPi ist nicht mehr erreichbar, grüne Status LED blinkt periodisch. An den Messpunkten TP1 - TP2 liegen nur noch 3,65V Trotz zwei Wochen mit diesen harten Experimenten, unsauberes herunter fahren, große Spannungs-Schwankungen blieb das Dateisystem ext4 der SD-Karte immer voll funktionsfähig. ===== Raspberry Pi OS ===== Nach der Installation ist es sinnvoll ''raspi-config'' einmal aufzurufen. Dieses Programm findet sich auch in der grafischen Oberfläche oben links auf die Himbeere klicken, Einstellungen --> Raspberry-Pi-Konfiguration ==== 12 Bookworm ==== Ab dieser Version hat sich die Ersteinrichtung für den Headless Betrieb geändert. Hierfür nutze ich das Lite Image. Auf der SD-Karte müss auf der Boot-Partition einige Dateien angelegt werden diese wären: - SSH Aktivierung, eine leere Datei mit dem namen ''ssh'' - Benutzer, eine Datei mit dem Namen ''userconf'' mit dem Inhalt: : Für password wird hier das verschlüsselt Passwort eingetragen, dieses holt man sich mit dem Komando ''openssl passwd -6'' - WLAN, eine Datei im Pfad ''/etc/NetworkManager/system-connections/WLAN-Name.nmconnection'' anlegen mit den folgenden Inhalt: [connection] id=WLAN-Name uuid=# random UUID in the format 11111111-1111-1111-1111-111111111111 type=wifi autoconnect=true interface-name=wlan0 [wifi] mode=infrastructure ssid=WLAN-Name [wifi-security] auth-alg=open key-mgmt=wpa-psk psk=WLAN-Passwort [ipv4] method=auto [ipv6] addr-gen-mode=default method=auto sudo chmod -R 600 /etc/NetworkManager/system-connections/SSID.nmconnection sudo chown -R root:root /etc/NetworkManager/system-connections/SSID.nmconnection Hier soll es eine einzige Datei geben, mit der man alle Punkte ab arbeiten kann: With Raspberry Pi OS bookworm you can configure WiFi via a ''custom.toml'' **that you place in the bootfs partition (first boot only).** Note that this feature is experimental and will be replaced by cloud-init in the future. An example gist and blog explains some of the options: I am copying the example from the aforementioned gist (not affiliated): # Required: config_version = 1 [system] hostname = "raspberrypi" [user] # If present, the default "rpi" user gets renamed to this "name" name = "rpi" # The password can be encrypted or plain. To encrypt, we can use "openssl passwd -5 raspberry" password = "$5$pN7oRnie.WDOHoJY$aWEYmKUytN/S/bxMza5ksBiurbSJmcvcysBKHSmYa45" password_encrypted = true [ssh] # ssh_import_id = "gh:user" # import public keys from github enabled = true password_authentication = false # We can also seed the ssh public keys configured for the default user: # authorized_keys = [ "ssh-rsa ... user@host", ... ] [wlan] ssid = "mywifi" password = "$5$pN7oRnie.WDOHoJY$aWEYmKUytN/S/bxMza5ksBiurbSJmcvcysBKHSmYa45" password_encrypted = true hidden = false # The country is written to /etc/default/crda # Reference: https://wireless.wiki.kernel.org/en/developers/Regulatory country = "IE" [locale] keymap = "gb" timezone = "Europe/London" You could dig more into the firstboot or init_config scripts (the latter is what loads the config). Entscheident ist dieses Verzeichnis auf der Wurzel-Partition wo die Einstellungen konfiguriert werden. root@raspberrypi:~# ls -la /usr/lib/raspberrypi-sys-mods/ total 44 drwxr-xr-x 2 root root 4096 Mar 15 15:01 . drwxr-xr-x 63 root root 4096 Mar 15 15:02 .. -rwxr-xr-x 1 root root 3227 Nov 6 15:03 firstboot -rwxr-xr-x 1 root root 445 Dec 18 10:51 get_fw_loc -rwxr-xr-x 1 root root 419 Jan 6 2022 i2cprobe -rwxr-xr-x 1 root root 5486 Nov 7 09:30 imager_custom -rwxr-xr-x 1 root root 7319 Jul 25 2023 init_config -rwxr-xr-x 1 root root 117 Aug 31 2023 regenerate_ssh_host_keys -rwxr-xr-x 1 root root 339 Jul 25 2023 sshswitch ==== Audio Sound ==== Falls kein Sound über HDMI möglich scheint oder er nur mit ''omxplayer'' funktioniert aber WebBrowser, Audacity und mpv usw. keinen Sound liefern, hilft: Beim RPi4 kann es helfen den anderen HDMI Port zu wechseln. Ansonsten den folgenden Kommando ausführen: amixer -q cset numid=3 3 Evtl. auch das(ungetestet): amixer cset numd=1 1 amixer cset numd=1 100% 100% <- volume level Weitere Möglichkeiten die helfen können: apt update apt remove --purge alsa-utils* apt remove --purge alsamixer* apt install alsa-utils apt install alsamixer reboot Nach dem Neustarten wähle oben, im Lautsprecher Icon, HDMI output in der Taskbar. Diese Lösung kann deshalb funktionieren, weil der ''omxplayer'' welcher ein sehr elementarer Musikspieler ist, nicht den alsa driver nutzt. Der omxplayer nutzt stattdessen seinen eigenen drivers namens //openmax//, daher kommt das Problem wahrscheinlich vom alsa drivers. ==== VLC Media Player ==== VLC ist in den Raspbian Software Repos ohne Hardwarebeschleunigung vorhanden, daher muss, wenn man VLC verwenden mag, es aus den Quellen kompiliert werden. VLC mit Hardwarebeschleunigung unter Raspbian installieren: * https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=195221 * https://thepi.io/how-to-compile-vlc-media-player-with-hardware-acceleration-for-the-raspberry-pi/ wget http://steinerdatenbank.de/software/vlc-2.2.8-ffmpeg3-1.patch wget https://download.videolan.org/vlc/2.2.8/vlc-2.2.8.tar.xz sudo apt install autopoint pkg-config libtool build-essential autoconf sudo apt install liba52-0.7.4 libasound2 libass5 libavahi-client3 libavahi-common3 libavc1394-0 libbasicusageenvironment1 libbluray1 libbz2-1.0 libc6 libcairo2 libcddb2 libcdio13 libchromaprint1 libdbus-1-3 libdc1394-22 libdca0 libdirectfb-1.2-9 libdvbpsi10 libdvdnav4 libdvdread4 libebml4v5 libfaad2 libflac8 libfontconfig1 libfreetype6 libfribidi0 libgcc1 libgcrypt20 libglib2.0-0 libgme0 libgnutls30 libgpg-error0 libgroupsock8 libgsm1 libjpeg62-turbo libkate1 liblirc-client0 liblivemedia57 liblua5.2-0 liblzma5 libmad0 libmatroska6v5 libmodplug1 libmp3lame0 libmpcdec6 libmpeg2-4 libmtp9 libncursesw5 libogg0 libopus0 libpng16-16 libpulse0 libraw1394-11 libresid-builder0c2a librsvg2-2 librtmp1 libsamplerate0 libsdl-image1.2 libsdl1.2debian libshine3 libshout3 libsidplay2 libsnappy1v5 libsndio6.1 libspeex1 libspeexdsp1 libssh-gcrypt-4 libssh2-1 libstdc++6 libtag1v5 libtheora0 libtinfo5 libtwolame0 libudev1 libupnp6 libusageenvironment3 libva-drm1 libva-x11-1 libva1 libvcdinfo0 libvorbis0a libvorbisenc2 libvpx4 libwavpack1 libwebp6 libwebpmux2 libx11-6 libx264-148 libx265-95 libxcb-keysyms1 libxcb1 libxml2 libxvidcore4 libzvbi0 zlib1g libgdk-pixbuf2.0-0 libgtk2.0-0 libnotify4 libqt5core5a libqt5gui5 libqt5widgets5 libqt5x11extras5 libxi6 libsmbclient libxext6 libxinerama1 libxpm4 fonts-freefont-ttf libaa1 libcaca0 libegl1-mesa libgl1-mesa-glx libgles1-mesa libgles2-mesa libxcb-shm0 libxcb-xv0 libxcb-randr0 libxcb-composite0 sudo apt install liba52-0.7.4-dev libasound2-dev libass-dev libavahi-client-dev libavc1394-dev libbluray-dev libbz2-dev libc6-dev libcairo2-dev libcddb2-dev libcdio-dev libchromaprint-dev libdbus-1-dev libdc1394-22-dev libdca-dev libdirectfb-dev libdvbpsi-dev libdvdnav-dev libdvdread-dev libebml-dev libfaad-dev libflac-dev libfontconfig1-dev libfreetype6-dev libfribidi-dev libgcc-6-dev libgcrypt20-dev libglib2.0-dev libgme-dev libgnutls28-dev libgpg-error-dev libgsm1-dev libjpeg62-turbo-dev libkate-dev liblircclient-dev liblivemedia-dev liblua5.2-dev liblzma-dev libmad0-dev libmatroska-dev libmodplug-dev libmp3lame-dev libmpcdec-dev libmpeg2-4-dev libmtp-dev libncursesw5-dev libogg-dev libopus-dev libpng-dev libpulse-dev libraw1394-dev libresid-builder-dev librsvg2-dev librtmp-dev libsamplerate0-dev libsdl-image1.2-dev libsdl1.2-dev libshine-dev libshout3-dev libsidplay2-dev libsnappy-dev libsndio-dev libspeex-dev libspeexdsp-dev libssh-gcrypt-dev libssh2-1-dev libstdc++-6-dev libtag1-dev libtheora-dev libtinfo-dev libtwolame-dev libudev-dev libupnp6-dev libva-dev libvcdinfo-dev libvorbis-dev libvpx-dev libwavpack-dev libwebp-dev libx11-dev libx264-dev libx265-dev libxcb-keysyms1-dev libxcb1-dev libxml2-dev libxvidcore-dev libzvbi-dev zlib1g-dev libgdk-pixbuf2.0-dev libgtk2.0-dev libnotify-dev libqt5x11extras5-dev libxi-dev libsmbclient-dev libxext-dev libxinerama-dev libxpm-dev libaa1-dev libcaca-dev libegl1-mesa-dev libgles1-mesa-dev libgles2-mesa-dev libxcb-shm0-dev libxcb-xv0-dev libxcb-randr0-dev libxcb-composite0-dev libavcodec-dev libavformat-dev libgstreamer1.0-dev libswscale-dev tar -xf vlc-2.2.8.tar.xz cd vlc-2.2.8/ ./bootstrap patch -Np1 -i ../vlc-2.2.8-ffmpeg3-1.patch sed -i 's/error-implicit-function-declaration//' configure export CFLAGS="-I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/mmal -I/opt/vc/include/interface/vchiq_arm -I/opt/vc/include/IL -I/opt/vc/include/GLES2 -I/opt/vc/include/EGL -mfloat-abi=hard -mcpu=cortex-a7 -mfpu=neon-vfpv4" CXXFLAGS="-I/opt/vc/include/ -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/mmal -I/opt/vc/include/interface/vchiq_arm -I/opt/vc/include/IL -mfloat-abi=hard -I/opt/vc/include/GLES2 -I/opt/vc/include/EGL -mcpu=cortex-a7 -mfpu=neon-vfpv4" LDFLAGS="-L/opt/vc/lib" ./configure --prefix=/usr --enable-omxil --enable-omxil-vout --enable-rpi-omxil --disable-mmal-codec --disable-mmal-vout --enable-gles2 make -j3 sudo make install Starte den VLC Player im entpackten vlc Verzeichnis, bzw. von der Stelle aus wo auch obige Kommandos eingegeben wurden mit: ./vlc Dies ist ein Link auf ''bin/vlc-static''. Der komplette Pfad ist, wenn man das gepackte vlc Archiv unter Downloads entpackt hatte: /home/pi/Downloads/vlc-2.2.8/bin/vlc-static Die Installation legt die Datei ''/usr/bin/vlc'' an welche aber nur eine Konsolen Oberfläche bereit stellt. Daher verschiebe ich die vlc Datei, welche die grafischer Oberfläche bereit stellt, nach ''/usr/bin/vlc'': sudo mv bin/vlc-static /usr/bin/vlc After starting VLC for the first time, change the following options: * Settings, simple, Audio: make sure, ALSA and bcm2835 are selected * Settings, simple, Video, output: select "OpenMAX IL video output" VLC will remember these settings. === Deinstallation === sudo make uninstall ==== apt update ==== Weicht die Systemzeit sehr ab, kommt es vor das dass Software VerwaltungsTool ''apt'' einen Fehler liefert. Beim Raspberry kann es leicht vorkommen, da es die Zeit über einen NTP-Server holt und diese bei fehlender Internet Verbindung falsch läuft. Daher die Zeit mit ''date -s "2020-05-12 19:23:00"'' richtig setzen und ''apt update'' erneut ausführen. ==== GPIO Test ==== An den entsprechenden GPIO Pins können zum testen LED angeschlossen werden. Sind die GPIOs aktiviert und auf high Signal gesetzt so leuchtet die LED. == aktivieren der GPIOs 17, 27, 22 und 23 == for GPIO in 17 27 22 23; do echo $GPIO > /sys/class/gpio/export; done for GPIO in 17 27 22 23; do echo out > /sys/class/gpio/gpio$GPIO/direction; done == aktivierte GPIOs auf high Signal setzen == for GPIO in 17 27 22 23; do sleep 4; echo 1 > /sys/class/gpio/gpio$GPIO/value; done == aktivierte GPIOs wieder auf low Signal setzen == for GPIO in 17 27 22 23; do sleep 4; echo 0 > /sys/class/gpio/gpio$GPIO/value; done ==== Tox VideoChat ==== Nachdem Download von qtox (Binär Paket) funktioniert bei USB-Webcams nur Video, aber nicht das integrierte Mikrofon. Auf der Konsole gestartet, gibt qtox Meldungen über Audio aus, in denen etwas von //pulse// steht. Nach der Installation von ''pulseaudio'', lässt sich die USB-Webcam in den Einstellungen von qtox als Audio Eingabegerät auswählen. apt install pulseaudio ===== Suse ===== Suse(SLES) gibt es rein als 64Bit für Raspberry Pi3 und neuer. OpenSuse gibt es für alle Raspberry Pi Modelle. ==== Suse GPIO ==== Im Pfad /sys/class/gpio gibt es eine Datei "gpiochip298". Die bedeutet die GPIO's starten ab 298. Das kann man anhand der folgenden Datei ersehen: cat /sys/kernel/debug/gpio gpiochip0: GPIOs 298-351, parent: platform/20200000.gpio, pinctrl-bcm2835: gpio-298 ( |sysfs ) in hi gpio-314 ( |led0 ) out hi Möchte man nun GPIO 23 steuern, so muss man 298 + 23 nehmen und das Ergebnis "321" dann in die export Datei schreiben: echo 321 > /sys/class/gpio/export GPIO als Output definieren: echo out > gpio321/direction Dann z.B. eine LED zum leuchten bringen: echo 1 > gpio321/value Mehrere gleichzeitig aktivieren in einer praktischen for-Schleife. Aktivieren der GPIOs 17, 27, 22 und 23 for GPIO in 17 27 22 23; do echo $(expr 298 + $GPIO) > /sys/class/gpio/export; done for GPIO in 17 27 22 23; do echo out > /sys/class/gpio/gpio$(expr 298 + $GPIO)/direction; done Die GPIOs gleichzeitig einschalten und anschließend wieder deaktivieren: for GPIO in 17 27 22 23; do echo 1 > /sys/class/gpio/gpio$(expr 298 + $GPIO)/value; sleep 3; done for GPIO in 17 27 22 23; do echo 0 > /sys/class/gpio/gpio$(expr 298 + $GPIO)/value; sleep 3; done ===== RPi Vergleich ===== Hier Raspberry Pi 4 1GB Modell pi@raspberrypi:~ $ lscpu Architecture: armv7l Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1 Vendor ID: ARM Model: 3 Model name: Cortex-A72 Stepping: r0p3 CPU max MHz: 1500.0000 CPU min MHz: 600.0000 BogoMIPS: 108.00 Flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 pi@raspberrypi:~ $ cat /proc/cpuinfo processor : 0 model name : ARMv7 Processor rev 3 (v7l) BogoMIPS : 108.00 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd08 CPU revision : 3 processor : 1 model name : ARMv7 Processor rev 3 (v7l) BogoMIPS : 108.00 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd08 CPU revision : 3 processor : 2 model name : ARMv7 Processor rev 3 (v7l) BogoMIPS : 108.00 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd08 CPU revision : 3 processor : 3 model name : ARMv7 Processor rev 3 (v7l) BogoMIPS : 108.00 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd08 CPU revision : 3 Hardware : BCM2711 Revision : a03111 Serial : 10000000d8dbe01f Model : Raspberry Pi 4 Model B Rev 1.1 pi@raspberrypi:~ $ lspci 00:00.0 PCI bridge: Broadcom Limited Device 2711 (rev 10) 01:00.0 USB controller: VIA Technologies, Inc. VL805 USB 3.0 Host Controller (rev 01) pi@raspberrypi:~ $ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full Supported pause frame use: Symmetric Receive-only Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full Advertised pause frame use: Symmetric Receive-only Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Link partner advertised link modes: 10baseT/Full 100baseT/Full 1000baseT/Full Link partner advertised pause frame use: Symmetric Link partner advertised auto-negotiation: Yes Link partner advertised FEC modes: Not reported Speed: 1000Mb/s Duplex: Full Port: MII PHYAD: 1 Transceiver: internal Auto-negotiation: on Cannot get wake-on-lan settings: Operation not permitted Current message level: 0x00000007 (7) drv probe link Link detected: yes pi@raspberrypi:~ $ vcgencmd measure_volts volt=0.8350V