add rpi5 custom example

This commit is contained in:
2025-04-21 16:35:54 +02:00
parent 442f0de5fd
commit f4001aa44b
10 changed files with 325 additions and 0 deletions

View File

@@ -0,0 +1 @@
root=/dev/mmcblk0p2 rootwait console=tty1 console=ttyAMA0,115200

View File

@@ -0,0 +1,26 @@
# See http://buildroot.org/manual.html#rootfs-custom
# and http://elinux.org/RPiconfig for a description of config.txt syntax
kernel=Image
# To use an external initramfs file
#initramfs rootfs.cpio.gz
# Disable HDMI to reduce noise
hdmi_ignore_hotplug=1
hdmi_blanking=2
disable_splash=1
# gpu mem config (seems to be totally nececcarry - smaller than 32m does not boot on rpi3)
gpu_mem=32
# uart debug enable on GPIO14/15
enable_uart=1
uart_2ndstage=1
dtparam=uart0_console
dtdebug=1
dtoverlay=disable-bt
dtoverlay=disable-wifi
dtoverlay=uart1-pi5
dtoverlay=uart2-pi5

View File

@@ -0,0 +1,25 @@
image boot.vfat {
vfat {
files = {
#BOOT_FILES#
}
}
size = 32M
}
image sdcard.img {
hdimage {
}
partition boot {
partition-type = 0xC
bootable = "true"
image = "boot.vfat"
}
partition rootfs {
partition-type = 0x83
image = "rootfs.ext4"
}
}

View File

@@ -0,0 +1 @@
CONFIG_ARM64_4K_PAGES=y

View File

@@ -0,0 +1 @@
../linux/linux.hash

View File

@@ -0,0 +1,2 @@
# Locally calculated
sha256 dab3052783c68c46a5bc645b1c38d9705da995ab42823566518b62eb1fa1ef97 linux-576cc10e1ed50a9eacffc7a05c796051d7343ea4.tar.gz

View File

@@ -0,0 +1,16 @@
#!/bin/sh
set -u
set -e
# Add a console on tty1
if [ -e ${TARGET_DIR}/etc/inittab ]; then
grep -qE '^tty1::' ${TARGET_DIR}/etc/inittab || \
sed -i '/GENERIC_SERIAL/a\
tty1::respawn:/sbin/getty -L tty1 0 vt100 # HDMI console' ${TARGET_DIR}/etc/inittab
# systemd doesn't use /etc/inittab, enable getty.tty1.service instead
elif [ -d ${TARGET_DIR}/etc/systemd ]; then
mkdir -p "${TARGET_DIR}/etc/systemd/system/getty.target.wants"
ln -sf /lib/systemd/system/getty@.service \
"${TARGET_DIR}/etc/systemd/system/getty.target.wants/getty@tty1.service"
fi

View File

