Do make sense an u-boot installer?

Sean Anderson sean.anderson at
Thu Apr 15 20:34:03 CEST 2021

On 4/13/21 1:09 PM, Alberto Planas wrote:
 > Hi,
 > lately I am working on a small script that try to unify and help the
 > installation of u-boot (and the different assets) into SD cards.
 > As I am not knowledge about u-boot, I am starting small and with an use case
 > that makes sense for my work. I want to discuss a bit if makes sense the idea,
 > can be extended to cover other use cases and have a chance to be upstreamed
 > inside u-boot/tools.
 > Before sending any patches, the current code is living here:

 > # Delay the check, so we can validate all the input
 > [ "$(id -u)" -ne "0" ] && die "Please, run the installer as a root"

Have you considered use fakeroot? E.g. something like

	mkdir $1
	truncate -s ${SIZE}M $1.img
	mkfs.ext4 $1.img
	fuse2fs -o fakeroot $1.img $1
	fakeroot tar -C $1 -xf root.tar
	fusermount -u $1

Some other filesystems also support methods like this (I believe there
are several tools for FAT, and things like sload for F2FS).
Unfortunately, not every filesystem has a native fuse module or
importing tool. Alternatively, you could use guestfish (which uses qemu
to create filesystems (but which also requires /boot/vmlinuz to be
world-readable for whatever reason)) or lkl (which is the most versatile
solution, if a bit sledgehammer-esque).


Have you considered integrating with binman?


 > and the documentation is:
 > It is a POSIX Shell script with minimal dependencies, and fully tested via the
 > script `test_dubi` from the same directory.
 > The referred use case is like this:
 > * In the openSUSE project we generate a bunch of images for multiple ARM /
 > RISC-V devices, and all the logic for the installation is in a place that is
 > hard to reuse. There are other teams that needs this installation logic for
 > other projects.
 > * Could be handy a tool that can tool that can do something like:
 >    # List all the devices models that I can install
 >    dubi --list
 >    # Partition, format and install the bootloader in a local image file
 >    dubi --format --wipe -m rpi4 sdcard.img
 >    # ... or in a real device
 >    dubi --format --wipe -m rpi4 /dev/sdc
 > The models are stored in separated directories:
 > /usr/share/u-boot/
 >     rpi4/
 >        dubi.dsc
 >        uboot.bin
 >        boot.scr
 >     rpi3/
 >        ...
 > And a typical description file can be something like this:
 >    # SPDX-License-Identifier: GPL-2.0+
 >    MODEL=sunxi
 >    CPU=a31
 >    DESCRIPTION="Allwinner A31 (sun6i) SoC features a Quad-Core Cortex-A7 ARM
 > Processor SoC, and a Power VR SGX544 (with 8 shader engines) GPU from
 > Imagination Technologies."
 >    EFI=n
 >    LABEL=dos
 >    FILESYSTEM=ext4
 >    register partition size=16MiB type=c
 >    register partition size=500MiB type=swap
 >    register partition type=linux
 >    register bootloader u-boot-sunxi-with-spl.bin dst=8k
 >    register bootscr boot.scr partition=1 path=/
 > ... or something like that.
 > The current script more or less to that (minus some missing calls to mkimage,
 > WIP), and allows you to inject your own code for the different stages of the
 > installation process, in case that the defaults get too short.
 > Is this a path for an installer that makes sense? If so, any thoughts about
 > changes / improvements?
 > Thanks!

More information about the U-Boot mailing list