Message ID | 20240209204545.86221-1-gael.portay@rtone.fr |
---|---|
State | Not Applicable |
Headers | show |
Series | [v3,1/1] configs: add raspberrypi 5 defconfig | expand |
Sorry for that double post. On Fri Feb 9, 2024 at 9:45 PM CET, Gaël PORTAY wrote: > This configuration builds an image for the RaspberryPi 5. > > Cc: Adam Duskett <adam.duskett@amarulasolutions.com> > Cc: Yann E. MORIN <yann.morin.1998@free.fr> > Signed-off-by: Gaël PORTAY <gael.portay@rtone.fr> > --- > Dear maintainers, > > That change adds the raspberrypi5_defconfig for the Raspberry Pi 5 > 64-bit. > > It uses the defconfig bcm2712_defconfig[2] and the device-tree source > bcm2712-rpi-5-b.dts[3]. > > Note: The kernel defconfig defaults to 16k page-size; a kernel fragment > is added to use a 4k page-size to compile and run using all toolchains. > > The Raspberry Pi 5 has now a dedicated debug UART connector[4] (it is > always active and enabled; there is no more need to enable_uart=1 in the > file config.txt). > > The UART device name changes to ttyAMA10 and the command line has to be > updated in the file cmdline.txt. > > The Raspberry Pi 5 only supports 64-bit kernel[5]. > > Tested on internal toolchain: > > [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2023.11-1117-g95a905918c) 12.3.0, GNU ld (GNU Binutils) 2.40) #1 SMP PREEMPT Fri Feb 9 20:09:08 CET 2024 > (...) > # grep PageSize /proc/1/smaps | sort -u > KernelPageSize: 4 kB > MMUPageSize: 4 kB > > Tested on external Bootlin toolchain: > > [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-linux-gcc.br_real (Buildroot 2021.11-10014-g6257e8c) 13.2.0, GNU ld (GNU Binutils) 2.41) #1 SMP PREEMPT Fri Feb 9 20:54:08 CET 2024 > (...) > # grep PageSize /proc/1/smaps | sort -u > KernelPageSize: 4 kB > MMUPageSize: 4 kB > > Tested on external ARM toolchain: > > [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-none-linux-gnu-gcc (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 13.2.1 20231009, GNU ld (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 2.41.0.20231009) #1 SMP PREEMPT Fri Feb 9 21:00:24 CET 2024 > (...) > # grep PageSize /proc/1/smaps | sort -u > KernelPageSize: 4 kB > MMUPageSize: 4 kB > > Changes since RFC: > - Update README to add model Pi 5 B > - Add support for 64K MMU page-size for ARM64 and Raspberry Pi 5 > - Add Raspberry Pi 5 specific cmdline_5.txt to set its console on its > debug uart (ttyAMA10 instead of ttyAMA0) > - Remove 32-bit variant since Raspberry Pi 5 supports booting a 64-bit > kernel only > - Remove the property arm_64bit=1 from config_5_64bit.txt > - Remove the _64bit suffix > - Remove unecessary Pi 5 variant from package rpi-firmware > > Changes since v1: > - Rebase on top of master > - Remove the bumps for the rpi-firmware and linux packages > - Bump the kernel to linux-17f135b742c4edb340afb365873c3a574f7e16cb > (6.1.61, i.e. the same version as the other raspberrypi defconfigs) > > Changes since v2: > - Rebase on top of master (remove applied patch) > - Add a kernel fragment to force 4k page-size > - Remove BR2_ARM64_PAGE_SIZE_16K from the board's defconfig > > [0]: https://www.raspberrypi.com/documentation/computers/raspberry-pi-5.html#introduction > [1]: https://www.raspberrypi.com/documentation/computers/config_txt.html#kernel > [2]: https://github.com/raspberrypi/linux/commit/9cfb379147f803b0362b0fe249e5b145d232bea3 > [3]: https://github.com/raspberrypi/linux/commit/1196bf1a7736ff0ab79f5012fa84082e298031a7 > [4]: https://www.raspberrypi.com/documentation/computers/raspberry-pi-5.html#uart-connector > [5]: https://www.raspberrypi.com/documentation/computers/config_txt.html#arm_64bit > > Kind Regards, > Gaël PORTAY > > board/raspberrypi/cmdline_5.txt | 1 + > board/raspberrypi/config_5.txt | 14 ++++++ > board/raspberrypi/linux-4k-page-size.fragment | 1 + > board/raspberrypi/readme.txt | 6 +++ > board/raspberrypi5 | 1 + > configs/raspberrypi5_defconfig | 47 +++++++++++++++++++ > 6 files changed, 70 insertions(+) > create mode 100644 board/raspberrypi/cmdline_5.txt > create mode 100644 board/raspberrypi/config_5.txt > create mode 100644 board/raspberrypi/linux-4k-page-size.fragment > create mode 120000 board/raspberrypi5 > create mode 100644 configs/raspberrypi5_defconfig > > diff --git a/board/raspberrypi/cmdline_5.txt b/board/raspberrypi/cmdline_5.txt > new file mode 100644 > index 0000000000..ac457353e2 > --- /dev/null > +++ b/board/raspberrypi/cmdline_5.txt > @@ -0,0 +1 @@ > +root=/dev/mmcblk0p2 rootwait console=tty1 console=ttyAMA10,115200 > diff --git a/board/raspberrypi/config_5.txt b/board/raspberrypi/config_5.txt > new file mode 100644 > index 0000000000..bbed19fe46 > --- /dev/null > +++ b/board/raspberrypi/config_5.txt > @@ -0,0 +1,14 @@ > +# Please note that this is only a sample, we recommend you to change it to fit > +# your needs. > +# You should override this file using BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE. > +# 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 overscan assuming the display supports displaying the full resolution > +# If the text shown on the screen disappears off the edge, comment this out > +disable_overscan=1 > diff --git a/board/raspberrypi/linux-4k-page-size.fragment b/board/raspberrypi/linux-4k-page-size.fragment > new file mode 100644 > index 0000000000..5df91df1aa > --- /dev/null > +++ b/board/raspberrypi/linux-4k-page-size.fragment > @@ -0,0 +1 @@ > +CONFIG_ARM64_4K_PAGES=y > diff --git a/board/raspberrypi/readme.txt b/board/raspberrypi/readme.txt > index 9202b5ff37..aa6421ea01 100644 > --- a/board/raspberrypi/readme.txt > +++ b/board/raspberrypi/readme.txt > @@ -10,6 +10,7 @@ These instructions apply to all models of the Raspberry Pi: > - 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 > =============== > @@ -64,6 +65,10 @@ or for CM4 (on IO Board - 64 bit): > > $ make raspberrypicm4io_64_defconfig > > +For model 5 B: > + > + $ make raspberrypi5_defconfig > + > Build the rootfs > ---------------- > > @@ -94,6 +99,7 @@ After building, you should obtain this tree: > +-- bcm2710-rpi-cm3.dtb [1] > +-- bcm2711-rpi-4-b.dtb [1] > +-- bcm2711-rpi-cm4.dtb [1] > + +-- bcm2712-rpi-5-b.dtb [1] > +-- bcm2837-rpi-3-b.dtb [1] > +-- boot.vfat > +-- rootfs.ext4 > diff --git a/board/raspberrypi5 b/board/raspberrypi5 > new file mode 120000 > index 0000000000..fcdafc81ed > --- /dev/null > +++ b/board/raspberrypi5 > @@ -0,0 +1 @@ > +raspberrypi > \ No newline at end of file > diff --git a/configs/raspberrypi5_defconfig b/configs/raspberrypi5_defconfig > new file mode 100644 > index 0000000000..d0760824bd > --- /dev/null > +++ b/configs/raspberrypi5_defconfig > @@ -0,0 +1,47 @@ > +BR2_aarch64=y > +BR2_cortex_a76_a55=y > +BR2_ARM_FPU_VFPV4=y > + > +BR2_TOOLCHAIN_BUILDROOT_CXX=y > + > +BR2_SYSTEM_DHCP="eth0" > + > +# Linux headers same as kernel, a 6.1 series > +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_1=y > + > +BR2_LINUX_KERNEL=y > +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/raspberrypi/linux-4k-page-size.fragment" > +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y > +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,17f135b742c4edb340afb365873c3a574f7e16cb)/linux-17f135b742c4edb340afb365873c3a574f7e16cb.tar.gz" > +BR2_LINUX_KERNEL_DEFCONFIG="bcm2712" > + > +# Build the DTB from the kernel sources > +BR2_LINUX_KERNEL_DTS_SUPPORT=y > +BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2712-rpi-5-b" > + > +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y > + > +BR2_PACKAGE_RPI_FIRMWARE=y > +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi5/config_5.txt" > +BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="board/raspberrypi5/cmdline_5.txt" > +# BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set > + > +# Required tools to create the SD image > +BR2_PACKAGE_HOST_DOSFSTOOLS=y > +BR2_PACKAGE_HOST_GENIMAGE=y > +BR2_PACKAGE_HOST_MTOOLS=y > + > +# Filesystem / image > +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_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi5/post-build.sh" > +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi5/post-image.sh" > + > +# Enable compressed kernel module support > +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y > +BR2_PACKAGE_KMOD_TOOLS=y > +BR2_PACKAGE_XZ=y > +BR2_PACKAGE_KMOD=y > +BR2_PACKAGE_HOST_KMOD_XZ=y > -- > 2.43.0
Yann, all, Any chance to get it merged for the upcomming release? No offence :) Regards, Gaël On Fri Feb 9, 2024 at 9:50 PM CET, Gaël PORTAY wrote: > Sorry for that double post. > > On Fri Feb 9, 2024 at 9:45 PM CET, Gaël PORTAY wrote: > > This configuration builds an image for the RaspberryPi 5. > > > > Cc: Adam Duskett <adam.duskett@amarulasolutions.com> > > Cc: Yann E. MORIN <yann.morin.1998@free.fr> > > Signed-off-by: Gaël PORTAY <gael.portay@rtone.fr> > > --- > > Dear maintainers, > > > > That change adds the raspberrypi5_defconfig for the Raspberry Pi 5 > > 64-bit. > > > > It uses the defconfig bcm2712_defconfig[2] and the device-tree source > > bcm2712-rpi-5-b.dts[3]. > > > > Note: The kernel defconfig defaults to 16k page-size; a kernel fragment > > is added to use a 4k page-size to compile and run using all toolchains. > > > > The Raspberry Pi 5 has now a dedicated debug UART connector[4] (it is > > always active and enabled; there is no more need to enable_uart=1 in the > > file config.txt). > > > > The UART device name changes to ttyAMA10 and the command line has to be > > updated in the file cmdline.txt. > > > > The Raspberry Pi 5 only supports 64-bit kernel[5]. > > > > Tested on internal toolchain: > > > > [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2023.11-1117-g95a905918c) 12.3.0, GNU ld (GNU Binutils) 2.40) #1 SMP PREEMPT Fri Feb 9 20:09:08 CET 2024 > > (...) > > # grep PageSize /proc/1/smaps | sort -u > > KernelPageSize: 4 kB > > MMUPageSize: 4 kB > > > > Tested on external Bootlin toolchain: > > > > [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-linux-gcc.br_real (Buildroot 2021.11-10014-g6257e8c) 13.2.0, GNU ld (GNU Binutils) 2.41) #1 SMP PREEMPT Fri Feb 9 20:54:08 CET 2024 > > (...) > > # grep PageSize /proc/1/smaps | sort -u > > KernelPageSize: 4 kB > > MMUPageSize: 4 kB > > > > Tested on external ARM toolchain: > > > > [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-none-linux-gnu-gcc (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 13.2.1 20231009, GNU ld (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 2.41.0.20231009) #1 SMP PREEMPT Fri Feb 9 21:00:24 CET 2024 > > (...) > > # grep PageSize /proc/1/smaps | sort -u > > KernelPageSize: 4 kB > > MMUPageSize: 4 kB > > > > Changes since RFC: > > - Update README to add model Pi 5 B > > - Add support for 64K MMU page-size for ARM64 and Raspberry Pi 5 > > - Add Raspberry Pi 5 specific cmdline_5.txt to set its console on its > > debug uart (ttyAMA10 instead of ttyAMA0) > > - Remove 32-bit variant since Raspberry Pi 5 supports booting a 64-bit > > kernel only > > - Remove the property arm_64bit=1 from config_5_64bit.txt > > - Remove the _64bit suffix > > - Remove unecessary Pi 5 variant from package rpi-firmware > > > > Changes since v1: > > - Rebase on top of master > > - Remove the bumps for the rpi-firmware and linux packages > > - Bump the kernel to linux-17f135b742c4edb340afb365873c3a574f7e16cb > > (6.1.61, i.e. the same version as the other raspberrypi defconfigs) > > > > Changes since v2: > > - Rebase on top of master (remove applied patch) > > - Add a kernel fragment to force 4k page-size > > - Remove BR2_ARM64_PAGE_SIZE_16K from the board's defconfig > > > > [0]: https://www.raspberrypi.com/documentation/computers/raspberry-pi-5.html#introduction > > [1]: https://www.raspberrypi.com/documentation/computers/config_txt.html#kernel > > [2]: https://github.com/raspberrypi/linux/commit/9cfb379147f803b0362b0fe249e5b145d232bea3 > > [3]: https://github.com/raspberrypi/linux/commit/1196bf1a7736ff0ab79f5012fa84082e298031a7 > > [4]: https://www.raspberrypi.com/documentation/computers/raspberry-pi-5.html#uart-connector > > [5]: https://www.raspberrypi.com/documentation/computers/config_txt.html#arm_64bit > > > > Kind Regards, > > Gaël PORTAY > > > > board/raspberrypi/cmdline_5.txt | 1 + > > board/raspberrypi/config_5.txt | 14 ++++++ > > board/raspberrypi/linux-4k-page-size.fragment | 1 + > > board/raspberrypi/readme.txt | 6 +++ > > board/raspberrypi5 | 1 + > > configs/raspberrypi5_defconfig | 47 +++++++++++++++++++ > > 6 files changed, 70 insertions(+) > > create mode 100644 board/raspberrypi/cmdline_5.txt > > create mode 100644 board/raspberrypi/config_5.txt > > create mode 100644 board/raspberrypi/linux-4k-page-size.fragment > > create mode 120000 board/raspberrypi5 > > create mode 100644 configs/raspberrypi5_defconfig > > > > diff --git a/board/raspberrypi/cmdline_5.txt b/board/raspberrypi/cmdline_5.txt > > new file mode 100644 > > index 0000000000..ac457353e2 > > --- /dev/null > > +++ b/board/raspberrypi/cmdline_5.txt > > @@ -0,0 +1 @@ > > +root=/dev/mmcblk0p2 rootwait console=tty1 console=ttyAMA10,115200 > > diff --git a/board/raspberrypi/config_5.txt b/board/raspberrypi/config_5.txt > > new file mode 100644 > > index 0000000000..bbed19fe46 > > --- /dev/null > > +++ b/board/raspberrypi/config_5.txt > > @@ -0,0 +1,14 @@ > > +# Please note that this is only a sample, we recommend you to change it to fit > > +# your needs. > > +# You should override this file using BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE. > > +# 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 overscan assuming the display supports displaying the full resolution > > +# If the text shown on the screen disappears off the edge, comment this out > > +disable_overscan=1 > > diff --git a/board/raspberrypi/linux-4k-page-size.fragment b/board/raspberrypi/linux-4k-page-size.fragment > > new file mode 100644 > > index 0000000000..5df91df1aa > > --- /dev/null > > +++ b/board/raspberrypi/linux-4k-page-size.fragment > > @@ -0,0 +1 @@ > > +CONFIG_ARM64_4K_PAGES=y > > diff --git a/board/raspberrypi/readme.txt b/board/raspberrypi/readme.txt > > index 9202b5ff37..aa6421ea01 100644 > > --- a/board/raspberrypi/readme.txt > > +++ b/board/raspberrypi/readme.txt > > @@ -10,6 +10,7 @@ These instructions apply to all models of the Raspberry Pi: > > - 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 > > =============== > > @@ -64,6 +65,10 @@ or for CM4 (on IO Board - 64 bit): > > > > $ make raspberrypicm4io_64_defconfig > > > > +For model 5 B: > > + > > + $ make raspberrypi5_defconfig > > + > > Build the rootfs > > ---------------- > > > > @@ -94,6 +99,7 @@ After building, you should obtain this tree: > > +-- bcm2710-rpi-cm3.dtb [1] > > +-- bcm2711-rpi-4-b.dtb [1] > > +-- bcm2711-rpi-cm4.dtb [1] > > + +-- bcm2712-rpi-5-b.dtb [1] > > +-- bcm2837-rpi-3-b.dtb [1] > > +-- boot.vfat > > +-- rootfs.ext4 > > diff --git a/board/raspberrypi5 b/board/raspberrypi5 > > new file mode 120000 > > index 0000000000..fcdafc81ed > > --- /dev/null > > +++ b/board/raspberrypi5 > > @@ -0,0 +1 @@ > > +raspberrypi > > \ No newline at end of file > > diff --git a/configs/raspberrypi5_defconfig b/configs/raspberrypi5_defconfig > > new file mode 100644 > > index 0000000000..d0760824bd > > --- /dev/null > > +++ b/configs/raspberrypi5_defconfig > > @@ -0,0 +1,47 @@ > > +BR2_aarch64=y > > +BR2_cortex_a76_a55=y > > +BR2_ARM_FPU_VFPV4=y > > + > > +BR2_TOOLCHAIN_BUILDROOT_CXX=y > > + > > +BR2_SYSTEM_DHCP="eth0" > > + > > +# Linux headers same as kernel, a 6.1 series > > +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_1=y > > + > > +BR2_LINUX_KERNEL=y > > +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/raspberrypi/linux-4k-page-size.fragment" > > +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y > > +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,17f135b742c4edb340afb365873c3a574f7e16cb)/linux-17f135b742c4edb340afb365873c3a574f7e16cb.tar.gz" > > +BR2_LINUX_KERNEL_DEFCONFIG="bcm2712" > > + > > +# Build the DTB from the kernel sources > > +BR2_LINUX_KERNEL_DTS_SUPPORT=y > > +BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2712-rpi-5-b" > > + > > +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y > > + > > +BR2_PACKAGE_RPI_FIRMWARE=y > > +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi5/config_5.txt" > > +BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="board/raspberrypi5/cmdline_5.txt" > > +# BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set > > + > > +# Required tools to create the SD image > > +BR2_PACKAGE_HOST_DOSFSTOOLS=y > > +BR2_PACKAGE_HOST_GENIMAGE=y > > +BR2_PACKAGE_HOST_MTOOLS=y > > + > > +# Filesystem / image > > +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_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi5/post-build.sh" > > +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi5/post-image.sh" > > + > > +# Enable compressed kernel module support > > +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y > > +BR2_PACKAGE_KMOD_TOOLS=y > > +BR2_PACKAGE_XZ=y > > +BR2_PACKAGE_KMOD=y > > +BR2_PACKAGE_HOST_KMOD_XZ=y > > -- > > 2.43.0
Reviewed-by: Adam Duskett <adam.duskett@amarulasolutions.com> Tested-by: Adam Duskett <adam.duskett@amarulasolutions.com> In fact, this was used at FOSDEM, and works with Flutter. On Mon, Feb 26, 2024 at 4:43 AM Gaël PORTAY <gael.portay@rtone.fr> wrote: > > Yann, all, > > Any chance to get it merged for the upcomming release? No offence :) > > Regards, > Gaël > > On Fri Feb 9, 2024 at 9:50 PM CET, Gaël PORTAY wrote: > > Sorry for that double post. > > > > On Fri Feb 9, 2024 at 9:45 PM CET, Gaël PORTAY wrote: > > > This configuration builds an image for the RaspberryPi 5. > > > > > > Cc: Adam Duskett <adam.duskett@amarulasolutions.com> > > > Cc: Yann E. MORIN <yann.morin.1998@free.fr> > > > Signed-off-by: Gaël PORTAY <gael.portay@rtone.fr> > > > --- > > > Dear maintainers, > > > > > > That change adds the raspberrypi5_defconfig for the Raspberry Pi 5 > > > 64-bit. > > > > > > It uses the defconfig bcm2712_defconfig[2] and the device-tree source > > > bcm2712-rpi-5-b.dts[3]. > > > > > > Note: The kernel defconfig defaults to 16k page-size; a kernel fragment > > > is added to use a 4k page-size to compile and run using all toolchains. > > > > > > The Raspberry Pi 5 has now a dedicated debug UART connector[4] (it is > > > always active and enabled; there is no more need to enable_uart=1 in the > > > file config.txt). > > > > > > The UART device name changes to ttyAMA10 and the command line has to be > > > updated in the file cmdline.txt. > > > > > > The Raspberry Pi 5 only supports 64-bit kernel[5]. > > > > > > Tested on internal toolchain: > > > > > > [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2023.11-1117-g95a905918c) 12.3.0, GNU ld (GNU Binutils) 2.40) #1 SMP PREEMPT Fri Feb 9 20:09:08 CET 2024 > > > (...) > > > # grep PageSize /proc/1/smaps | sort -u > > > KernelPageSize: 4 kB > > > MMUPageSize: 4 kB > > > > > > Tested on external Bootlin toolchain: > > > > > > [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-linux-gcc.br_real (Buildroot 2021.11-10014-g6257e8c) 13.2.0, GNU ld (GNU Binutils) 2.41) #1 SMP PREEMPT Fri Feb 9 20:54:08 CET 2024 > > > (...) > > > # grep PageSize /proc/1/smaps | sort -u > > > KernelPageSize: 4 kB > > > MMUPageSize: 4 kB > > > > > > Tested on external ARM toolchain: > > > > > > [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-none-linux-gnu-gcc (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 13.2.1 20231009, GNU ld (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 2.41.0.20231009) #1 SMP PREEMPT Fri Feb 9 21:00:24 CET 2024 > > > (...) > > > # grep PageSize /proc/1/smaps | sort -u > > > KernelPageSize: 4 kB > > > MMUPageSize: 4 kB > > > > > > Changes since RFC: > > > - Update README to add model Pi 5 B > > > - Add support for 64K MMU page-size for ARM64 and Raspberry Pi 5 > > > - Add Raspberry Pi 5 specific cmdline_5.txt to set its console on its > > > debug uart (ttyAMA10 instead of ttyAMA0) > > > - Remove 32-bit variant since Raspberry Pi 5 supports booting a 64-bit > > > kernel only > > > - Remove the property arm_64bit=1 from config_5_64bit.txt > > > - Remove the _64bit suffix > > > - Remove unecessary Pi 5 variant from package rpi-firmware > > > > > > Changes since v1: > > > - Rebase on top of master > > > - Remove the bumps for the rpi-firmware and linux packages > > > - Bump the kernel to linux-17f135b742c4edb340afb365873c3a574f7e16cb > > > (6.1.61, i.e. the same version as the other raspberrypi defconfigs) > > > > > > Changes since v2: > > > - Rebase on top of master (remove applied patch) > > > - Add a kernel fragment to force 4k page-size > > > - Remove BR2_ARM64_PAGE_SIZE_16K from the board's defconfig > > > > > > [0]: https://www.raspberrypi.com/documentation/computers/raspberry-pi-5.html#introduction > > > [1]: https://www.raspberrypi.com/documentation/computers/config_txt.html#kernel > > > [2]: https://github.com/raspberrypi/linux/commit/9cfb379147f803b0362b0fe249e5b145d232bea3 > > > [3]: https://github.com/raspberrypi/linux/commit/1196bf1a7736ff0ab79f5012fa84082e298031a7 > > > [4]: https://www.raspberrypi.com/documentation/computers/raspberry-pi-5.html#uart-connector > > > [5]: https://www.raspberrypi.com/documentation/computers/config_txt.html#arm_64bit > > > > > > Kind Regards, > > > Gaël PORTAY > > > > > > board/raspberrypi/cmdline_5.txt | 1 + > > > board/raspberrypi/config_5.txt | 14 ++++++ > > > board/raspberrypi/linux-4k-page-size.fragment | 1 + > > > board/raspberrypi/readme.txt | 6 +++ > > > board/raspberrypi5 | 1 + > > > configs/raspberrypi5_defconfig | 47 +++++++++++++++++++ > > > 6 files changed, 70 insertions(+) > > > create mode 100644 board/raspberrypi/cmdline_5.txt > > > create mode 100644 board/raspberrypi/config_5.txt > > > create mode 100644 board/raspberrypi/linux-4k-page-size.fragment > > > create mode 120000 board/raspberrypi5 > > > create mode 100644 configs/raspberrypi5_defconfig > > > > > > diff --git a/board/raspberrypi/cmdline_5.txt b/board/raspberrypi/cmdline_5.txt > > > new file mode 100644 > > > index 0000000000..ac457353e2 > > > --- /dev/null > > > +++ b/board/raspberrypi/cmdline_5.txt > > > @@ -0,0 +1 @@ > > > +root=/dev/mmcblk0p2 rootwait console=tty1 console=ttyAMA10,115200 > > > diff --git a/board/raspberrypi/config_5.txt b/board/raspberrypi/config_5.txt > > > new file mode 100644 > > > index 0000000000..bbed19fe46 > > > --- /dev/null > > > +++ b/board/raspberrypi/config_5.txt > > > @@ -0,0 +1,14 @@ > > > +# Please note that this is only a sample, we recommend you to change it to fit > > > +# your needs. > > > +# You should override this file using BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE. > > > +# 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 overscan assuming the display supports displaying the full resolution > > > +# If the text shown on the screen disappears off the edge, comment this out > > > +disable_overscan=1 > > > diff --git a/board/raspberrypi/linux-4k-page-size.fragment b/board/raspberrypi/linux-4k-page-size.fragment > > > new file mode 100644 > > > index 0000000000..5df91df1aa > > > --- /dev/null > > > +++ b/board/raspberrypi/linux-4k-page-size.fragment > > > @@ -0,0 +1 @@ > > > +CONFIG_ARM64_4K_PAGES=y > > > diff --git a/board/raspberrypi/readme.txt b/board/raspberrypi/readme.txt > > > index 9202b5ff37..aa6421ea01 100644 > > > --- a/board/raspberrypi/readme.txt > > > +++ b/board/raspberrypi/readme.txt > > > @@ -10,6 +10,7 @@ These instructions apply to all models of the Raspberry Pi: > > > - 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 > > > =============== > > > @@ -64,6 +65,10 @@ or for CM4 (on IO Board - 64 bit): > > > > > > $ make raspberrypicm4io_64_defconfig > > > > > > +For model 5 B: > > > + > > > + $ make raspberrypi5_defconfig > > > + > > > Build the rootfs > > > ---------------- > > > > > > @@ -94,6 +99,7 @@ After building, you should obtain this tree: > > > +-- bcm2710-rpi-cm3.dtb [1] > > > +-- bcm2711-rpi-4-b.dtb [1] > > > +-- bcm2711-rpi-cm4.dtb [1] > > > + +-- bcm2712-rpi-5-b.dtb [1] > > > +-- bcm2837-rpi-3-b.dtb [1] > > > +-- boot.vfat > > > +-- rootfs.ext4 > > > diff --git a/board/raspberrypi5 b/board/raspberrypi5 > > > new file mode 120000 > > > index 0000000000..fcdafc81ed > > > --- /dev/null > > > +++ b/board/raspberrypi5 > > > @@ -0,0 +1 @@ > > > +raspberrypi > > > \ No newline at end of file > > > diff --git a/configs/raspberrypi5_defconfig b/configs/raspberrypi5_defconfig > > > new file mode 100644 > > > index 0000000000..d0760824bd > > > --- /dev/null > > > +++ b/configs/raspberrypi5_defconfig > > > @@ -0,0 +1,47 @@ > > > +BR2_aarch64=y > > > +BR2_cortex_a76_a55=y > > > +BR2_ARM_FPU_VFPV4=y > > > + > > > +BR2_TOOLCHAIN_BUILDROOT_CXX=y > > > + > > > +BR2_SYSTEM_DHCP="eth0" > > > + > > > +# Linux headers same as kernel, a 6.1 series > > > +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_1=y > > > + > > > +BR2_LINUX_KERNEL=y > > > +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/raspberrypi/linux-4k-page-size.fragment" > > > +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y > > > +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,17f135b742c4edb340afb365873c3a574f7e16cb)/linux-17f135b742c4edb340afb365873c3a574f7e16cb.tar.gz" > > > +BR2_LINUX_KERNEL_DEFCONFIG="bcm2712" > > > + > > > +# Build the DTB from the kernel sources > > > +BR2_LINUX_KERNEL_DTS_SUPPORT=y > > > +BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2712-rpi-5-b" > > > + > > > +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y > > > + > > > +BR2_PACKAGE_RPI_FIRMWARE=y > > > +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi5/config_5.txt" > > > +BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="board/raspberrypi5/cmdline_5.txt" > > > +# BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set > > > + > > > +# Required tools to create the SD image > > > +BR2_PACKAGE_HOST_DOSFSTOOLS=y > > > +BR2_PACKAGE_HOST_GENIMAGE=y > > > +BR2_PACKAGE_HOST_MTOOLS=y > > > + > > > +# Filesystem / image > > > +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_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi5/post-build.sh" > > > +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi5/post-image.sh" > > > + > > > +# Enable compressed kernel module support > > > +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y > > > +BR2_PACKAGE_KMOD_TOOLS=y > > > +BR2_PACKAGE_XZ=y > > > +BR2_PACKAGE_KMOD=y > > > +BR2_PACKAGE_HOST_KMOD_XZ=y > > > -- > > > 2.43.0 >
diff --git a/board/raspberrypi/cmdline_5.txt b/board/raspberrypi/cmdline_5.txt new file mode 100644 index 0000000000..ac457353e2 --- /dev/null +++ b/board/raspberrypi/cmdline_5.txt @@ -0,0 +1 @@ +root=/dev/mmcblk0p2 rootwait console=tty1 console=ttyAMA10,115200 diff --git a/board/raspberrypi/config_5.txt b/board/raspberrypi/config_5.txt new file mode 100644 index 0000000000..bbed19fe46 --- /dev/null +++ b/board/raspberrypi/config_5.txt @@ -0,0 +1,14 @@ +# Please note that this is only a sample, we recommend you to change it to fit +# your needs. +# You should override this file using BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE. +# 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 overscan assuming the display supports displaying the full resolution +# If the text shown on the screen disappears off the edge, comment this out +disable_overscan=1 diff --git a/board/raspberrypi/linux-4k-page-size.fragment b/board/raspberrypi/linux-4k-page-size.fragment new file mode 100644 index 0000000000..5df91df1aa --- /dev/null +++ b/board/raspberrypi/linux-4k-page-size.fragment @@ -0,0 +1 @@ +CONFIG_ARM64_4K_PAGES=y diff --git a/board/raspberrypi/readme.txt b/board/raspberrypi/readme.txt index 9202b5ff37..aa6421ea01 100644 --- a/board/raspberrypi/readme.txt +++ b/board/raspberrypi/readme.txt @@ -10,6 +10,7 @@ These instructions apply to all models of the Raspberry Pi: - 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 =============== @@ -64,6 +65,10 @@ or for CM4 (on IO Board - 64 bit): $ make raspberrypicm4io_64_defconfig +For model 5 B: + + $ make raspberrypi5_defconfig + Build the rootfs ---------------- @@ -94,6 +99,7 @@ After building, you should obtain this tree: +-- bcm2710-rpi-cm3.dtb [1] +-- bcm2711-rpi-4-b.dtb [1] +-- bcm2711-rpi-cm4.dtb [1] + +-- bcm2712-rpi-5-b.dtb [1] +-- bcm2837-rpi-3-b.dtb [1] +-- boot.vfat +-- rootfs.ext4 diff --git a/board/raspberrypi5 b/board/raspberrypi5 new file mode 120000 index 0000000000..fcdafc81ed --- /dev/null +++ b/board/raspberrypi5 @@ -0,0 +1 @@ +raspberrypi \ No newline at end of file diff --git a/configs/raspberrypi5_defconfig b/configs/raspberrypi5_defconfig new file mode 100644 index 0000000000..d0760824bd --- /dev/null +++ b/configs/raspberrypi5_defconfig @@ -0,0 +1,47 @@ +BR2_aarch64=y +BR2_cortex_a76_a55=y +BR2_ARM_FPU_VFPV4=y + +BR2_TOOLCHAIN_BUILDROOT_CXX=y + +BR2_SYSTEM_DHCP="eth0" + +# Linux headers same as kernel, a 6.1 series +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_1=y + +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/raspberrypi/linux-4k-page-size.fragment" +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,17f135b742c4edb340afb365873c3a574f7e16cb)/linux-17f135b742c4edb340afb365873c3a574f7e16cb.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcm2712" + +# Build the DTB from the kernel sources +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2712-rpi-5-b" + +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y + +BR2_PACKAGE_RPI_FIRMWARE=y +BR2_PACKAGE_RPI_FIRMWARE_CONFIG_FILE="board/raspberrypi5/config_5.txt" +BR2_PACKAGE_RPI_FIRMWARE_CMDLINE_FILE="board/raspberrypi5/cmdline_5.txt" +# BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set + +# Required tools to create the SD image +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y + +# Filesystem / image +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_ROOTFS_POST_BUILD_SCRIPT="board/raspberrypi5/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/raspberrypi5/post-image.sh" + +# Enable compressed kernel module support +BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y +BR2_PACKAGE_KMOD_TOOLS=y +BR2_PACKAGE_XZ=y +BR2_PACKAGE_KMOD=y +BR2_PACKAGE_HOST_KMOD_XZ=y
This configuration builds an image for the RaspberryPi 5. Cc: Adam Duskett <adam.duskett@amarulasolutions.com> Cc: Yann E. MORIN <yann.morin.1998@free.fr> Signed-off-by: Gaël PORTAY <gael.portay@rtone.fr> --- Dear maintainers, That change adds the raspberrypi5_defconfig for the Raspberry Pi 5 64-bit. It uses the defconfig bcm2712_defconfig[2] and the device-tree source bcm2712-rpi-5-b.dts[3]. Note: The kernel defconfig defaults to 16k page-size; a kernel fragment is added to use a 4k page-size to compile and run using all toolchains. The Raspberry Pi 5 has now a dedicated debug UART connector[4] (it is always active and enabled; there is no more need to enable_uart=1 in the file config.txt). The UART device name changes to ttyAMA10 and the command line has to be updated in the file cmdline.txt. The Raspberry Pi 5 only supports 64-bit kernel[5]. Tested on internal toolchain: [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2023.11-1117-g95a905918c) 12.3.0, GNU ld (GNU Binutils) 2.40) #1 SMP PREEMPT Fri Feb 9 20:09:08 CET 2024 (...) # grep PageSize /proc/1/smaps | sort -u KernelPageSize: 4 kB MMUPageSize: 4 kB Tested on external Bootlin toolchain: [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-linux-gcc.br_real (Buildroot 2021.11-10014-g6257e8c) 13.2.0, GNU ld (GNU Binutils) 2.41) #1 SMP PREEMPT Fri Feb 9 20:54:08 CET 2024 (...) # grep PageSize /proc/1/smaps | sort -u KernelPageSize: 4 kB MMUPageSize: 4 kB Tested on external ARM toolchain: [ 0.000000] Linux version 6.1.61-v8_16k (gportay@archlinux) (aarch64-none-linux-gnu-gcc (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 13.2.1 20231009, GNU ld (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 2.41.0.20231009) #1 SMP PREEMPT Fri Feb 9 21:00:24 CET 2024 (...) # grep PageSize /proc/1/smaps | sort -u KernelPageSize: 4 kB MMUPageSize: 4 kB Changes since RFC: - Update README to add model Pi 5 B - Add support for 64K MMU page-size for ARM64 and Raspberry Pi 5 - Add Raspberry Pi 5 specific cmdline_5.txt to set its console on its debug uart (ttyAMA10 instead of ttyAMA0) - Remove 32-bit variant since Raspberry Pi 5 supports booting a 64-bit kernel only - Remove the property arm_64bit=1 from config_5_64bit.txt - Remove the _64bit suffix - Remove unecessary Pi 5 variant from package rpi-firmware Changes since v1: - Rebase on top of master - Remove the bumps for the rpi-firmware and linux packages - Bump the kernel to linux-17f135b742c4edb340afb365873c3a574f7e16cb (6.1.61, i.e. the same version as the other raspberrypi defconfigs) Changes since v2: - Rebase on top of master (remove applied patch) - Add a kernel fragment to force 4k page-size - Remove BR2_ARM64_PAGE_SIZE_16K from the board's defconfig [0]: https://www.raspberrypi.com/documentation/computers/raspberry-pi-5.html#introduction [1]: https://www.raspberrypi.com/documentation/computers/config_txt.html#kernel [2]: https://github.com/raspberrypi/linux/commit/9cfb379147f803b0362b0fe249e5b145d232bea3 [3]: https://github.com/raspberrypi/linux/commit/1196bf1a7736ff0ab79f5012fa84082e298031a7 [4]: https://www.raspberrypi.com/documentation/computers/raspberry-pi-5.html#uart-connector [5]: https://www.raspberrypi.com/documentation/computers/config_txt.html#arm_64bit Kind Regards, Gaël PORTAY board/raspberrypi/cmdline_5.txt | 1 + board/raspberrypi/config_5.txt | 14 ++++++ board/raspberrypi/linux-4k-page-size.fragment | 1 + board/raspberrypi/readme.txt | 6 +++ board/raspberrypi5 | 1 + configs/raspberrypi5_defconfig | 47 +++++++++++++++++++ 6 files changed, 70 insertions(+) create mode 100644 board/raspberrypi/cmdline_5.txt create mode 100644 board/raspberrypi/config_5.txt create mode 100644 board/raspberrypi/linux-4k-page-size.fragment create mode 120000 board/raspberrypi5 create mode 100644 configs/raspberrypi5_defconfig -- 2.43.0