@@ -0,0 +1,44 @@
#!/bin/bash
set -e
BOARD_DIR="$(dirname $0)"
BOARD_NAME="$(basename ${BOARD_DIR})"
GENIMAGE_CFG="${BOARD_DIR}/genimage-${BOARD_NAME}.cfg"
GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp"
# generate genimage from template if a board specific variant doesn't exists
if [ ! -e "${GENIMAGE_CFG}" ]; then
GENIMAGE_CFG="${BINARIES_DIR}/genimage.cfg"
FILES=()
for i in "${BINARIES_DIR}"/*.dtb "${BINARIES_DIR}"/rpi-firmware/*; do
FILES+=( "${i#${BINARIES_DIR}/}" )
done
KERNEL=$(sed -n 's/^kernel=//p' "${BINARIES_DIR}/rpi-firmware/config.txt")
FILES+=( "${KERNEL}" )
BOOT_FILES=$(printf '\\t\\t\\t"%s",\\n' "${FILES[@]}")
sed "s|#BOOT_FILES#|${BOOT_FILES}|" "${BOARD_DIR}/genimage.cfg.in" \
> "${GENIMAGE_CFG}"
fi
# Pass an empty rootpath. genimage makes a full copy of the given rootpath to
# ${GENIMAGE_TMP}/root so passing TARGET_DIR would be a waste of time and disk
# space. We don't rely on genimage to build the rootfs image, just to insert a
# pre-built one in the disk image.
trap 'rm -rf "${ROOTPATH_TMP}"' EXIT
ROOTPATH_TMP="$(mktemp -d)"
rm -rf "${GENIMAGE_TMP}"
genimage \
--rootpath "${ROOTPATH_TMP}" \
--tmppath "${GENIMAGE_TMP}" \
--inputpath "${BINARIES_DIR}" \
--outputpath "${BINARIES_DIR}" \
--config "${GENIMAGE_CFG}"
exit $?

View File

@@ -0,0 +1,172 @@
Raspberry Pi
Intro
=====
These instructions apply to all models of the Raspberry Pi:
- the original models A and B,
- the "enhanced" models A+ and B+,
- the model B2 (aka Raspberry Pi 2)
- the model B3 (aka Raspberry Pi 3).
- the model B4 (aka Raspberry Pi 4).
- the model CM4 (aka Raspberry Pi Compute Module 4 and IO Board).
- the model B5 (aka Raspberry Pi 5).
How to build it
===============
Configure Buildroot
-------------------
There are several Raspberry Pi defconfig files in Buildroot, one for
each major variant, which you should base your work on:
For models A, B, A+ or B+:
$ make raspberrypi_defconfig
For model Zero (model A+ in smaller form factor):
$ make raspberrypi0_defconfig
or for model Zero W (model Zero with wireless LAN and Bluetooth):
$ make raspberrypi0w_defconfig
For model Zero 2 W (model B3 in smaller form factor):
$ make raspberrypizero2w_defconfig
For model 2 B:
$ make raspberrypi2_defconfig
For model 3 B and B+:
$ make raspberrypi3_defconfig
or for model 3 B and B+ (64 bit):
$ make raspberrypi3_64_defconfig
For model 4 B:
$ make raspberrypi4_defconfig
or for model 4 B (64 bit):
$ make raspberrypi4_64_defconfig
For model CM4 (on IO Board):
$ make raspberrypicm4io_defconfig
or for CM4 (on IO Board - 64 bit):
$ make raspberrypicm4io_64_defconfig
For model 5 B:
$ make raspberrypi5_defconfig
Build the rootfs
----------------
Note: you will need to have access to the network, since Buildroot will
download the packages' sources.
You may now build your rootfs with:
$ make
(This may take a while, consider getting yourself a coffee ;-) )
Result of the build
-------------------
After building, you should obtain this tree:
output/images/
+-- bcm2708-rpi-b-rev1.dtb [1]
+-- bcm2708-rpi-b.dtb [1]
+-- bcm2708-rpi-b-plus.dtb [1]
+-- bcm2708-rpi-cm.dtb [1]
+-- bcm2708-rpi-zero.dtb [1]
+-- bcm2708-rpi-zero-w.dtb [1]
+-- bcm2710-rpi-zero-2-w.dtb [1]
+-- bcm2709-rpi-2-b.dtb [1]
+-- bcm2710-rpi-2-b.dtb [1]
+-- bcm2710-rpi-3-b.dtb [1]
+-- bcm2710-rpi-3-b-plus.dtb [1]
+-- bcm2710-rpi-cm3.dtb [1]
+-- bcm2711-rpi-4-b.dtb [1]
+-- bcm2711-rpi-400.dtb [1]
+-- bcm2711-rpi-cm4.dtb [1]
+-- bcm2711-rpi-cm4s.dtb [1]
+-- bcm2712-rpi-5-b.dtb [1]
+-- bcm2712d0-rpi-5-b.dtb [1]
+-- boot.vfat
+-- rootfs.ext4
+-- rpi-firmware/
| +-- bootcode.bin
| +-- cmdline.txt
| +-- config.txt
| +-- fixup.dat [1]
| +-- fixup4.dat [1]
| +-- start.elf [1]
| +-- start4.elf [1]
| `-- overlays/ [2]
+-- sdcard.img
+-- Image [1]
`-- zImage [1]
[1] Not all of them will be present, depending on the RaspberryPi
model you are using.
[2] Only for the Raspberry Pi 3/4 Models (overlay miniuart-bt is needed
to enable the RPi3 serial console otherwise occupied by the bluetooth
chip). Alternative would be to disable the serial console in cmdline.txt
and /etc/inittab.
How to write the SD card
========================
Once the build process is finished you will have an image called "sdcard.img"
in the output/images/ directory.
Copy the bootable "sdcard.img" onto an SD card with "dd":
$ sudo dd if=output/images/sdcard.img of=/dev/sdX
Insert the SDcard into your Raspberry Pi, and power it up. Your new system
should come up now and start two consoles: one on the serial port on
the P1 header, one on the HDMI output where you can login using a USB
keyboard.
How to write to CM4 eMMC memory
===============================
For CM4 modules without eMMC memory see above for booting from SD card,
for CM4 modules with eMMC memory proceed as following:
- fit jumper on IO Board header J2 to disable eMMC boot
- connect IO Board micro USB port (J11 USB slave) to your host linux system
- power up CM4/IO Board (lsusb command should show a '0a5c:2711 Broadcom Corp.
BCM2711 Boot' device)
- run 'sudo ./host/bin/rpiboot', output should look like the following:
Waiting for BCM2835/6/7/2711...
Loading embedded: bootcode4.bin
Sending bootcode.bin
Successful read 4 bytes
Waiting for BCM2835/6/7/2711...
Loading embedded: bootcode4.bin
Second stage boot server
Loading embedded: start4.elf
File read: start4.elf
Second stage boot server done
- a USB mass storage device should show up (the CM4 eMMC memory), proceed
as described above to copy sdcard.img to it
- power down CM4/IO Board
- remove jumper on IO Board header J2 to re-enable eMMC boot
- power up CM4/IO Board