summaryrefslogtreecommitdiff
path: root/images/FIT.sh
diff options
context:
space:
mode:
Diffstat (limited to 'images/FIT.sh')
-rw-r--r--images/FIT.sh83
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