94 lines
3.1 KiB
Markdown
94 lines
3.1 KiB
Markdown
|
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
|
||
|
```
|