Im Fall von FreeBSD lädt der Phase-3-Bootloader die Datei uboot.img. Dabei handelt es sich um ein Betriebssystem für die CPU, es fährt nun also das FreeBSD-System hoch (Abbildung 2).
FreeBSD vorbereiten
Das Kompilieren von FreeBSD für den Raspberry Pi erledigen Sie unter einem existierenden FreeBSD-Hostsystem, das dazu auch in einer virtuellen Umgebung laufen kann. Mit der stabilen Version 10 liegen Sie auf der sicheren Seite, während sich das momentan unter CURRENT firmierende FreeBSD 11 nur für abenteuerlustige Naturen eignet.
Für die Installation legen Sie auf dem Hostsystem als Root ein separates Verzeichnis an (Listing 1, erste drei Zeilen). Das verhindert, dass sich Dateien des Hosts mit den für den Raspberry kompilierten vermischen: Andernfalls käme es spätestens bei der Aktualisierung des Hostsystems zum Chaos. Damit FreeBSD auf dem Raspberry bootet, benötigen Sie außerdem den Bootloader (Zeile 4). Die Verwaltung des Betriebssystem-Quellcodes setzt zudem Subversion voraus, das Sie gegebenenfalls über die Paketverwaltung einrichten (Zeile 5).
Listing 1
$ su root # mkdir /home/raspberry # cd /home/raspberry # fetch http://www.dankoweit.de/Downloads/Raspberry/freebsd-uboot-20140101.tar.gz # pkg_add -r subversion
Im letzten Schritt der Vorbereitungsphase legen Sie ein mindestens 512 MByte großes Disk-Image für die SD-Karte an – besser sind 1024 MByte, damit Platz für den Ports-Tree bleibt (dazu später mehr). Zunächst legen Sie mit Dd eine leere Datei an, die Sie anschließend mittels mdconfig in eine Memory-Disk mit dem Treiber md0 umwandeln (Listing 2).
Listing 2
# dd if=/dev/zero of=./rpi.img bs=1m count=1024 # mdconfig -a -t vnode -f ./rpi.img md0
Da sich die Datei ./rpi.img wie eine Festplatte verhält, lassen sich im folgenden Schritt die einzelnen Slices anlegen. Als Partitionierungsschema dient MBR (Master Boot Record), weil die Firmware des Raspberry nur damit zurechtkommt (Listing 3, Zeile 1). Zuerst erstellen und formatieren Sie ein 32 MByte großes Boot-Slice für die Raspberry-Firmware (ab Zeile 2). Danach legen Sie ein FreeBSD-Slice an, das den gesamten restlichen Speicherplatz einnimmt, und formatieren es ebenfalls (ab Zeile 5).
Listing 3
# gpart create -s MBR md0 # gpart add -s 32m -t '!12' md0 # gpart set -a active -i 1 md0 # newfs_msdos -L boot -F 16 /dev/md0s1 # gpart add -t freebsd md0 # gpart create -s BSD md0s2 # gpart add -t freebsd-ufs md0s2 # newfs -U -j /dev/md0s2a
Nun laden Sie via Subversion die Quelltexte der gewünschten FreeBSD-Version herunter. Der Aufruf aus der ersten Zeile von Listing 4 holt FreeBSD 10 aus dem Subversion-Repository. Alternativ laden Sie mit dem Kommando aus der zweiten Zeile die aktuelle Entwicklerversion FreeBSD-Current (also derzeit Version 11) herunter. In beiden Fällen landet der Quellcode in einem neuen Unterverzeichnis namens fbsd, weswegen Sie Subversion aus dem eingangs eigens für diesen Zweck erstellten Verzeichnis /home/raspberry aufrufen sollten.
Listing 4
# svn co svn://svn.freebsd.org/base/stable/10 ./fbsd # svn co svn://svn.freebsd.org/base/head ./fbsd
Als Nächstes steht die Zuweisung von Arbeitsspeicher an. Da sich GPU und CPU den Speicher teilen, müssen Sie den jeweiligen Anteil am Arbeitsspeicher berechnen. Wie viel RAM die GPU benötigt, hängt vom angedachten Anwendungsfall ab: Bei grafikintensiven Applikationen sollten Sie 64 oder 128 MByte für die Grafikeinheit reservieren, bei textlastigem Betrieb genügen 16 oder 32 MByte. Die Differenz zum insgesamt verfügbaren Speicher, der je nach RasPi-Modell 256 oder 512 MByte umfasst, ergibt das für die CPU verbleibende RAM. Der folgende Shell-Aufruf berechnet den Wert und gibt ihn direkt als anschließend benötigten Hexadezimalwert aus:
# printf "%X\n" $(((RPI-GPU)*1024*1024))
RPI und GPU stehen hier für die Gesamtgröße des RasPi-Arbeitsspeichers respektive den für die GPU zu reservierenden Anteil, jeweils in MByte. Den als Rest ermittelten Wert tragen Sie in die Konfigurationsdatei rpi.dts ein, die Sie im Verzeichnis sys/boot/fdt/dts finden. Darin suchen Sie die in Listing 5 dargestellten Zeilen. Den vorgegebenen Wert 08000000 (128 MByte) ersetzen Sie durch den oben berechneten Hexadezimalwert und lassen den Rest der Datei unverändert.
Listing 5
memory {
device_type = "memory";
reg = <0 0x08000000>; \
/* 128 MB, Set by VideoCore */
};
Um den Kernel des Betriebssystems anzupassen, finden Sie in sys/arm/conf/RPI-B die passende Konfigurationsdatei. Ein funktionierendes Beispiel stellt der Autor auf seiner Homepage zur Verfügung [2]. Grundsätzlich gilt aufgrund des im Vergleich zu modernen PCs sehr eingeschränkten Arbeitsspeichers, dass Sie nur unbedingt notwendige Funktionen aktivieren sollten.
Die Monitorausgabe über den HDMI-Anschluss aktivieren Sie mithilfe der ersten drei Zeilen aus Listing 6. Den neuen Konsolentreiber aus dem Newcons-Projekt sollten Sie besser abschalten (Zeile 4). Möchten Sie eine Maus an den RasPi anschließen, verwenden Sie den Treiber ums für USB-Mäuse (Zeile 5).






