diff mbox series

[1/2] board/kontron/pitx-imx8m: use extlinux instead of U-Boot boot script

Message ID 20220117080616.10563-1-heiko.thiery@gmail.com
State Accepted
Headers show
Series [1/2] board/kontron/pitx-imx8m: use extlinux instead of U-Boot boot script | expand

Commit Message

Heiko Thiery Jan. 17, 2022, 8:06 a.m. UTC
Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
---
 board/kontron/pitx-imx8m/boot.cmd      | 8 --------
 board/kontron/pitx-imx8m/extlinux.conf | 4 ++++
 board/kontron/pitx-imx8m/genimage.cfg  | 5 +++--
 board/kontron/pitx-imx8m/post-build.sh | 7 +++++--
 board/kontron/pitx-imx8m/post-image.sh | 2 +-
 configs/kontron_pitx_imx8m_defconfig   | 3 +--
 6 files changed, 14 insertions(+), 15 deletions(-)
 delete mode 100644 board/kontron/pitx-imx8m/boot.cmd
 create mode 100644 board/kontron/pitx-imx8m/extlinux.conf

Comments

Thomas Petazzoni Jan. 22, 2022, 2:11 p.m. UTC | #1
On Mon, 17 Jan 2022 09:06:16 +0100
Heiko Thiery <heiko.thiery@gmail.com> wrote:

> Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
> ---
>  board/kontron/pitx-imx8m/boot.cmd      | 8 --------
>  board/kontron/pitx-imx8m/extlinux.conf | 4 ++++
>  board/kontron/pitx-imx8m/genimage.cfg  | 5 +++--
>  board/kontron/pitx-imx8m/post-build.sh | 7 +++++--
>  board/kontron/pitx-imx8m/post-image.sh | 2 +-
>  configs/kontron_pitx_imx8m_defconfig   | 3 +--
>  6 files changed, 14 insertions(+), 15 deletions(-)
>  delete mode 100644 board/kontron/pitx-imx8m/boot.cmd
>  create mode 100644 board/kontron/pitx-imx8m/extlinux.conf

I have applied, but I am a bit worried about things are going on with
this switch to extlinux.conf.

Indeed, we have:

 * Platforms where the UUID is hardcoded into genimage.cfg and
   extlinux.conf, such as board/beaglev/

 * We have platforms where a "uuid" variable in filled in U-Boot before
   triggering the extlinux.conf logic, and therefore extlinux.conf uses
   root=PARTUUID=${uuid}. For example
   board/freescale/imx7dsdb/rootfs_overlay/boot/extlinux/extlinux.conf,
   board/orangepi/orangepi-zero/boot.cmd,
   board/solidrun/mx6cubox/rootfs_overlay/boot/extlinux/extlinux.conf,
   board/technexion/imx6ulpico/rootfs_overlay/boot/extlinux/extlinux.conf,
   and a few others.

 * We now have platforms (kontron/smarc-sal28 and kontron/pitx-imx8m)
   where a random UUID is generated in the post-build script, and used
   in genimage and extlinux.conf.

I'm not sure where we want to go, and how much we want to enforce "best
practices" that are common on all platforms, or just let each platform
do its little business.

Thomas
Heiko Thiery Jan. 22, 2022, 3:59 p.m. UTC | #2
Hi Thomas,

Am Sa., 22. Jan. 2022 um 15:11 Uhr schrieb Thomas Petazzoni
<thomas.petazzoni@bootlin.com>:
>
> On Mon, 17 Jan 2022 09:06:16 +0100
> Heiko Thiery <heiko.thiery@gmail.com> wrote:
>
> > Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
> > ---
> >  board/kontron/pitx-imx8m/boot.cmd      | 8 --------
> >  board/kontron/pitx-imx8m/extlinux.conf | 4 ++++
> >  board/kontron/pitx-imx8m/genimage.cfg  | 5 +++--
> >  board/kontron/pitx-imx8m/post-build.sh | 7 +++++--
> >  board/kontron/pitx-imx8m/post-image.sh | 2 +-
> >  configs/kontron_pitx_imx8m_defconfig   | 3 +--
> >  6 files changed, 14 insertions(+), 15 deletions(-)
> >  delete mode 100644 board/kontron/pitx-imx8m/boot.cmd
> >  create mode 100644 board/kontron/pitx-imx8m/extlinux.conf
>
> I have applied, but I am a bit worried about things are going on with
> this switch to extlinux.conf.

I was not aware of the different approaches.

