diff --git a/Hardware/Rpi5.md b/Hardware/Rpi5.md new file mode 100644 index 00000000000..25c8fdde76c --- /dev/null +++ b/Hardware/Rpi5.md @@ -0,0 +1,100 @@ +--- +arm_hardware: true +cmake_plat: rpi5 +xcompiler_arg: -DAARCH64=1 -DRPI5_MEMORY=<1024,2048,4096,8192,16384> +platform: Raspberry Pi 5B +arch: ARMv8A +virtualization: true +iommu: false +soc: BCM2712 +cpu: Cortex-A76 +verification: [AARCH64] +Contrib: Ivan Velickovic +Maintained: seL4 Foundation +parent: /Hardware/ +SPDX-License-Identifier: CC-BY-SA-4.0 +SPDX-FileCopyrightText: 2026 Benjamin O'Brien (iiPython) +--- + +# Raspberry Pi 5 Model B + +{% include hw-info.html %} + +## Serial connection + +Serial TX and RX are located at GPIO pins 14 and 15 respectively. + +## U-Boot + +It's been confirmed that U-Boot versions 2024.07 and 2026.07-rc5 both function on the Pi 5 without issue. + +Make sure when building that you use the `rpi_arm64_defconfig` target, as U-Boot does not currently have the Raspberry Pi 5's device trees (as of June 2026), so you need it to use the one provided by firmware. + +In order to build U-Boot for the Raspberry Pi 5B, run the following commands: +```bash +git clone https://github.com/u-boot/u-boot.git u-boot +cd u-boot +make CROSS_COMPILE=aarch64-linux-gnu- rpi_arm64_defconfig +make CROSS_COMPILE=aarch64-linux-gnu- +``` + +In the `u-boot` directory you should now see the U-Boot image `u-boot.bin` indicating that U-Boot has successfully compiled. + +More information regarding U-Boot support for the Raspberry Pi can be found [here](https://u-boot.readthedocs.io/en/latest/board/broadcom/raspberrypi.html). + +## SD card setup + +The RPi5 boots from the first FAT32 partition on the microSD card. Where files are specified, +they should be located in the root directory of this partition. + +|Stage |Filename |Description |Source| +|-|-|-|-| +|FSBL |- |Mounts SD and loads SSBL |ROM | +|GPU firmware |start4.elf |Loads CPU bootloader and boots CPU | | +|Additional GPU firmware |fixup4.dat |Fixes memory locations used in start4.elf | | +|Usually the Linux kernel, but could also be U-Boot |u-boot.bin |U-Boot binary| Compiled using the instructions above | +||config.txt|U-Boot parameters |Add `arm_64bit=1` and `kernel=u-boot.bin` to the bottom of `config.txt` | +||uboot.env |U-Boot saved environment |Generated by U-Boot (default environment) bootcmd copied to bootcmd_orig bootcmd and bootdelay removed. This file will not exist when you first setup your SD card. | +||bcm2712-rpi-5-b.dtb | RPi5 device tree blob | | +||overlays/* | Device tree overlays | | + +## Getting seL4 onto your Raspberry Pi 5 + +The final step to test that you have setup your RPi5 correctly is to build and run the +seL4test project. + +You will see that the `init-build.sh` command contains the flag +`-DRPI5_MEMORY`, this specifies how much RAM exists on the Raspberry Pi that will run +the final seL4 image. Since seL4 needs to know the physical memory layout of the hardware +at build time, and the RPi4 has multiple models with different amounts of RAM, we have to +specify how much RAM the system will have when we build seL4. If `-DRPI5_MEMORY` is not supplied, +seL4 defaults to expecting 2GB of memory. + +{% include sel4test.md %} + +Now that we have a bootable image, we can run it on your RPi5. The following instructions describe +how to use a microSD card to boot seL4, using the seL4test image as well as the files mentioned +in the previous section. + +The first step is to copy the seL4 image onto the microSD card to the root directory. After +removing the card from your computer and inserting into your RPi5, you can power on the RPi5. + +Once the RPi5 boots up, you will see something like the following text from U-Boot: +``` +Hit any key to stop autoboot: 2 +``` + +At this point you want to interrupt the U-Boot booting process by pressing any key. + +You will now be in the U-Boot command prompt, type the following command: +``` +fatls mmc 0 +``` + +You should see the seL4test image you just placed on your microSD card. + +From here, you can load and boot the image using: +``` +fatload mmc 0 0x10000000 sel4test-driver-image-arm-bcm2712 +go 0x10000000 +``` diff --git a/projects/microkit/manual/2.2.0/index.md b/projects/microkit/manual/2.2.0/index.md index 5acc5c704d4..8eb67751020 100644 --- a/projects/microkit/manual/2.2.0/index.md +++ b/projects/microkit/manual/2.2.0/index.md @@ -1159,6 +1159,11 @@ The currently supported platforms are: * rpi4b_2gb * rpi4b_4gb * rpi4b_8gb +* rpi5b_1gb +* rpi5b_2gb +* rpi5b_4gb +* rpi5b_8gb +* rpi5b_16gb * serengeti * star64 * tqma8xqp1gb @@ -1398,6 +1403,31 @@ For initial board setup, please see the instructions on the When getting into the U-Boot console you want to load the Microkit binary image to address 0x10000000 and then run `go 0x10000000`. +For example, if you were to load the image via the MMC you would run the following +U-Boot commands: + + => fatload mmc 0 0x10000000 + => go 0x10000000 + +### Raspberry Pi 5B {#rpi5b_1gb} + +Support is available for the Raspberry Pi 5 Model B. There are multiple models of the +Raspberry Pi 5B that have different amounts of RAM, we have support for the 1GB, +2GB, 4GB, 8GB and 16GB models. Because the amount of RAM must be known statically by +seL4, the Microkit board names differ for each model: + +* `rpi5b_1gb` for 1GB of RAM. +* `rpi5b_2gb` for 2GB of RAM. +* `rpi5b_4gb` for 4GB of RAM. +* `rpi5b_8gb` for 8GB of RAM. +* `rpi5b_16gb` for 16GB of RAM. + +For initial board setup, please see the instructions on the +[seL4 website](https://docs.sel4.systems/Hardware/Rpi5.html). + +When getting into the U-Boot console you want to load the Microkit binary image to +address 0x10000000 and then run `go 0x10000000`. + For example, if you were to load the image via the MMC you would run the following U-Boot commands: