PI4 – USB Boot Ubuntu

Dies ist eine Zusammenfassung bestehender Artikel (Quellen: siehe unten) mit dem Ziel auf einem Raspberry Pi 4 von einer Festplatte via USB zu starten.

Ausgangsbasis ist ein frisches Raspbian Image auf einer Speicherkarte und ein Ubuntu Image auf einer USB Platte.

Einspielen der letzten Updates,  auch das neueste EEPROM image

—-

pi@raspberry:~ $ sudo su -
root@raspberry:~ # apt update
root@raspberry:~ # apt upgrade -y
root@raspberry:~ # rpi-update
root@raspberry:~ # shutdown -r now

Nach dem Neustart wird jetzt der Bootloader auf die aktuellste Version ausgetauscht.

pi@raspberry:~ $ sudo apt install rpi-eeprom -y

Ändern der Preferenzen bzgl. der Firmware

pi@raspberry:~ $ sudo sed -i  `s/critical/stable/g` /etc/default/rpi-eeprom-update

Installation des neuesten Bootloaders

pi@raspberry:~ $ sudo sed -i  `s/critical/stable/g` /etc/default/rpi-eeprom-update

pi@raspberry:~ $ sudo reboot

Nach dem Neustart mit dem neuen Bootloader kann man den aktuellen Status überprüfen.

pi@raspberry:~ $ vcgencmd bootloader_version
(Hier wird in der ersten Zeile das Datum der Erstellung des Bootloaders ausgegeben. Jul 16 2020)
pi@raspberry:~ $ vcgencmd bootloader_config
(Hier ist vor allem die letzte Zeile interessant. Sie gibt Auskunft über die Startreihenfolge. Sie sollte im konkreten Fall 0xf41 sein. Mehr dazu in der Doku)

Einhängen der USB Platte in das aktuelle Dateisystem und kopieren der relevanten Daten.

pi@raspberry:~ $ ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2

Wir brauchen sda1 – das ist die Boot Partition des USB Ubuntu und sda2 ist die Basis Partition des USB Ubuntu. Zuerst müssen die entsprechenden Verzeichnisse auf der Speicherkarte vorbereitet werden und dann kann eingehängt und kopiert werden.

pi@raspberry:~ $ sudo mkdir -p /mnt/usb/base
pi@raspberry:~ $ mount /dev/sda1 /mnt/usb
pi@raspberry:~ $ mount /dev/sda2 /mnt/usb/base
pi@raspberry:~ $ sudo cp /boot/*.elf /mnt/usb
pi@raspberry:~ $ sudo cp /boot/*.dat /mnt/usb

Im nächsten Schritt müssen wir die Umgebung noch etwas vorbereiten, damit ein Start auch wirklich automatisch geht. Entpacken des Kernels

pi@raspberry:~ $sudo zcat /mnt/usb/vmlinuz > /mnt/usb/vmlinux

Anpassen der Konfiguration (/mnt/usb/config.txt)

[pi4]
max_framebuffers=2
dtoverlay=vc4-fkms-v3d
boot_delay
kernel=vmlinux
initramfs initrd.img followkernel

Im Verzeichnis /mnt/usb noch ein Skript zum automatischen packen und entpacken der verschiedenen Kernelversionen.

pi@raspberry:~ $sudo vi /mnt/usb/auto_decompress_kernel
#!/bin/bash -e

#Set Variables
BTPATH=/boot/firmware
CKPATH=$BTPATH/vmlinuz
DKPATH=$BTPATH/vmlinux

#Check if compression needs to be done.
if [ -e $BTPATH/check.md5 ]; then
	if md5sum --status --ignore-missing -c $BTPATH/check.md5; then
	echo -e "\e[32mFiles have not changed, Decompression not needed\e[0m"
	exit 0
	else echo -e "\e[31mHash failed, kernel will be compressed\e[0m"
	fi
fi

#Backup the old decompressed kernel
mv $DKPATH $DKPATH.bak

if [ ! $? == 0 ]; then
	echo -e "\e[31mDECOMPRESSED KERNEL BACKUP FAILED!\e[0m"
	exit 1
else 	echo -e "\e[32mDecompressed kernel backup was successful\e[0m"
fi

#Decompress the new kernel
echo "Decompressing kernel: "$CKPATH".............."

zcat $CKPATH > $DKPATH

if [ ! $? == 0 ]; then
	echo -e "\e[31mKERNEL FAILED TO DECOMPRESS!\e[0m"
	exit 1
else
	echo -e "\e[32mKernel Decompressed Succesfully\e[0m"
fi

#Hash the new kernel for checking
md5sum $CKPATH $DKPATH > $BTPATH/check.md5

if [ ! $? == 0 ]; then
	echo -e "\e[31mMD5 GENERATION FAILED!\e[0m"
	else echo -e "\e[32mMD5 generated Succesfully\e[0m"
fi

#Exit
exit 0

Das Skript muss ausführbar gemacht werden

pi@raspberry:~ $ sudo chmod +x /mnt/usb/auto_decompress_kernel

Ein kleines Startscript zur Starthilfe brauchen wir auch noch.

pi@raspberry:~ $ sudo vi /mnt/usb/base/apt/apt.cond.d/999_decompress_rpi_kernel
DPkg::Post-Invoke {"/bin/bash /boot/firmware/auto_decompress_kernel"; };

Damit das Skript auch läuft

pi@raspberry:~ $ sudo chmod +x /mnt/usb/base/apt/apt.conf.d/999_decompress_rpi_kernel

Nach einem Neustart ohne Speicherkarte ist ein frisches Ubuntu verfügbar.

——

Quellen:
https://www.raspberrypi.org/forums/viewtopic.php?t=278791

https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md#usbmassstorageboot

https://tynick.com/blog/05-22-2020/raspberry-pi-4-boot-from-usb/

https://github.com/raspberrypi/rpi-eeprom

https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md

Ein Gedanke zu „PI4 – USB Boot Ubuntu“

  1. SSH Server ist bei Ubuntu 20.04 bereits aktiviert. Der Standardbenutzer ist “Ubuntu”, das Kennwort ist sicher in der Ubuntu Dokumentation auffindbar. Es muss aber beim ersten Login geändert werden. WLAN lässt sich auch schon konfigurieren. In diesem Fall die Datei /mnt/usb/firmware/network-config entsprechend anpassen….

Schreibe einen Kommentar