> Indeed, we have:
>
>  * Platforms where the UUID is hardcoded into genimage.cfg and
>    extlinux.conf, such as board/beaglev/
>
>  * We have platforms where a "uuid" variable in filled in U-Boot before
>    triggering the extlinux.conf logic, and therefore extlinux.conf uses
>    root=PARTUUID=${uuid}. For example
>    board/freescale/imx7dsdb/rootfs_overlay/boot/extlinux/extlinux.conf,
>    board/orangepi/orangepi-zero/boot.cmd,
>    board/solidrun/mx6cubox/rootfs_overlay/boot/extlinux/extlinux.conf,
>    board/technexion/imx6ulpico/rootfs_overlay/boot/extlinux/extlinux.conf,
>    and a few others.

For the technexion board there is some logic in u-boot to setp and
discover the uuid of the root partition.

https://source.denx.de/u-boot/u-boot/-/blob/master/include/configs/pico-imx6ul.h#L90

>  * We now have platforms (kontron/smarc-sal28 and kontron/pitx-imx8m)
>    where a random UUID is generated in the post-build script, and used
>    in genimage and extlinux.conf.

With this approach it is independent if the image is installed on the
SD card or the eMMC or what else. But here one pitfall is when the
image is installed on more devices.

> I'm not sure where we want to go, and how much we want to enforce "best
> practices" that are common on all platforms, or just let each platform
> do its little business.
Giulio Benetti Jan. 23, 2022, 10:01 p.m. UTC | #3
Hi Thomas,

On 22/01/22 15:11, Thomas Petazzoni wrote:
> On Mon, 17 Jan 2022 09:06:16 +0100
> Heiko Thiery <heiko.thiery@gmail.com> wrote:
> 
>> Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
>> ---
>>   board/kontron/pitx-imx8m/boot.cmd      | 8 --------
>>   board/kontron/pitx-imx8m/extlinux.conf | 4 ++++
>>   board/kontron/pitx-imx8m/genimage.cfg  | 5 +++--
>>   board/kontron/pitx-imx8m/post-build.sh | 7 +++++--
>>   board/kontron/pitx-imx8m/post-image.sh | 2 +-
>>   configs/kontron_pitx_imx8m_defconfig   | 3 +--
>>   6 files changed, 14 insertions(+), 15 deletions(-)
>>   delete mode 100644 board/kontron/pitx-imx8m/boot.cmd
>>   create mode 100644 board/kontron/pitx-imx8m/extlinux.conf
> 
> I have applied, but I am a bit worried about things are going on with
> this switch to extlinux.conf.
> 
> Indeed, we have:
> 
>   * Platforms where the UUID is hardcoded into genimage.cfg and
>     extlinux.conf, such as board/beaglev/
> 
>   * We have platforms where a "uuid" variable in filled in U-Boot before
>     triggering the extlinux.conf logic, and therefore extlinux.conf uses
>     root=PARTUUID=${uuid}. For example
>     board/freescale/imx7dsdb/rootfs_overlay/boot/extlinux/extlinux.conf,
>     board/orangepi/orangepi-zero/boot.cmd,
>     board/solidrun/mx6cubox/rootfs_overlay/boot/extlinux/extlinux.conf,
>     board/technexion/imx6ulpico/rootfs_overlay/boot/extlinux/extlinux.conf,
>     and a few others.
> 
>   * We now have platforms (kontron/smarc-sal28 and kontron/pitx-imx8m)
>     where a random UUID is generated in the post-build script, and used
>     in genimage and extlinux.conf.
> 
> I'm not sure where we want to go, and how much we want to enforce "best
> practices" that are common on all platforms, or just let each platform
> do its little business.

IMHO the worst drawback I see while using extlinux.conf VS boot.scr is 
the missing checksum. Especially on embedded systems we deeply treat.
Not having such checksum can make system booting without a parameter on 
linux command line for example, only because 1 ASCII has been corrupted.
I prefer the system to not boot at all in general instead of having it 
"working" while hiding some potential problem.

What do you and All think about this?

Best regards
Sergey Kuzminov Jan. 24, 2022, 5:42 a.m. UTC | #4
Hi All,

24.01.2022 01:01, Giulio Benetti:
> IMHO the worst drawback I see while using extlinux.conf VS boot.scr is 
> the missing checksum. Especially on embedded systems we deeply treat.
> Not having such checksum can make system booting without a parameter on 
> linux command line for example, only because 1 ASCII has been corrupted.
> I prefer the system to not boot at all in general instead of having it 
> "working" while hiding some potential problem.
> 
> What do you and All think about this?

IMHO extlinux.conf is more debugging friendly.

Boot.scr requires the following command:
mkimage -C none -A arm -T script -d boot.cmd boot.scr

