Re: [PATCH v7 2/2] arm64: boot: Support Flat Image Tree

From: Masahiro Yamada
Date: Thu Nov 30 2023 - 10:39:13 EST


On Thu, Nov 30, 2023 at 2:22 AM Simon Glass <sjg@xxxxxxxxxxxx> wrote:
>
> Add a script which produces a Flat Image Tree (FIT), a single file
> containing the built kernel and associated devicetree files.
> Compression defaults to gzip which gives a good balance of size and
> performance.
>
> The files compress from about 86MB to 24MB using this approach.
>
> The FIT can be used by bootloaders which support it, such as U-Boot
> and Linuxboot. It permits automatic selection of the correct
> devicetree, matching the compatible string of the running board with
> the closest compatible string in the FIT. There is no need for
> filenames or other workarounds.
>
> Add a 'make image.fit' build target for arm64, as well.
>
> The FIT can be examined using 'dumpimage -l'.
>
> This features requires pylibfdt (use 'pip install libfdt'). It also
> requires compression utilities for the algorithm being used. Supported
> compression options are the same as the Image.xxx files. For now there
> is no way to change the compression other than by editing the rule for
> $(obj)/image.fit
>
> While FIT supports a ramdisk / initrd, no attempt is made to support
> this here, since it must be built separately from the Linux build.
>
> Signed-off-by: Simon Glass <sjg@xxxxxxxxxxxx>
> ---
>
> Changes in v7:
> - Add Image as a dependency of image.fit
> - Drop kbuild tag
> - Add dependency on dtbs
> - Drop unnecessary path separator for dtbs
> - Rebase to -next
>
> Changes in v5:
> - Drop patch previously applied
> - Correct compression rule which was broken in v4
>
> Changes in v4:
> - Use single quotes for UIMAGE_NAME
>
> Changes in v3:
> - Drop temporary file image.itk
> - Drop patch 'Use double quotes for image name'
> - Drop double quotes in use of UIMAGE_NAME
> - Drop unnecessary CONFIG_EFI_ZBOOT condition for help
> - Avoid hard-coding "arm64" for the DT architecture
>
> Changes in v2:
> - Drop patch previously applied
> - Add .gitignore file
> - Move fit rule to Makefile.lib using an intermediate file
> - Drop dependency on CONFIG_EFI_ZBOOT
> - Pick up .dtb files separately from the kernel
> - Correct pylint too-many-args warning for write_kernel()
> - Include the kernel image in the file count
> - Add a pointer to the FIT spec and mention of its wide industry usage
> - Mention the kernel version in the FIT description
>
> MAINTAINERS | 7 +
> arch/arm64/Makefile | 9 +-
> arch/arm64/boot/.gitignore | 1 +
> arch/arm64/boot/Makefile | 6 +-
> scripts/Makefile.lib | 13 ++
> scripts/make_fit.py | 289 +++++++++++++++++++++++++++++++++++++
> 6 files changed, 322 insertions(+), 3 deletions(-)
> create mode 100755 scripts/make_fit.py
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 14587be87a33..d609f0e8deb3 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1585,6 +1585,13 @@ F: Documentation/process/maintainer-soc*.rst
> F: arch/arm/boot/dts/Makefile
> F: arch/arm64/boot/dts/Makefile
>
> +ARM64 FIT SUPPORT
> +M: Simon Glass <sjg@xxxxxxxxxxxx>
> +L: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx (moderated for non-subscribers)
> +S: Maintained
> +F: arch/arm64/boot/Makefile
> +F: scripts/make_fit.py
> +
> ARM ARCHITECTED TIMER DRIVER
> M: Mark Rutland <mark.rutland@xxxxxxx>
> M: Marc Zyngier <maz@xxxxxxxxxx>
> diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
> index 1bd4fae6e806..18e092de7cdb 100644
> --- a/arch/arm64/Makefile
> +++ b/arch/arm64/Makefile
> @@ -36,6 +36,8 @@ ifeq ($(CONFIG_BROKEN_GAS_INST),y)
> $(warning Detected assembler with broken .inst; disassembly will be unreliable)
> endif
>
> +KBUILD_DTBS := dtbs


Please remove this, and hard-code

image.fit: dtbs



>
> $(obj)/Image: vmlinux FORCE
> $(call if_changed,objcopy)
> @@ -39,6 +40,9 @@ $(obj)/Image.lzo: $(obj)/Image FORCE
> $(obj)/Image.zst: $(obj)/Image FORCE
> $(call if_changed,zstd)
>
> +$(obj)/image.fit: $(obj)/Image FORCE
> + $(call cmd,fit,gzip)


The gzip parameter is not used.
Please do

$(call cmd,fit)





In the python script, functions are separated with two blank lines,
but there is only one blank line between parse_args() and setup_fit().


I do not mind either way because it does not contain any class,
but please keep consistency.







--
Best Regards
Masahiro Yamada