blob: 46fe2eaabb0278ee72466d2d227d018a8fbeb91d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# SPDX-License-Identifier: GPL-2.0+
if [ -z ${fit_conf_prefix+x} ] ; then
fit_conf_prefix="conf-"
fi
make_FIT_image() {
local kernel_compression
local kernel_its=$output_dir/arch/$arch/boot/kernel_fdt.its
case $image_kernel in
*.gz)
kernel_compression=gzip
;;
*.lz4)
kernel_compression=lz4
;;
*)
kernel_compression=none
;;
esac
cat <<EOF > $kernel_its
/dts-v1/;
/ {
description = "Kernel + FDT image for $platform 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 = "$kernel_compression";
load = <$loadaddr>;
entry = <$loadaddr>;
hash-1 {
algo = "crc32";
};
hash-2 {
algo = "sha1";
};
};
EOF
local dtb
local addr=$fdtaddr
for dtb in ${dtbs[@]} ${dt_overlays[@]} ; do
local src=${dtb/:*/}
local dst=${dtb/*:/}
local load=
if [ ! -z $fdtaddr ] ; then
load="load = <$(printf 0x%08x $addr)>;"
addr=$(($addr+0x40000))
fi
if [[ ${src} != /* ]] ; then
src="$output_dir/arch/$arch/boot/dts/$src"
fi
dst=${dst/*\//}
cat <<EOF >> $kernel_its
fdt-$dst {
description = "Flattened Device Tree blob $dst";
data = /incbin/("$src");
type = "flat_dt";
arch = "$arch";
compression = "none";
$load
hash-1 {
algo = "crc32";
};
hash-2 {
algo = "sha1";
};
};
EOF
done
local config=$(echo ${dtbs[0]} | sed 's/.*[:/]//')
cat <<EOF >> $kernel_its
};
configurations {
default = "${fit_conf_prefix}${config}";
EOF
for dtb in ${dtbs[@]} ; do
local dst=${dtb/*:/}
dst=${dst/*\//}
cat <<EOF >> $kernel_its
${fit_conf_prefix}${dst} {
description = "Boot Linux kernel with $dst blob";
kernel = "kernel";
fdt = "fdt-$dst";
};
EOF
done
for dtbo in ${dt_overlays[@]} ; do
local dst=${dtbo/*:/}
dst=${dst/*\//}
cat <<EOF >> $kernel_its
${fit_conf_prefix}${dst} {
description = "DT overlay $dst";
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=kernel_fdt.itb
|