10.5Interna und Backups
Zum Abschluss des Raspberry-Pi-Kapitels fasst dieser Abschnitt einige technische Details zur Funktionsweise des Raspberry Pi zusammen und gibt Tipps zur Durchführung von Backups.
Der Inhalt der Boot-Partition
Damit der Boot-Prozess des Raspberry Pi funktioniert, muss die erste Partition der SD-Karte eine VFAT-Partition sein und mehrere Dateien enthalten, deren Inhalt in Tabelle 10.2 zusammengefasst ist. Im laufenden Betrieb finden Sie diese Dateien im Verzeichnis /boot. Normalerweise sollten Sie diese Dateien nicht anrühren. Die einzige Ausnahme ist die Datei config.txt, die im nächsten Abschnitt näher beschrieben wird.
Datei |
Inhalt |
---|---|
bootcode.bin |
der Bootloader |
start.elf |
die Firmware des Grafikprozessors |
*.dtb |
Device-Tree-Blobs für verschiedene Raspberry-Pi-Modelle |
overlay/*.dtb |
Device-Tree-Blobs für diverse Hardware-Komponenten |
config.txt |
Textdatei zur Hardware-Konfiguration |
kernel.img |
der Linux-Kernel für den Raspberry Pi 1 |
kernel7.img |
der Linux-Kernel für den Raspberry Pi 2 (ARMv7-CPU) |
cmdline.txt |
Textdatei mit Parametern, die an den Kernel übergeben werden |
Tabelle 10.2Die Boot-Dateien des Raspberry Pi in der Reihenfolge ihrer Verarbeitung
Der Boot-Vorgang verläuft auf dem Raspberry Pi vollkommen anders als auf einem gewöhnlichen PC. Es gibt kein BIOS, kein EFI und keinen GRUB. Wenn der Raspberry Pi eingeschaltet wird, ist vorerst nur der GPU-Core aktiv, also der Grafikteil der CPU. Die GPU lädt den ersten Teil des Bootloaders aus einem ROM (1st stage bootloader). Mit diesem Miniprogramm kann die CPU auf die SD-Karte zugreifen und dort bootcode.bin in den Cache der CPU lesen. Diese Datei enthält den restlichen Bootloader (2nd stage bootloader). Der Bootloader lädt nun start.elf. Das darin enthaltene Programm wertet die Device-Tree-Dateien sowie config.txt aus, liest cmdline.txt und kernel.img bzw. kernel7.img und startet schließlich den Kernel.
Die Konfigurationsdatei »config.txt«
Unabhängig davon, welches Betriebssystem Sie auf Ihrem Raspberry Pi installiert haben, bestimmt die Datei config.txt in der ersten Partition der SD-Karte viele Eckdaten der Konfiguration. Die Datei wird direkt beim Booten des Raspberry Pi ausgewertet. Dieser Abschnitt fasst die wichtigsten Einstellmöglichkeiten dieser Datei zusammen. Noch mehr config.txt-Details können Sie hier nachlesen:
http://elinux.org/RPi_config.txt
Veränderungen an config.txt werden erst mit dem nächsten Neustart wirksam. Viele config.txt-Parameter können Sie im laufenden Betrieb mit vcgencmd get_config auslesen (siehe den folgenden Abschnitt).
Der Raspberry Pi 2 verfügt insgesamt über 1 GByte RAM. Das RAM wird zwischen der CPU und dem Grafikprozessor geteilt. Die Aufteilung muss beim Start endgültig mit dem Parameter gpu_mem festgelegt werden, wobei Sie dem Grafiksystem 16, 64, 128 oder 256 MByte zuweisen können. 16 MByte sind für den normalen Betrieb ausreichend. Für grafikintensive Anwendungen (3D-Grafik, HD-Filme abspielen etc.) benötigt das Grafiksystem hingegen 128 MByte Speicher. Auch die Nutzung der Kamera erfordert ein Minimum von 128 MByte Grafikspeicher:
Normalerweise funktioniert die Grafik via HDMI ohne weitere Konfiguration. Nur wenn es Probleme gibt, können Sie mit diversen hdmi_xxx-Parametern bestimmte Einstellungen erzwingen. Das folgende Listing gibt hierfür einige Beispiele:
Wenn Sie nicht wissen, welche Video-Modi Ihr Monitor unterstützt, führen Sie das Kommando tvservice aus. Die aufgelisteten Modi mit der Option -m CEA gelten für hdmi_group=1, die Modi mit der Option -m DMT für hdmi_group=2. Die folgenden Ergebnisse sind auf einem Monitor mit einer Auflösung von 1920 × 1200 Pixel entstanden:
Zum Raspberry Pi gibt es eine kleine Kamera, die über ein Flachbandkabel mit dem Minicomputer verbunden wird. Damit Sie diese Kamera nutzen können, sind zwei Ergänzungen in config.txt erforderlich. Diese Einstellungen können Sie auch mit dem Programm Raspberry Pi Configuration bzw. mittels raspi-config vornehmen.
Zusammen mit Raspbian werden zwei Kommandos installiert, um die Kamera zu nutzen: raspistill -o name.jpg macht ein Foto und speichert das Bild in der angegebenen Datei. raspivid-o name.h264 -t 10000 erstellt ein 10 Sekunden langes Video und speichert es in einer H264-Datei. Beide Kommandos lassen sich durch diverse Optionen steuern, die in den man-Seiten dokumentiert sind.
Sogenannte Device Trees (siehe Abschnitt 26.2) beschreiben die Hardware des Raspberry Pi – inklusive der Erweiterungen, die Sie selbst für ein Bastelprojekt hinzugefügt haben. Damit der Kernel über Ihre Erweiterungen Bescheid weiß, müssen Sie in config.txt angeben, welche Komponenten oder Bussysteme Sie zusätzlich nutzen wollen. Die folgenden Zeilen geben Syntaxbeispiele für die am häufigsten vorkommenden Anwendungen:
Overclocking ermöglicht es, Ihren Raspberry Pi schneller zu takten als vorgesehen. Gerade für CPU- oder GPU-intensive Aufgaben, z.B. für die HD-Wiedergabe von Videos, ist Overclocking natürlich eine willkommene Hilfe, um den Raspberry Pi schneller zu machen.
Laut offiziellen Angaben auf der Raspberry-Pi-Website ist moderates Overclocking sicher. Das heißt, es sind weder Stabilitätsprobleme noch ein vorzeitiger Hitzetod zu erwarten, sofern die CPU-Temperatur 85 Grad Celsius nicht überschreitet. Dem widersprechen aber mitunter Foren-Berichte mit negativen Erfahrungen von Raspberry-Pi-Besitzern. Letztlich müssen Sie also selbst entscheiden, ob Ihnen mehr Performance das damit verbundene Risiko wert ist. Ich rate Ihnen vom Overclocking ab.
Aus technischer Sicht ist das Overclocking unkompliziert. Sie müssen lediglich einige Zeilen in config.txt ändern und Ihren Raspberry Pi neu starten. Am einfachsten führen Sie diese Änderungen mit dem Raspberry-Pi-Konfigurationsprogramm durch. Die folgenden Einstellungen sind für einen Raspberry Pi 2 gedacht und bewirken, dass er bei Bedarf mit einer Taktfrequenz von 1 GHz läuft statt normalerweise mit 900 MHz:
Das Overclocking erfolgt normalerweise dynamisch, d.h. nur dann, wenn die CPU- oder GPU-Leistung tatsächlich benötigt wird. In den Ruhezeiten laufen CPU und GPU in den Defaulttaktfrequenzen. force_turbo=1 verhindert die Taktabsenkung und bewirkt, dass die CPU/GPU immer mit der angegebenen Frequenz getaktet wird. Das ist stabiler, die CPU/GPU wird aber schneller heiß. Die gerade aktuelle CPU-Frequenz und -Temperatur können Sie wie folgt auslesen (in kHz bzw. in Milligrad):
Die Encoding-Komponenten der GPU können die Video-Decodierung unterstützen. Für manche Codecs ist das standardmäßig der Fall, für andere muss diese Funktion mit einem kostenpflichtigen Lizenzschlüssel freigeschaltet werden. Momentan sind zwei derartige Schlüssel vorgesehen: je einer für den MPG-2- und für den VC-1-Decoder. Die folgenden Werte sind natürlich nur Muster. Die Schlüssel müssen zur ID Ihrer CPU passen.
Die folgenden Parameter modifizieren den Boot-Vorgang:
Das Kommando »vcgencmd«
Mit dem Kommando vcgencmd können Sie diverse Statusinformationen der CPU auslesen. vcgencmd commands liefert eine Liste aller bekannten Kommandos. Die folgenden Beispiele zeigen einige Anwendungen:
Noch mehr Anwendungsbeispiele finden Sie hier:
http://elinux.org/RPI_vcgencmd_usage
Backups
Grundsätzlich gelten für den laufenden Betrieb eines Minicomputers dieselben Backup-Strategien wie für einen gewöhnlichen Computer (siehe Kapitel 37): Wenn Sie auf Ihrem Minicomputer veränderliche Daten speichern, sollten Sie diese regelmäßig sichern. Im Idealfall hat der Minicomputer eine Verbindung zu einem NAS-Gerät; dann bietet sich die Programmierung eines kleinen Backup-Scripts an, das einmal täglich alle relevanten Daten in einem Netzwerkverzeichnis sichert.
Davon losgelöst ist es zweckmäßig, hin und wieder eine Sicherungskopie der ganzen SD-Karte zu erstellen. Dieses Backup kann dann jederzeit auf eine neue, zumindest gleich große SD-Karte übertragen werden. Die folgenden Beispiele gehen wieder davon aus, dass das Device der SD-Karte /dev/sdb lautet. Passen Sie die Device-Angaben entsprechend an!
Das Auslesen großer SD-Karten dauert leider ziemlich lange. Wenn Sie in dieser Zeit ein Feedback wünschen, setzen Sie statt dd das Kommando dcfldd ein. Optional können Sie die zu sichernden Daten auch gleich komprimieren:
Riesen-Backup, obwohl die SD-Karte halb leer ist?
Die Backup-Datei wird möglicherweise trotz Komprimierung größer ausfallen als erwartet – auch dann, wenn nur ein kleiner Teil der SD-Karte tatsächlich mit Daten gefüllt ist. Das liegt daran, dass in jedem Fall der gesamte Datenträger blockweise ausgelesen wird, egal ob diese Blöcke vom Dateisystem genutzt werden oder nicht. Oft enthalten die Blöcke Zufallsdaten, z.B. Überreste einer früheren Nutzung der Karte in einer Digitalkamera, die schwer zu komprimieren sind.
In die umgekehrte Richtung sehen die Kommandos wie folgt aus. Beachten Sie, dass dabei der gesamte Inhalt des Datenträgers /dev/sdb überschrieben wird!
Wenn Sie das Backup-Image komprimiert haben, gehen Sie so vor: