Listing 6
device sc options SC_DFLT_FONT makeoptions SC_DFLT_FONT=cp850 ### device vt device ums
Crosscompiling
Nach der Kernel-Konfiguration geht es nun zum Kompilieren. Da die Zielplattform (RasPi) sich von jener des kompilierenden Systems (PC) unterscheidet, kommt hier Crosscompiling zum Einsatz. In unserem Fall läuft FreeBSD auf einem 32- oder 64-Bit-System von Intel beziehungsweise AMD, während der Zielplattform Raspberry Pi eine ARM-CPU zugrunde liegt.
Deshalb setzen Sie zunächst die Umgebungsvariable TARGET_ARCH=armv6 (Listing 7, Zeile 1) und generieren die für das Crosscompiling nötigen Tools wie Compiler und Linker (Zeile 2). Danach erfolgt das Übersetzen des Kernels (Zeile 3). Die Option WITH_FDT=yes aktiviert dabei den Flattened Device Tree, über den der FreeBSD-Kernel den einzelnen Geräten Treiber zuweist. Der Übersetzungsvorgang nimmt je nach Hardware rund eine halbe Stunde in Anspruch. Es folgt der gleiche Prozess fürs Userland (Zeile 4), der etwa zwei Stunden dauert.
Listing 7
# export TARGET_ARCH=armv6 # make kernel-toolchain # make KERNCONF=RPI-B WITH_FDT=yes buildkernel # make MALLOC_PRODUCTION=yes buildworld
Nach dem fehlerfreien Durchlaufen der Kompilierung ermitteln Sie anhand der ersten Zeile von Listing 8 die restlichen Umgebungsvariablen für die spätere Installation. Abschließend geht es mit dem RasPi-spezifischen Bootloader weiter.
Listing 8
# buildenv=`make buildenvvars | sed 's/MACHINE_ARCH=armv6/MACHINE_ARCH=arm/'` # cd sys/boot # eval $buildenv make MK_NAND=no UBLDR_LOADADDR=0x2000000 clean obj all # cd /home/raspberry/fbsd
Installation
Damit haben Sie den langwierigsten Teil der Arbeit bereits hinter sich gebracht. Der folgende Installationsvorgang verlangt dennoch die gleiche Sorgfalt wie die zurückliegenden Schritte. Hängen Sie dazu nun das Firmware-Slice ein und kopieren Sie den Bootloader und die Device-Datenbank darauf (Listing 9). Außerdem editieren Sie die config.txt, damit sowohl CPU als auch GPU die Geräte korrekt ansprechen (Listing 10).
Listing 9
# mount -t msdosfs /dev/md0s1 /mnt # tar -C /mnt -xvzf /home/raspberry/freebsd-uboot-20140101.tar.gz # cp -iv /usr/obj/arm.armv6/home/raspberry/fbsd/sys/boot/arm/uboot/ubldr /mnt/ # cp -iv /usr/obj/arm.armv6/home/raspberry/fbsd/sys/RPI-B/rpi.dtb /mnt/devtree.dat
Listing 10
device_tree=devtree.dat device_tree_address=0x100 disable_commandline_tags=1 gpu_mem_512=GPUMEM gpu_mem_256=GPUMEM
Der Platzhalter GPUMEM beinhaltet die zuvor ermittelte Speichergröße für die GPU. Die Parameter gpu_mem_512 und gpu_mem_256 repräsentieren einen Raspberry Pi mit 512 beziehungsweise 256 MByte physikalischem Arbeitsspeicher. An dieser Stelle weicht die offizielle Dokumentation ab, sie legt zu diesem Zweck den Parameter gpu_mem nahe. Im Test zeigte sich jedoch, dass in der Praxis nur die Angabe gpu_mem_(512|256) die RAM-Größe korrekt einstellt.
Das Boot-Slice hängen Sie anschließend aus und mounten das zweite Slice. Dort installieren Sie das Betriebssystem nebst Kernel (Listing 11). Damit sind die Installationsarbeiten abgeschlossen, es fehlen nur noch wenige Einstellungsoptionen.
Listing 11
# umount /mnt # mount /dev/md0s2a /mnt # make KERNCONF=RPI-B DESTDIR=/mnt installkernel # make DESTDIR=/mnt DB_FROM_SRC=1 installworld distribution
Zunächst ergänzen Sie die Konfiguration des Kernel-Bootloaders in /mnt/boot/loader.rc. Damit der Kernel den Flattened Device Tree findet, teilen Sie ihm die Einsprungadresse mit:
fdt addr 0x100
Des Weiteren muss der Kernel wissen, von welchem Device er booten soll. Dafür zeichnet die Filesystem-Tabelle in /mnt/etc/fstab zuständig. Da außerdem meistens das Prozess-Filesystem benötigt wird, tragen Sie dieses gleich mit ein:





