[U-Boot] [PATCH v2] imx6: apalis: Make the boot process more generic
Stefan Agner
stefan at agner.ch
Thu Dec 20 12:34:51 UTC 2018
Hi Petr,
[this time to the ML]
On 16.12.2018 12:06, Petr Štetiar wrote:
> I'm preparing support for Apalis imx6 boards in OpenWrt and I've ended
> up with quite huge patchset against upstream U-Boot 2018.03, so I'm
> trying to propose more generic way of boot process handling.
I agree a more flexible boot process would be better. There is distro
boot for that purpose, and I suggest using that by default. We did
enable distro boot in our downstream U-Boot [1] and also make use of it
in the Toradex Easy Installer [2] configuration (run distro_bootcmd).
Also check doc/README.distro. I think it should not need changes on
OpenWrt side since distro boot loads and executes boot.scr.
Additionally, it also guarantees that some variables are setup (e.g.
devtype, devnum and distro_bootpart) which allows to write generic boot
scripts.
[1]
http://git.toradex.com/cgit/u-boot-toradex.git/commit/include/configs/apalis_imx6.h?h=2016.11-toradex-next&id=a283b85daaefbe11a5a7b53ea06b5b76c54c155a
[2]
http://git.toradex.com/cgit/u-boot-toradex.git/commit/?h=2016.11-toradex-next&id=32c022da358ae016a84cf1dd9bd558a02f979b1a
--
Stefan
>
> In OpenWrt we usually have kernel, dtbs and U-Boot boot script in boot
> partition with ext4fs, so for some use cases it would be handy to be
> able to replace some of the files in the boot partion, that's why I've
> added write support to the ext4.
>
> I've added `set_blkcnt` environment variable which is needed for every
> `mmc write` command as we need to always specify size in block count.
> This is copy&pasted from official Toradex's flashing scripts, so all the
> credits for this work belongs to them.
>
> Currently the rootfs location is passed via mmcblk number and the
> problem with this approach is that the mmcblk number for the boot device
> changes depending on the kernel version and imx6 SoC type. In order to
> avoid such issues, use the UUID method to specify the rootfs location.
>
> I've added new boot sequence, where we first try to load and run boot
> script defined in the new `script` variable, so the boot process could
> be more generic and overridden by the distro. When the boot script isn't
> loaded, it will use the previous boot sequence.
>
> For the recovery purposes and better end user experience I've added boot
> from SDP as the last boot command if every other boot option fails. I
> plan to use SDP as official flashing/recovery procedure in OpenWrt for
> Apalis imx6 boards.
>
> I've copy&pasted almost everything from the `f086812a mx6sxsabresd: Use
> PARTUUID to specify the rootfs location` commit, so credits for the rest
> of this patch belongs to Fabio.
>
> Cc: Stefan Agner <stefan.agner at toradex.com>
> Cc: Max Krummenacher <max.krummenacher at toradex.com>
> Signed-off-by: Petr Štetiar <ynezz at true.cz>
> ---
> configs/apalis_imx6_defconfig | 2 ++
> include/configs/apalis_imx6.h | 26 +++++++++++++++++++++-----
> 2 files changed, 23 insertions(+), 5 deletions(-)
>
> Changes since v1:
>
> * Made note about ext4 write support more clear
> * I've removed Kconfig variables and all variables which were
> coupled to the code
> * I've removed the note about backward compatibility from commit message,
> because I've realized, that this changes are not backward compatible,
> because this patch is switching to part UUID, so the distributions would
> need to provide filesystem with part UUID for rootfs.
>
> diff --git a/configs/apalis_imx6_defconfig b/configs/apalis_imx6_defconfig
> index 133fc1a..279d39f 100644
> --- a/configs/apalis_imx6_defconfig
> +++ b/configs/apalis_imx6_defconfig
> @@ -39,6 +39,7 @@ CONFIG_CMD_DFU=y
> CONFIG_CMD_GPIO=y
> CONFIG_CMD_I2C=y
> CONFIG_CMD_MMC=y
> +CONFIG_CMD_PART=y
> CONFIG_CMD_USB=y
> CONFIG_CMD_USB_SDP=y
> CONFIG_CMD_USB_MASS_STORAGE=y
> @@ -48,6 +49,7 @@ CONFIG_CMD_PING=y
> CONFIG_CMD_BMP=y
> CONFIG_CMD_CACHE=y
> CONFIG_CMD_EXT4=y
> +CONFIG_CMD_EXT4_WRITE=y
> CONFIG_CMD_FAT=y
> CONFIG_CMD_FS_GENERIC=y
> CONFIG_ENV_IS_IN_MMC=y
> diff --git a/include/configs/apalis_imx6.h b/include/configs/apalis_imx6.h
> index 135b3c9..3601891 100644
> --- a/include/configs/apalis_imx6.h
> +++ b/include/configs/apalis_imx6.h
> @@ -142,9 +142,9 @@
> "imx6q-colibri-cam-eval-v3.dtb fat 0 1"
>
> #define EMMC_BOOTCMD \
> - "emmcargs=ip=off root=/dev/mmcblk0p2 rw,noatime rootfstype=ext3 " \
> + "emmcargs=ip=off root=PARTUUID=${uuid} rw,noatime rootfstype=ext3 " \
> "rootwait\0" \
> - "emmcboot=run setup; " \
> + "emmcboot=run setup; run finduuid;" \
> "setenv bootargs ${defargs} ${emmcargs} ${setupargs} " \
> "${vidargs}; echo Booting from internal eMMC chip...; " \
> "run emmcdtbload; load mmc 0:1 ${kernel_addr_r} " \
> @@ -201,10 +201,17 @@
> #define FDT_FILE "imx6q-apalis_v1_0-eval.dtb"
> #endif
> #define CONFIG_EXTRA_ENV_SETTINGS \
> - "bootcmd=run emmcboot ; echo ; echo emmcboot failed ; " \
> + "script=boot.scr\0" \
> + "finduuid=part uuid mmc 0:2 uuid\0" \
> + "loadbootscript=" \
> + "load mmc 0:1 ${loadaddr} ${script};\0" \
> + "bootscript=echo Running bootscript from mmc ...; " \
> + "source\0" \
> + "bootcmd_default=run emmcboot ; echo ; echo emmcboot failed ; " \
> "run nfsboot ; echo ; echo nfsboot failed ; " \
> "usb start ;" \
> - "setenv stdout serial,vga ; setenv stdin serial,usbkbd\0" \
> + "setenv stdout serial,vga ; setenv stdin serial,usbkbd;" \
> + "sdp 0\0" \
> "boot_file=uImage\0" \
> "console=ttymxc0\0" \
> "defargs=enable_wait_mode=off vmalloc=400M\0" \
> @@ -232,7 +239,16 @@
> "vidargs=mxc_hdmi.only_cea=1 " \
> "video=mxcfb0:dev=hdmi,1920x1080M at 60,if=RGB24 " \
> "video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off " \
> - "fbmem=32M\0 "
> + "fbmem=32M\0 " \
> + "set_blkcnt=setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt
> ${blkcnt} / 0x200\0"
> +
> +#define CONFIG_BOOTCOMMAND \
> + "mmc dev 0;" \
> + "if run loadbootscript; then " \
> + "run bootscript; " \
> + "else " \
> + "run bootcmd_default; " \
> + "fi; "
>
> /* Miscellaneous configurable options */
> #undef CONFIG_SYS_CBSIZE
More information about the U-Boot
mailing list