add rpi5 custom example
This commit is contained in:
1
board/raspberrypi5_custom/cmdline.txt
Normal file
1
board/raspberrypi5_custom/cmdline.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
root=/dev/mmcblk0p2 rootwait console=tty1 console=ttyAMA0,115200
|
||||||
26
board/raspberrypi5_custom/config.txt
Normal file
26
board/raspberrypi5_custom/config.txt
Normal 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
|
||||||
25
board/raspberrypi5_custom/genimage.cfg.in
Normal file
25
board/raspberrypi5_custom/genimage.cfg.in
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
1
board/raspberrypi5_custom/linux-4k-page-size.fragment
Normal file
1
board/raspberrypi5_custom/linux-4k-page-size.fragment
Normal file
@@ -0,0 +1 @@
|
|||||||
|
CONFIG_ARM64_4K_PAGES=y
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
../linux/linux.hash
|
||||||
2
board/raspberrypi5_custom/patches/linux/linux.hash
Normal file
2
board/raspberrypi5_custom/patches/linux/linux.hash
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Locally calculated
|
||||||
|
sha256 dab3052783c68c46a5bc645b1c38d9705da995ab42823566518b62eb1fa1ef97 linux-576cc10e1ed50a9eacffc7a05c796051d7343ea4.tar.gz
|
||||||
16
board/raspberrypi5_custom/post-build.sh
Executable file
16
board/raspberrypi5_custom/post-build.sh
Executable 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
|
||||||
44
board/raspberrypi5_custom/post-image.sh
Executable file
44
board/raspberrypi5_custom/post-image.sh
Executable 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 $?
|
||||||
172
board/raspberrypi5_custom/readme.txt
Normal file
172
board/raspberrypi5_custom/readme.txt
Normal 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
|
||||||
37
configs/raspberrypi5_custom_defconfig
Normal file
37
configs/raspberrypi5_custom_defconfig
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
BR2_aarch64=y
|
||||||
|
BR2_cortex_a76=y
|
||||||
|
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_6=y
|
||||||
|
BR2_TOOLCHAIN_BUILDROOT_CXX=y
|
||||||
|
BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_AURACASTER_SYSTEM_PATH)/board/raspberrypi5_custom/patches"
|
||||||
|
BR2_DOWNLOAD_FORCE_CHECK_HASHES=y
|
||||||
|
BR2_TARGET_GENERIC_ROOT_PASSWD="123"
|
||||||
|
BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
|
||||||
|
BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y
|
||||||
|
BR2_SYSTEM_DHCP="eth0"
|
||||||
|
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_AURACASTER_SYSTEM_PATH)/board/raspberrypi5_custom/post-build.sh"
|
||||||
|
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_AURACASTER_SYSTEM_PATH)/board/raspberrypi5_custom/post-image.sh"
|
||||||
|
BR2_LINUX_KERNEL=y
|
||||||
|
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
|
||||||
|
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,576cc10e1ed50a9eacffc7a05c796051d7343ea4)/linux-576cc10e1ed50a9eacffc7a05c796051d7343ea4.tar.gz"
|
||||||
|
BR2_LINUX_KERNEL_DEFCONFIG="bcm2712"
|
||||||
|
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_AURACASTER_SYSTEM_PATH)/board/raspberrypi5_custom/linux-4k-page-size.fragment"
|
||||||
|
BR2_LINUX_KERNEL_DTS_SUPPORT=y
|
||||||
|
BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2712-rpi-5-b broadcom/bcm2712d0-rpi-5-b"
|
||||||
|
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
|
||||||
|
BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
|
||||||
|
BR2_PACKAGE_XZ=y
|
||||||
|
BR2_PACKAGE_RPI_FIRMWARE=y
|
||||||
|
BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="$(BR2_EXTERNAL_AURACASTER_SYSTEM_PATH)/board/raspberrypi5_custom/config.txt"
|
||||||
|
BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="$(BR2_EXTERNAL_AURACASTER_SYSTEM_PATH)/board/raspberrypi5_custom/cmdline.txt"
|
||||||
|
# BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set
|
||||||
|
BR2_PACKAGE_DROPBEAR=y
|
||||||
|
BR2_PACKAGE_KMOD=y
|
||||||
|
BR2_PACKAGE_KMOD_TOOLS=y
|
||||||
|
BR2_TARGET_ROOTFS_EXT2=y
|
||||||
|
BR2_TARGET_ROOTFS_EXT2_4=y
|
||||||
|
BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
|
||||||
|
# BR2_TARGET_ROOTFS_TAR is not set
|
||||||
|
BR2_PACKAGE_HOST_DOSFSTOOLS=y
|
||||||
|
BR2_PACKAGE_HOST_GENIMAGE=y
|
||||||
|
BR2_PACKAGE_HOST_KMOD_XZ=y
|
||||||
|
BR2_PACKAGE_HOST_MTOOLS=y
|
||||||
Reference in New Issue
Block a user