Raspberry Pi Kernel mit rbd Modul bauen

Aus RT-Wiki
Zur Navigation springen Zur Suche springen

Um auf einem Raspberry Proxmox Cluster, Container in einem RBD Storage zu installieren fehlte dem Kernel leider das rbd-Modul.

Diese Anleitung zeigt wie man einen Kernel mit rbd-Modul für den Raspberry Pi 4 mit Raspberry Pi OS (64 Bit) baut.

Raspberry Pi 4 (64 Bit)

Getestet auf Ubuntu 20.04.2 (64 Bit)

Abhängigkeiten und 64Bit Toolchain installieren:

apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev crossbuild-essential-arm64

Ins /home/<user>/ Verzeichnis wechseln und Git-Repo klonen:

git clone --depth=1 https://github.com/raspberrypi/linux

Konfiguration für den Raspberry Pi 4 64 Bit erstellen:

cd linux
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig

Die erstelle .config Datei mit dem Editor öffnen:

vi .config

Den Eintrag für das rbd Modul finden:

# CONFIG_BLK_DEV_RBD is not set

Kommentar entfernen und als Modul einbinden:

CONFIG_BLK_DEV_RBD=m

Kernel bauen:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs

Tipp: Mit dem Parameter -j$(nproc) führt der make-Befehl mehrere Jobs parallel aus (Soviele wie die CPU Kerne hat).

Alle Abfragen mit ENTER bestätigen


Lange warten...

Als nächstes muss die SD Karte des Raspberry gemounted werden.

Bei Ubuntu 20.04 mit Desktop geschieht dies automatisch sobald Ihr die SD Karte einlegt.

Ansonsten müsst Ihr sie manuell mounten:

mkdir mnt
mkdir mnt/fat32
mkdir mnt/ext4
sudo mount /dev/sdb6 mnt/fat32
sudo mount /dev/sdb7 mnt/ext4

Der Pfad zu den Partitionen (sdb6, sdb7) muss ggf. angepasst werden.


Bei der automatischen Einbindung unter Ubuntu heißen die Verzeichnisse eventuell anders:

- /mnt/fat32/media/<user>/boot

- /mnt/ext4/media/<user>/rootfs

Kernel Module auf SD Karte installieren

Bei manueller Einbindung:

sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt/ext4 modules_install

Bei automatische Einbindung:

sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/media/<user>/rootfs modules_install

Kernel auf SD Karte kopieren

Bei manueller Einbindung:

sudo cp /mnt/fat32/$KERNEL.img /mnt/fat32/$KERNEL-backup.img
sudo cp arch/arm64/boot/Image /mnt/fat32/$KERNEL.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /mnt/fat32/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /mnt/fat32/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /mnt/fat32/overlays/
sudo umount mnt/fat32
sudo umount mnt/ext4

Bei automatischer Einbindung:

sudo cp /media/<user>/boot/$KERNEL.img /media/<user>/boot/$KERNEL-backup.img
sudo cp arch/arm64/boot/Image /media/<user>/boot/$KERNEL.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /media/<user>/boot/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /media/<user>/boot/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /media/<user>/boot/overlays/
sudo umount /media/<user>/boot
sudo umount /media/<user>/rootfs

Kernel Update blockieren

Damit beim nächsten apt update/upgrade der Kernel nicht durch die offizielle Version ersetzt wird, blockieren wir die Updates:

sudo apt-mark hold raspberrypi-bootloader raspberrypi-kernel raspberrypi-kernel-headers

Quellen

https://www.raspberrypi.org/documentation/linux/kernel/building.md