diff options
Diffstat (limited to 'images/FIT.sh')
-rw-r--r-- | images/FIT.sh | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/images/FIT.sh b/images/FIT.sh new file mode 100644 index 0000000..0ed5482 --- /dev/null +++ b/images/FIT.sh @@ -0,0 +1,83 @@ +# SPDX-License-Identifier: GPL-2.0+ + +make_FIT_image() { + local kernel_its=$output_dir/arch/$arch/boot/kernel_fdt.its + + cat <<EOF > $kernel_its +/dts-v1/; +/ { + description = "Kernel + FDT image for $board board"; + #address-cells = <1>; + + images { + kernel { + description = "Linux kernel"; + data = /incbin/("$output_dir/arch/$arch/boot/$image_kernel"); + type = "kernel"; + arch = "$arch"; + os = "linux"; + compression = "none"; + load = <$LOADADDR>; + entry = <$LOADADDR>; + hash-1 { + algo = "crc32"; + }; + hash-2 { + algo = "sha1"; + }; + }; +EOF + + local dtb + + for dtb in $DTBS ; do + local src=${dtb/:*/} + local dst=${dtb/*:/} + dst=${dst/*\//} + + cat <<EOF >> $kernel_its + fdt-$dst { + description = "Flattened Device Tree blob $dst"; + data = /incbin/("$output_dir/arch/$arch/boot/dts/$src"); + type = "flat_dt"; + arch = "$arch"; + compression = "none"; + hash-1 { + algo = "crc32"; + }; + hash-2 { + algo = "sha1"; + }; + }; +EOF + done + + local config=$(echo $DTBS | sed 's/.*[:/]//') + cat <<EOF >> $kernel_its + }; + + configurations { + default = "conf-$config"; +EOF + for dtb in $DTBS ; do + local dst=${dtb/*:/} + dst=${dst/*\//} + + cat <<EOF >> $kernel_its + conf-$dst { + description = "Boot Linux kernel with $dst blob"; + kernel = "kernel"; + fdt = "fdt-$dst"; + }; +EOF + done + + cat <<EOF >> $kernel_its + }; +}; +EOF + + PATH="$output_dir/scripts/dtc:$PATH" mkimage -f $kernel_its ${kernel_its/its/itb} +} + +image_file=$output_dir/arch/$arch/boot/kernel_fdt.itb |