Message ID | 20240822183742.3550055-3-dario.binacchi@amarulasolutions.com |
---|---|
State | New |
Headers | show |
Series |
|
Related | show |
Hello, On Thu, 22 Aug 2024 20:37:41 +0200 Dario Binacchi <dario.binacchi@amarulasolutions.com> wrote: > diff --git a/board/stmicroelectronics/stm32f746-disco/flash_sd.sh b/board/stmicroelectronics/stm32f746-disco/flash_sd.sh > new file mode 100755 > index 000000000000..4fe85448f984 > --- /dev/null > +++ b/board/stmicroelectronics/stm32f746-disco/flash_sd.sh > @@ -0,0 +1,22 @@ > +#!/bin/bash > + > +if [ $# -eq 0 ]; then > + OUTPUT_DIR=output > +else > + OUTPUT_DIR=$1 > +fi > + > +if ! test -d "${OUTPUT_DIR}" ; then > + echo "ERROR: no output directory specified." > + echo "Usage: $0 OUTPUT_DIR" > + exit 1 > +fi > + > +"${OUTPUT_DIR}"/host/bin/openocd -f board/stm32f746g-disco.cfg \ > + -c "init" \ > + -c "reset init" \ > + -c "flash probe 0" \ > + -c "flash info 0" \ > + -c "flash write_image erase ${OUTPUT_DIR}/images/u-boot.bin 0x08000000" \ > + -c "reset run" \ > + -c "shutdown" Could you keep the indentation consistent? Above you used 4 spaces, and here only 2. > diff --git a/board/stmicroelectronics/stm32f746-disco/genimage.cfg b/board/stmicroelectronics/stm32f746-disco/genimage.cfg > new file mode 100644 > index 000000000000..6743d41972c0 > --- /dev/null > +++ b/board/stmicroelectronics/stm32f746-disco/genimage.cfg > @@ -0,0 +1,27 @@ > +image boot.vfat { > + vfat { > + files = { > + "zImage", > + "stm32f746-disco.dtb", > + "extlinux" > + } > + } > + > + size = 16M > +} > + > +image sdcard.img { > + hdimage { > + } > + > + partition u-boot { Why is this partition called u-boot? It doesn't contain anything u-boot related. > + partition-type = 0xC > + image = "boot.vfat" But why is a VFAT partition needed in fact? Why can't U-Boot simply get the kernel+DTB from the ext4 rootfs partition? > diff --git a/board/stmicroelectronics/stm32f746-disco/post-build.sh b/board/stmicroelectronics/stm32f746-disco/post-build.sh > new file mode 100755 > index 000000000000..2894ad851c66 > --- /dev/null > +++ b/board/stmicroelectronics/stm32f746-disco/post-build.sh > @@ -0,0 +1,9 @@ > +#!/bin/sh > +BOARD_DIR="$(dirname "$0")" > + > +install -m 0644 -D "${BOARD_DIR}"/extlinux.conf "${BINARIES_DIR}"/extlinux/extlinux.conf > + > +# finalize the init script > +INIT_PATH="${TARGET_DIR}/sbin/init" > +sed -i "/^# Clear memory to reduce page fragmentation/d" "${INIT_PATH}" > +sed -i "/^echo 3 > \/proc\/sys\/vm\/drop_caches/d" "${INIT_PATH}" Meh, this kind of sucks. tinyinit does one thing and we have to undo it here. Not great. Can we do better, i.e decide whether it makes sense to do it or not? To be honest, I am not sure if this is really useful to do at boot time. > diff --git a/configs/stm32f746_disco_sd_defconfig b/configs/stm32f746_disco_sd_defconfig > new file mode 100644 > index 000000000000..8c92afc5740e > --- /dev/null > +++ b/configs/stm32f746_disco_sd_defconfig > @@ -0,0 +1,32 @@ > +BR2_arm=y > +BR2_cortex_m7=y > +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_15=y > +BR2_GLOBAL_PATCH_DIR="board/stmicroelectronics/stm32f746-disco/patches" > +BR2_DOWNLOAD_FORCE_CHECK_HASHES=y > +BR2_INIT_NONE=y > +BR2_ROOTFS_POST_BUILD_SCRIPT="board/stmicroelectronics/stm32f746-disco/post-build.sh" > +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" > +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/stmicroelectronics/stm32f746-disco/genimage.cfg" > +BR2_LINUX_KERNEL=y > +BR2_LINUX_KERNEL_CUSTOM_VERSION=y > +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.15.165" > +BR2_LINUX_KERNEL_DEFCONFIG="stm32" > +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/stmicroelectronics/stm32f746-disco/linux.fragment" > +BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM=y > +BR2_LINUX_KERNEL_IMAGE_TARGET_NAME="zImage" > +BR2_LINUX_KERNEL_DTS_SUPPORT=y > +BR2_LINUX_KERNEL_INTREE_DTS_NAME="stm32f746-disco" > +BR2_PACKAGE_TINYINIT=y > +BR2_TARGET_ROOTFS_EXT2=y > +BR2_TARGET_ROOTFS_EXT2_SIZE="32M" > +# BR2_TARGET_ROOTFS_TAR is not set > +BR2_TARGET_UBOOT=y > +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y > +BR2_TARGET_UBOOT_CUSTOM_VERSION=y > +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2024.07" > +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="stm32f746-disco" > +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y > +BR2_PACKAGE_HOST_DOSFSTOOLS=y > +BR2_PACKAGE_HOST_GENIMAGE=y > +BR2_PACKAGE_HOST_MTOOLS=y > +BR2_PACKAGE_HOST_OPENOCD=y If you drop the FAT partition, you can drop BR2_PACKAGE_HOST_MTOOLS=y and BR2_PACKAGE_HOST_DOSFSTOOLS=y. Thanks! Thomas
Hello Thomas, On Fri, Aug 23, 2024 at 6:20 PM Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote: > > Hello, > > On Thu, 22 Aug 2024 20:37:41 +0200 > Dario Binacchi <dario.binacchi@amarulasolutions.com> wrote: > > > diff --git a/board/stmicroelectronics/stm32f746-disco/flash_sd.sh b/board/stmicroelectronics/stm32f746-disco/flash_sd.sh > > new file mode 100755 > > index 000000000000..4fe85448f984 > > --- /dev/null > > +++ b/board/stmicroelectronics/stm32f746-disco/flash_sd.sh > > @@ -0,0 +1,22 @@ > > +#!/bin/bash > > + > > +if [ $# -eq 0 ]; then > > + OUTPUT_DIR=output > > +else > > + OUTPUT_DIR=$1 > > +fi > > + > > +if ! test -d "${OUTPUT_DIR}" ; then > > + echo "ERROR: no output directory specified." > > + echo "Usage: $0 OUTPUT_DIR" > > + exit 1 > > +fi > > + > > +"${OUTPUT_DIR}"/host/bin/openocd -f board/stm32f746g-disco.cfg \ > > + -c "init" \ > > + -c "reset init" \ > > + -c "flash probe 0" \ > > + -c "flash info 0" \ > > + -c "flash write_image erase ${OUTPUT_DIR}/images/u-boot.bin 0x08000000" \ > > + -c "reset run" \ > > + -c "shutdown" > > Could you keep the indentation consistent? Above you used 4 spaces, and > here only 2. You are right. Sorry. > > > diff --git a/board/stmicroelectronics/stm32f746-disco/genimage.cfg b/board/stmicroelectronics/stm32f746-disco/genimage.cfg > > new file mode 100644 > > index 000000000000..6743d41972c0 > > --- /dev/null > > +++ b/board/stmicroelectronics/stm32f746-disco/genimage.cfg > > @@ -0,0 +1,27 @@ > > +image boot.vfat { > > + vfat { > > + files = { > > + "zImage", > > + "stm32f746-disco.dtb", > > + "extlinux" > > + } > > + } > > + > > + size = 16M > > +} > > + > > +image sdcard.img { > > + hdimage { > > + } > > + > > + partition u-boot { > > Why is this partition called u-boot? It doesn't contain anything u-boot > related. > > > + partition-type = 0xC > > + image = "boot.vfat" > > But why is a VFAT partition needed in fact? Why can't U-Boot simply get > the kernel+DTB from the ext4 rootfs partition? I ran some tests with a single partition, as you suggested, but the system became less stable. Even with just an `ls` command, I encountered issues with the device, whereas with two partitions, I can execute more commands before running into problems. The memory fragmentation has likely increased. So I would therefore prefer to keep the two-partition system. As Waldemar suggested: https://lore.kernel.org/buildroot/20230930223622.06e32f3c@windsurf/T/ I'd be curious to see the stability with FDPIC support. But that's another story :) > > > > diff --git a/board/stmicroelectronics/stm32f746-disco/post-build.sh b/board/stmicroelectronics/stm32f746-disco/post-build.sh > > new file mode 100755 > > index 000000000000..2894ad851c66 > > --- /dev/null > > +++ b/board/stmicroelectronics/stm32f746-disco/post-build.sh > > @@ -0,0 +1,9 @@ > > +#!/bin/sh > > +BOARD_DIR="$(dirname "$0")" > > + > > +install -m 0644 -D "${BOARD_DIR}"/extlinux.conf "${BINARIES_DIR}"/extlinux/extlinux.conf > > + > > +# finalize the init script > > +INIT_PATH="${TARGET_DIR}/sbin/init" > > +sed -i "/^# Clear memory to reduce page fragmentation/d" "${INIT_PATH}" > > +sed -i "/^echo 3 > \/proc\/sys\/vm\/drop_caches/d" "${INIT_PATH}" > > Meh, this kind of sucks. tinyinit does one thing and we have to undo it > here. Not great. Can we do better, i.e decide whether it makes sense to > do it or not? To be honest, I am not sure if this is really useful to > do at boot time. I think it's better to remove those instructions from "post-build.sh" to ensure functional backward compatibility with the boards from which the script was borrowed. Thanks and regards, Dario > > > > diff --git a/configs/stm32f746_disco_sd_defconfig b/configs/stm32f746_disco_sd_defconfig > > new file mode 100644 > > index 000000000000..8c92afc5740e > > --- /dev/null > > +++ b/configs/stm32f746_disco_sd_defconfig > > @@ -0,0 +1,32 @@ > > +BR2_arm=y > > +BR2_cortex_m7=y > > +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_15=y > > +BR2_GLOBAL_PATCH_DIR="board/stmicroelectronics/stm32f746-disco/patches" > > +BR2_DOWNLOAD_FORCE_CHECK_HASHES=y > > +BR2_INIT_NONE=y > > +BR2_ROOTFS_POST_BUILD_SCRIPT="board/stmicroelectronics/stm32f746-disco/post-build.sh" > > +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" > > +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/stmicroelectronics/stm32f746-disco/genimage.cfg" > > +BR2_LINUX_KERNEL=y > > +BR2_LINUX_KERNEL_CUSTOM_VERSION=y > > +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.15.165" > > +BR2_LINUX_KERNEL_DEFCONFIG="stm32" > > +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/stmicroelectronics/stm32f746-disco/linux.fragment" > > +BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM=y > > +BR2_LINUX_KERNEL_IMAGE_TARGET_NAME="zImage" > > +BR2_LINUX_KERNEL_DTS_SUPPORT=y > > +BR2_LINUX_KERNEL_INTREE_DTS_NAME="stm32f746-disco" > > +BR2_PACKAGE_TINYINIT=y > > +BR2_TARGET_ROOTFS_EXT2=y > > +BR2_TARGET_ROOTFS_EXT2_SIZE="32M" > > +# BR2_TARGET_ROOTFS_TAR is not set > > +BR2_TARGET_UBOOT=y > > +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y > > +BR2_TARGET_UBOOT_CUSTOM_VERSION=y > > +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2024.07" > > +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="stm32f746-disco" > > +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y > > +BR2_PACKAGE_HOST_DOSFSTOOLS=y > > +BR2_PACKAGE_HOST_GENIMAGE=y > > +BR2_PACKAGE_HOST_MTOOLS=y > > +BR2_PACKAGE_HOST_OPENOCD=y > > If you drop the FAT partition, you can drop BR2_PACKAGE_HOST_MTOOLS=y > and BR2_PACKAGE_HOST_DOSFSTOOLS=y. > > Thanks! > > Thomas > -- > Thomas Petazzoni, co-owner and CEO, Bootlin > Embedded Linux and Kernel engineering and training > https://bootlin.com
diff --git a/DEVELOPERS b/DEVELOPERS index 45cc1cc48996..e8dc27f7ad47 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -785,10 +785,12 @@ F: package/xinetd/ N: Dario Binacchi <dario.binacchi@amarulasolutions.com> F: board/bsh/ +F: board/stmicroelectronics/stm32f746-disco/ F: board/stmicroelectronics/stm32f769-disco/ F: configs/imx6ulz_bsh_smm_m2_defconfig F: configs/imx8mn_bsh_smm_s2_defconfig F: configs/imx8mn_bsh_smm_s2_pro_defconfig +F: configs/stm32f746_disco_sd_defconfig F: configs/stm32f769_disco_sd_defconfig F: package/sscep/ F: package/tinyinit/ diff --git a/board/stmicroelectronics/stm32f746-disco/extlinux.conf b/board/stmicroelectronics/stm32f746-disco/extlinux.conf new file mode 100644 index 000000000000..bb79c0b412a2 --- /dev/null +++ b/board/stmicroelectronics/stm32f746-disco/extlinux.conf @@ -0,0 +1,4 @@ +label stm32f746-disco-buildroot + kernel /zImage + devicetree /stm32f746-disco.dtb + append console=ttySTM0,115200 root=/dev/mmcblk0p2 rw rootwait consoleblank=0 ignore_loglevel diff --git a/board/stmicroelectronics/stm32f746-disco/flash_sd.sh b/board/stmicroelectronics/stm32f746-disco/flash_sd.sh new file mode 100755 index 000000000000..4fe85448f984 --- /dev/null +++ b/board/stmicroelectronics/stm32f746-disco/flash_sd.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +if [ $# -eq 0 ]; then + OUTPUT_DIR=output +else + OUTPUT_DIR=$1 +fi + +if ! test -d "${OUTPUT_DIR}" ; then + echo "ERROR: no output directory specified." + echo "Usage: $0 OUTPUT_DIR" + exit 1 +fi + +"${OUTPUT_DIR}"/host/bin/openocd -f board/stm32f746g-disco.cfg \ + -c "init" \ + -c "reset init" \ + -c "flash probe 0" \ + -c "flash info 0" \ + -c "flash write_image erase ${OUTPUT_DIR}/images/u-boot.bin 0x08000000" \ + -c "reset run" \ + -c "shutdown" diff --git a/board/stmicroelectronics/stm32f746-disco/genimage.cfg b/board/stmicroelectronics/stm32f746-disco/genimage.cfg new file mode 100644 index 000000000000..6743d41972c0 --- /dev/null +++ b/board/stmicroelectronics/stm32f746-disco/genimage.cfg @@ -0,0 +1,27 @@ +image boot.vfat { + vfat { + files = { + "zImage", + "stm32f746-disco.dtb", + "extlinux" + } + } + + size = 16M +} + +image sdcard.img { + hdimage { + } + + partition u-boot { + partition-type = 0xC + image = "boot.vfat" + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext2" + size = 32M + } +} diff --git a/board/stmicroelectronics/stm32f746-disco/linux.fragment b/board/stmicroelectronics/stm32f746-disco/linux.fragment new file mode 100644 index 000000000000..625fdced9e8d --- /dev/null +++ b/board/stmicroelectronics/stm32f746-disco/linux.fragment @@ -0,0 +1,13 @@ +# CONFIG_PREEMPT is not set +# CONFIG_MULTIUSER is not set +# CONFIG_TIMERFD is not set +CONFIG_SET_MEM_PARAM=y +CONFIG_DRAM_BASE=0xC0000000 +CONFIG_DRAM_SIZE=0x01000000 +# CONFIG_GCC_PLUGINS is not set +# CONFIG_XIP_KERNEL is not set +# CONFIG_BLK_DEV is not set +# CONFIG_COMPAT_BRK is not set +# CONFIG_PROC_SYSCTL is not set +# CONFIG_CRYPTO is not set +CONFIG_RCU_TRACE=y \ No newline at end of file diff --git a/board/stmicroelectronics/stm32f746-disco/patches/linux-headers/linux-headers.hash b/board/stmicroelectronics/stm32f746-disco/patches/linux-headers/linux-headers.hash new file mode 120000 index 000000000000..5808d92afe89 --- /dev/null +++ b/board/stmicroelectronics/stm32f746-disco/patches/linux-headers/linux-headers.hash @@ -0,0 +1 @@ +../linux/linux.hash \ No newline at end of file diff --git a/board/stmicroelectronics/stm32f746-disco/patches/linux/linux.hash b/board/stmicroelectronics/stm32f746-disco/patches/linux/linux.hash new file mode 100644 index 000000000000..7f78b950f35c --- /dev/null +++ b/board/stmicroelectronics/stm32f746-disco/patches/linux/linux.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 a36dd3e82ceb634afded31f2656568f57c4d9c4b399859f298b18116df11c6fe linux-5.15.165.tar.xz diff --git a/board/stmicroelectronics/stm32f746-disco/patches/uboot/uboot.hash b/board/stmicroelectronics/stm32f746-disco/patches/uboot/uboot.hash new file mode 100644 index 000000000000..fe9b4f53dc63 --- /dev/null +++ b/board/stmicroelectronics/stm32f746-disco/patches/uboot/uboot.hash @@ -0,0 +1,2 @@ +# Locally calculated +sha256 f591da9ab90ef3d6b3d173766d0ddff90c4ed7330680897486117df390d83c8f u-boot-2024.07.tar.bz2 diff --git a/board/stmicroelectronics/stm32f746-disco/post-build.sh b/board/stmicroelectronics/stm32f746-disco/post-build.sh new file mode 100755 index 000000000000..2894ad851c66 --- /dev/null +++ b/board/stmicroelectronics/stm32f746-disco/post-build.sh @@ -0,0 +1,9 @@ +#!/bin/sh +BOARD_DIR="$(dirname "$0")" + +install -m 0644 -D "${BOARD_DIR}"/extlinux.conf "${BINARIES_DIR}"/extlinux/extlinux.conf + +# finalize the init script +INIT_PATH="${TARGET_DIR}/sbin/init" +sed -i "/^# Clear memory to reduce page fragmentation/d" "${INIT_PATH}" +sed -i "/^echo 3 > \/proc\/sys\/vm\/drop_caches/d" "${INIT_PATH}" diff --git a/board/stmicroelectronics/stm32f746-disco/readme.txt b/board/stmicroelectronics/stm32f746-disco/readme.txt new file mode 100644 index 000000000000..4ac16da33132 --- /dev/null +++ b/board/stmicroelectronics/stm32f746-disco/readme.txt @@ -0,0 +1,31 @@ +STM32F746-DISCO +=================== + +This tutorial describes how to use the predefined Buildroot +configuration for the STM32F746-DISCO evaluation platform. + +Building +-------- + + make stm32f746_disco_sd_defconfig + make + +Flashing +-------- + + ./board/stmicroelectronics/stm32f746-disco/flash_sd.sh output/ + +It will flash the U-boot bootloader. + +Creating SD card +---------------- + +Buildroot prepares an "sdcard.img" image in the output/images/ directory, +ready to be dumped on a SD card. Launch the following command as root: + + dd if=output/images/sdcard.img of=/dev/<your-sd-device> + +*** WARNING! This will destroy all the card content. Use with care! *** + +For details about the medium image layout and its content, see the +definition in board/stmicroelectronics/stm32f746-disco/genimage.cfg. diff --git a/configs/stm32f746_disco_sd_defconfig b/configs/stm32f746_disco_sd_defconfig new file mode 100644 index 000000000000..8c92afc5740e --- /dev/null +++ b/configs/stm32f746_disco_sd_defconfig @@ -0,0 +1,32 @@ +BR2_arm=y +BR2_cortex_m7=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_15=y +BR2_GLOBAL_PATCH_DIR="board/stmicroelectronics/stm32f746-disco/patches" +BR2_DOWNLOAD_FORCE_CHECK_HASHES=y +BR2_INIT_NONE=y +BR2_ROOTFS_POST_BUILD_SCRIPT="board/stmicroelectronics/stm32f746-disco/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/stmicroelectronics/stm32f746-disco/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.15.165" +BR2_LINUX_KERNEL_DEFCONFIG="stm32" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/stmicroelectronics/stm32f746-disco/linux.fragment" +BR2_LINUX_KERNEL_IMAGE_TARGET_CUSTOM=y +BR2_LINUX_KERNEL_IMAGE_TARGET_NAME="zImage" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="stm32f746-disco" +BR2_PACKAGE_TINYINIT=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_SIZE="32M" +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2024.07" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="stm32f746-disco" +BR2_TARGET_UBOOT_NEEDS_OPENSSL=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_OPENOCD=y