The mkimage utility (BR2_PACKAGE_HOST_UBOOT_TOOLS) is not on the board, 
you need to transfer the converted file over the network. Or reconnect 
the microSD card.
Giulio Benetti Jan. 24, 2022, 8:12 a.m. UTC | #5
> Il giorno 24 gen 2022, alle ore 06:43, Sergey Kuzminov <kuzminov.sergey81@gmail.com> ha scritto:
> 
> Hi All,
> 
> 24.01.2022 01:01, Giulio Benetti:
>> IMHO the worst drawback I see while using extlinux.conf VS boot.scr is the missing checksum. Especially on embedded systems we deeply treat.
>> Not having such checksum can make system booting without a parameter on linux command line for example, only because 1 ASCII has been corrupted.
>> I prefer the system to not boot at all in general instead of having it "working" while hiding some potential problem.
>> What do you and All think about this?
> 
> IMHO extlinux.conf is more debugging friendly.
> 
> Boot.scr requires the following command:
> mkimage -C none -A arm -T script -d boot.cmd boot.scr
> 
> The mkimage utility (BR2_PACKAGE_HOST_UBOOT_TOOLS) is not on the board, you need to transfer the converted file over the network. Or reconnect the microSD card.

I agree with this too. I’ve found myself many times blaming because I couldn’t simply modify boot.scr on target and reboot.
But I find it still dangerous.

Another thing that I don’t find possible to do with extlinux.conf is using uboot scripting possibility that enables you to do lot or things, like fdt-overlay expand and apply, show a bmp instead of having a static splashscreen and so on.

I don’t think this is achievable with extlinux.conf

These are only my thoughts but I still don’t have a solution honestly. In particular to uniform boards.

Best regards
Giulio
Arnout Vandecappelle Feb. 12, 2022, 1:50 p.m. UTC | #6
On 22/01/2022 15:11, Thomas Petazzoni wrote:
> On Mon, 17 Jan 2022 09:06:16 +0100
> Heiko Thiery <heiko.thiery@gmail.com> wrote:
> 
>> Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com>
>> ---
>>   board/kontron/pitx-imx8m/boot.cmd      | 8 --------
>>   board/kontron/pitx-imx8m/extlinux.conf | 4 ++++
>>   board/kontron/pitx-imx8m/genimage.cfg  | 5 +++--
>>   board/kontron/pitx-imx8m/post-build.sh | 7 +++++--
>>   board/kontron/pitx-imx8m/post-image.sh | 2 +-
>>   configs/kontron_pitx_imx8m_defconfig   | 3 +--
>>   6 files changed, 14 insertions(+), 15 deletions(-)
>>   delete mode 100644 board/kontron/pitx-imx8m/boot.cmd
>>   create mode 100644 board/kontron/pitx-imx8m/extlinux.conf
> 
> I have applied, but I am a bit worried about things are going on with
> this switch to extlinux.conf.
> 
> Indeed, we have:
> 
>   * Platforms where the UUID is hardcoded into genimage.cfg and
>     extlinux.conf, such as board/beaglev/
> 
>   * We have platforms where a "uuid" variable in filled in U-Boot before
>     triggering the extlinux.conf logic, and therefore extlinux.conf uses
>     root=PARTUUID=${uuid}. For example
>     board/freescale/imx7dsdb/rootfs_overlay/boot/extlinux/extlinux.conf,
>     board/orangepi/orangepi-zero/boot.cmd,
>     board/solidrun/mx6cubox/rootfs_overlay/boot/extlinux/extlinux.conf,
>     board/technexion/imx6ulpico/rootfs_overlay/boot/extlinux/extlinux.conf,
>     and a few others.
> 
>   * We now have platforms (kontron/smarc-sal28 and kontron/pitx-imx8m)
>     where a random UUID is generated in the post-build script, and used
>     in genimage and extlinux.conf.
> 
> I'm not sure where we want to go, and how much we want to enforce "best
> practices" that are common on all platforms, or just let each platform
> do its little business.

  It's like the preference we have for extlinux.conf in an ext4 filesystem: we 
prefer it over FAT, but it's not a really hard requirement, and we're definitely 
not going to update existing defconfigs unless an actual developer with the 
board tests them.

  Between all of those options, I think the randomly generated UUID is probably 
the best one. Well, actually, the automatic filling in by U-Boot is the best one 
but not all boards support that I guess.

  Regards,
  Arnout
diff mbox series

Patch

