smol-gilbraltar/doc/dev.md

3.1 KiB

The best way to iterate and try gilbraltar is to use the netboot and an ethernet cable to update a folder containing everything needed for the RaspBerry Pi 5 and restart the RaspBerry Pi to download this new version of the Gilbraltar kernel.

At least, this method is quicker than plugging and unplugging the SD card with the new version of the kernel.

This document explains how to test Gilbraltar directly on the RaspBerry Pi 5 with the netboot.

Configuring the RaspBerry Pi 5

The first thing to do is to get an SD card and install another version of the firmware that allows netboot. So you need to install rpi-imager and "Network Book" ("Choose OS" -> "Misc Utility Images" -> "Bootloader (Pi 5 family)" -> Network Boot").

Once installed on the SD card, you need to put the card on the RaspBerry Pi 5 and plug in the power supply. The firmware will then be modified (to activate the netboot) and if all goes well, the LED on the RaspBerry Pi 5 should blink green.

At this point, you no longer need the SD card. All you need now is an ethernet cable. This needs to be connected between your RaspBerry Pi 5 and your computer (directly, without going through a router).

Dnsmasq and Ethernet

On your PC, you need to configure a dnsmasq service so that it is mounted on the Ethernet interface and can communicate with the RaspBerry Pi 5. To mount dnsmasq on the Ethernet interface, you need a properly configured virtual bridge and "plug" your Ethernet interface into this bridge:

$ sudo ip link add name raspberrypi type bridge
$ sudo ip addr add 192.168.42.1/24 dev raspberrypi
$ sudo ip link set eth0 master raspberrypi
$ cat >>/etc/dnsmasq.conf <<EOF
port=0
dhcp-range=192.168.42.16,192.168.42.64,12h
dhcp-option=1,255.255.255.0
dhcp-option=3,192.168.42.1
interface=raspberrypi
domain=raspberrypi.local
bind-interfaces
except-interface=lo
log-dhcp
log-queries
log-async
log-facility=/var/log/dnsmasq.log
enable-tftp
tftp-root=/srv/tftp
pxe-service=0,"Raspberry Pi Boot"
no-resolv
EOF
$ sudo ip link set dev raspberrypi up
$ sudo ip link set dev eth0 up

At this point, we've configured your eth0 Ethernet interface (where your ethernet cable is plugged into your computer) on a bridge raspberrypi running a dnsmasq service. This is configured to transmit what's in the /srv/tfpd folder to the RaspBerry Pi 5.

Files required

In this folder, you should essentially have 3 files:

  • bcm2712-rpi-5-b.dtb (available [here][bcm2712])
  • config.txt
  • kernel_2712.img

The kernel_2712.img is available via make kernel_2712.img. It's a mini kernel that initializes a whole range of elements, particularly UART, interrupts and memory.

The config.txt should contain this:

$ cat >/srv/tftp/config.txt <<EOF
arm_64bit=1
kernel_address=0x80000
kernel=kernel_2712.img
EOF

UART

To communicate with the Raspberry Pi 5, you need a “Waveshare USB to UART Debugger Module for Raspberry Pi 5”. This connects the RaspBerry Pi 5 debugger to your computer via USB. This way, you'll be able to see your RaspBerry Pi boot via the command:

$ sudo minicom -D /dev/ttyACM0