[PATCH] scripts/make_fit: move the dtbs to the start
Ahmad Fatoum
a.fatoum at pengutronix.de
Tue May 20 02:38:34 PDT 2025
On 20.05.25 11:12, Sven Püschel wrote:
> Move the dtbs to the start of the fit image to avoid u-boot overwriting
> the dtb while relocating the kernel image.
>
> Using a current u-boot master eeb5ff1a468b ("Merge tag
> 'efi-2025-07-rc3-2' of https://source.denx.de/u-boot/custodians/u-boot-efi")
> failed to load a barebox fit image on a Pine64 Rock64 board:
>
> => bootm $loadaddr#conf-rk3328-rock64.dtb
> Using 'conf-rk3328-rock64.dtb' configuration
> Verifying Hash Integrity ... OK
> Trying 'kernel' kernel subimage
> Description: barebox-2025.04.0-00231-g00fd6bfa3088-dirty
> Type: Kernel Image (no loading done)
> Compression: uncompressed
> Data Start: 0x00800968
> Data Size: 737350 Bytes = 720.1 KiB
> Verifying Hash Integrity ... OK
> Using 'conf-rk3328-rock64.dtb' configuration
> Verifying Hash Integrity ... OK
> Trying 'fdt-1' fdt subimage
> Description: rk3328-rock64.dtb
> Type: Flat Device Tree
> Compression: uncompressed
> Data Start: 0x008b4a48
> Data Size: 37415 Bytes = 36.5 KiB
> Architecture: AArch64
> Verifying Hash Integrity ... OK
> Booting using the fdt blob at 0x8b4a48
> Working FDT set to 8b4a48
> XIP Kernel Image (no loading done) to 800968
> Moving Image from 0x800968 to 0x880000, end=0x934048
> ERROR: image is not a fdt - must RESET the board to recover.
> FDT creation failed!
> resetting ...
>
> The culprint was the fact that u-boot relocated the barebox image to
> match the alignment requirements from the Linux kernel. But the
> relocation did overwrite the devicetree and therefore failed to boot it.
>
> To prevent this error from happening, move the dtbs in the generated
> barebox fit image to the start, so u-boot cannot overwrite these when
> moving the kernel image to a higher address.
>
> Signed-off-by: Sven Püschel <s.pueschel at pengutronix.de>
The point of the FIT image is to make it easier to boot barebox from
existing bootloaders, so a workaround sounds sensible, even if U-Boot
should be ultimately fixed:
Reviewed-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
Sascha, can this go into master? Thanks.
Ahmad
> ---
> scripts/make_fit.py | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/scripts/make_fit.py b/scripts/make_fit.py
> index 2190da4c00..4253b07e5f 100755
> --- a/scripts/make_fit.py
> +++ b/scripts/make_fit.py
> @@ -267,12 +267,6 @@ def build_fit(args):
> dtbs_seen = set()
> fdts = {}
>
> - # Handle the kernel
> - with open(args.kernel, 'rb') as inf:
> - comp_data = compress_data(inf, 'none')
> - size += os.path.getsize(args.kernel)
> - write_kernel(fsw, comp_data, args)
> -
> for fname in args.dtbs:
> # Ignore non-DTB (*.dtb) files
> if os.path.splitext(fname)[1] != '.dtb':
> @@ -297,6 +291,12 @@ def build_fit(args):
>
> entries.append([dtbname, model, compat, files_seq])
>
> + # Handle the kernel
> + with open(args.kernel, 'rb') as inf:
> + comp_data = compress_data(inf, 'none')
> + size += os.path.getsize(args.kernel)
> + write_kernel(fsw, comp_data, args)
> +
> finish_fit(fsw, entries)
>
> # Include the kernel itself in the returned file count
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list