diff --git a/board/kontron/pitx-imx8m/boot.cmd b/board/kontron/pitx-imx8m/boot.cmd
deleted file mode 100644
index 4d89235392..0000000000
--- a/board/kontron/pitx-imx8m/boot.cmd
+++ /dev/null
@@ -1,8 +0,0 @@ 
-echo "Root File Sytem on MMC${devnum}"
-setenv rootfs /dev/mmcblk${devnum}p1
-setenv bootargs root=${rootfs} rootwait rw ${extrabootargs}
-
-load ${devtype} ${devnum} ${kernel_addr_r} boot/Image
-load ${devtype} ${devnum} ${fdt_addr_r} boot/imx8mq-kontron-pitx-imx8m.dtb
-
-booti ${kernel_addr_r} - ${fdt_addr_r}
diff --git a/board/kontron/pitx-imx8m/extlinux.conf b/board/kontron/pitx-imx8m/extlinux.conf
new file mode 100644
index 0000000000..2911acec59
--- /dev/null
+++ b/board/kontron/pitx-imx8m/extlinux.conf
@@ -0,0 +1,4 @@ 
+label buildroot
+  kernel /boot/Image
+  devicetree /boot/freescale/imx8mq-kontron-pitx-imx8m.dtb
+  append root=PARTUUID=%PARTUUID% rootwait rw
diff --git a/board/kontron/pitx-imx8m/genimage.cfg b/board/kontron/pitx-imx8m/genimage.cfg
index c78ef0f910..4a0aa117fb 100644
--- a/board/kontron/pitx-imx8m/genimage.cfg
+++ b/board/kontron/pitx-imx8m/genimage.cfg
@@ -1,5 +1,6 @@ 
 image sdcard.img {
 	hdimage {
+		partition-table-type = "gpt"
 	}
 
 	partition imx-boot {
@@ -9,8 +10,8 @@  image sdcard.img {
 	}
 
 	partition rootfs {
-		partition-type = 0x83
-		image = "rootfs.ext4"
 		offset = 8M
+		image = "rootfs.ext4"
+		partition-uuid = %PARTUUID%
 	}
 }
diff --git a/board/kontron/pitx-imx8m/post-build.sh b/board/kontron/pitx-imx8m/post-build.sh
index 4574221fe5..bf8861f6a9 100755
--- a/board/kontron/pitx-imx8m/post-build.sh
+++ b/board/kontron/pitx-imx8m/post-build.sh
@@ -1,4 +1,7 @@ 
 #!/bin/sh
+BOARD_DIR="$(dirname $0)"
+PARTUUID="$($HOST_DIR/bin/uuidgen)"
 
-mkdir -p $TARGET_DIR/boot/
-cp $BINARIES_DIR/boot.scr $TARGET_DIR/boot/boot.scr
+install -d "$TARGET_DIR/boot/extlinux/"
+sed "s/%PARTUUID%/$PARTUUID/g" "$BOARD_DIR/extlinux.conf" > "$TARGET_DIR/boot/extlinux/extlinux.conf"
+sed "s/%PARTUUID%/$PARTUUID/g" "$BOARD_DIR/genimage.cfg" > "$BINARIES_DIR/genimage.cfg"
diff --git a/board/kontron/pitx-imx8m/post-image.sh b/board/kontron/pitx-imx8m/post-image.sh
index 564211c829..3452fd4501 100755
--- a/board/kontron/pitx-imx8m/post-image.sh
+++ b/board/kontron/pitx-imx8m/post-image.sh
@@ -1,3 +1,3 @@ 
 #!/bin/sh
 
-support/scripts/genimage.sh -c $(dirname $0)/genimage.cfg
+support/scripts/genimage.sh -c ${BINARIES_DIR}/genimage.cfg
diff --git a/configs/kontron_pitx_imx8m_defconfig b/configs/kontron_pitx_imx8m_defconfig
index 4053e1e398..458083160b 100644
--- a/configs/kontron_pitx_imx8m_defconfig
+++ b/configs/kontron_pitx_imx8m_defconfig
@@ -15,6 +15,7 @@  BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.13"
 BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
 BR2_LINUX_KERNEL_DTS_SUPPORT=y
 BR2_LINUX_KERNEL_INTREE_DTS_NAME="freescale/imx8mq-kontron-pitx-imx8m"
+BR2_LINUX_KERNEL_DTB_KEEP_DIRNAME=y
 BR2_LINUX_KERNEL_INSTALL_TARGET=y
 BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
 
@@ -50,5 +51,3 @@  BR2_PACKAGE_HOST_GENIMAGE=y
 BR2_PACKAGE_HOST_IMX_MKIMAGE=y
 BR2_PACKAGE_HOST_UBOOT_TOOLS=y
 BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
-BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y
-BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="board/kontron/pitx-imx8m/boot.cmd"