smol-gilbraltar/doc/dev.md

94 lines
3.1 KiB
Markdown
Raw Normal View History

2025-01-12 11:30:33 +00:00
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:
```shell
$ 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:
```shell
$ 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:
```shell
$ sudo minicom -D /dev/ttyACM0
```