[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