blob: 38e05153e3573560c132ad8657062ef166c960e2 [file] [log] [blame]
Brad Bishop1a4b7ee2018-12-16 17:11:34 -08001inherit kernel-uboot kernel-artifact-names uboot-sign
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002
Andrew Geisslerd1e89492021-02-12 15:35:20 -06003KERNEL_IMAGETYPE_REPLACEMENT = ""
4
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005python __anonymous () {
Brad Bishop6e60e8b2018-02-01 10:27:11 -05006 kerneltypes = d.getVar('KERNEL_IMAGETYPES') or ""
He Zhefe76b1e2016-05-25 04:47:16 -04007 if 'fitImage' in kerneltypes.split():
Brad Bishop6e60e8b2018-02-01 10:27:11 -05008 depends = d.getVar("DEPENDS")
Brad Bishop19323692019-04-05 15:28:33 -04009 depends = "%s u-boot-tools-native dtc-native" % depends
Patrick Williamsc124f4f2015-09-15 14:41:29 -050010 d.setVar("DEPENDS", depends)
11
Brad Bishopd7bf8c12018-02-25 22:55:05 -050012 uarch = d.getVar("UBOOT_ARCH")
13 if uarch == "arm64":
14 replacementtype = "Image"
Brad Bishopc342db32019-05-15 21:57:59 -040015 elif uarch == "riscv":
16 replacementtype = "Image"
Brad Bishopd7bf8c12018-02-25 22:55:05 -050017 elif uarch == "mips":
Brad Bishop6e60e8b2018-02-01 10:27:11 -050018 replacementtype = "vmlinuz.bin"
Brad Bishopd7bf8c12018-02-25 22:55:05 -050019 elif uarch == "x86":
Patrick Williamsc0f7c042017-02-23 20:41:17 -060020 replacementtype = "bzImage"
Brad Bishop316dfdd2018-06-25 12:45:53 -040021 elif uarch == "microblaze":
22 replacementtype = "linux.bin"
Patrick Williamsc0f7c042017-02-23 20:41:17 -060023 else:
24 replacementtype = "zImage"
25
Andrew Geisslerd1e89492021-02-12 15:35:20 -060026 d.setVar("KERNEL_IMAGETYPE_REPLACEMENT", replacementtype)
27
Brad Bishop19323692019-04-05 15:28:33 -040028 # Override KERNEL_IMAGETYPE_FOR_MAKE variable, which is internal
29 # to kernel.bbclass . We have to override it, since we pack zImage
30 # (at least for now) into the fitImage .
Brad Bishop6e60e8b2018-02-01 10:27:11 -050031 typeformake = d.getVar("KERNEL_IMAGETYPE_FOR_MAKE") or ""
He Zhefe76b1e2016-05-25 04:47:16 -040032 if 'fitImage' in typeformake.split():
Patrick Williamsc0f7c042017-02-23 20:41:17 -060033 d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', typeformake.replace('fitImage', replacementtype))
Patrick Williamsc124f4f2015-09-15 14:41:29 -050034
Brad Bishop6e60e8b2018-02-01 10:27:11 -050035 image = d.getVar('INITRAMFS_IMAGE')
Patrick Williamsc124f4f2015-09-15 14:41:29 -050036 if image:
George McCollister185c8ae2016-05-26 08:55:16 -050037 d.appendVarFlag('do_assemble_fitimage_initramfs', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
38
Brad Bishop19323692019-04-05 15:28:33 -040039 #check if there are any dtb providers
40 providerdtb = d.getVar("PREFERRED_PROVIDER_virtual/dtb")
41 if providerdtb:
42 d.appendVarFlag('do_assemble_fitimage', 'depends', ' virtual/dtb:do_populate_sysroot')
43 d.appendVarFlag('do_assemble_fitimage_initramfs', 'depends', ' virtual/dtb:do_populate_sysroot')
44 d.setVar('EXTERNAL_KERNEL_DEVICETREE', "${RECIPE_SYSROOT}/boot/devicetree")
45
Patrick Williamsc0f7c042017-02-23 20:41:17 -060046 # Verified boot will sign the fitImage and append the public key to
Brad Bishop6e60e8b2018-02-01 10:27:11 -050047 # U-Boot dtb. We ensure the U-Boot dtb is deployed before assembling
Patrick Williamsc0f7c042017-02-23 20:41:17 -060048 # the fitImage:
Brad Bishop15ae2502019-06-18 21:44:24 -040049 if d.getVar('UBOOT_SIGN_ENABLE') == "1" and d.getVar('UBOOT_DTB_BINARY'):
Brad Bishop6e60e8b2018-02-01 10:27:11 -050050 uboot_pn = d.getVar('PREFERRED_PROVIDER_u-boot') or 'u-boot'
Brad Bishop19323692019-04-05 15:28:33 -040051 d.appendVarFlag('do_assemble_fitimage', 'depends', ' %s:do_populate_sysroot' % uboot_pn)
Andrew Geisslerd1e89492021-02-12 15:35:20 -060052 if d.getVar('INITRAMFS_IMAGE_BUNDLE') == "1":
53 d.appendVarFlag('do_assemble_fitimage_initramfs', 'depends', ' %s:do_populate_sysroot' % uboot_pn)
Patrick Williamsc124f4f2015-09-15 14:41:29 -050054}
55
Andrew Geisslerf0343792020-11-18 10:42:21 -060056
Andrew Geisslerd1e89492021-02-12 15:35:20 -060057# Description string
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050058FIT_DESC ?= "Kernel fitImage for ${DISTRO_NAME}/${PV}/${MACHINE}"
Andrew Geisslerd1e89492021-02-12 15:35:20 -060059
60# Sign individual images as well
61FIT_SIGN_INDIVIDUAL ?= "0"
62
Patrick Williams0ca19cc2021-08-16 14:03:13 -050063# Keys used to sign individually image nodes.
64# The keys to sign image nodes must be different from those used to sign
65# configuration nodes, otherwise the "required" property, from
66# UBOOT_DTB_BINARY, will be set to "conf", because "conf" prevails on "image".
67# Then the images signature checking will not be mandatory and no error will be
68# raised in case of failure.
69# UBOOT_SIGN_IMG_KEYNAME = "dev2" # keys name in keydir (eg. "dev2.crt", "dev2.key")
70
Patrick Williamsc124f4f2015-09-15 14:41:29 -050071#
72# Emit the fitImage ITS header
73#
George McCollister185c8ae2016-05-26 08:55:16 -050074# $1 ... .its filename
Patrick Williamsc124f4f2015-09-15 14:41:29 -050075fitimage_emit_fit_header() {
George McCollister185c8ae2016-05-26 08:55:16 -050076 cat << EOF >> ${1}
Patrick Williamsc124f4f2015-09-15 14:41:29 -050077/dts-v1/;
78
79/ {
Andrew Geisslerd1e89492021-02-12 15:35:20 -060080 description = "${FIT_DESC}";
Patrick Williamsc124f4f2015-09-15 14:41:29 -050081 #address-cells = <1>;
82EOF
83}
84
85#
86# Emit the fitImage section bits
87#
George McCollister185c8ae2016-05-26 08:55:16 -050088# $1 ... .its filename
89# $2 ... Section bit type: imagestart - image section start
Patrick Williamsc124f4f2015-09-15 14:41:29 -050090# confstart - configuration section start
91# sectend - section end
92# fitend - fitimage end
93#
94fitimage_emit_section_maint() {
George McCollister185c8ae2016-05-26 08:55:16 -050095 case $2 in
Patrick Williamsc124f4f2015-09-15 14:41:29 -050096 imagestart)
George McCollister185c8ae2016-05-26 08:55:16 -050097 cat << EOF >> ${1}
Patrick Williamsc124f4f2015-09-15 14:41:29 -050098
99 images {
100EOF
101 ;;
102 confstart)
George McCollister185c8ae2016-05-26 08:55:16 -0500103 cat << EOF >> ${1}
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500104
105 configurations {
106EOF
107 ;;
108 sectend)
George McCollister185c8ae2016-05-26 08:55:16 -0500109 cat << EOF >> ${1}
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500110 };
111EOF
112 ;;
113 fitend)
George McCollister185c8ae2016-05-26 08:55:16 -0500114 cat << EOF >> ${1}
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500115};
116EOF
117 ;;
118 esac
119}
120
121#
122# Emit the fitImage ITS kernel section
123#
George McCollister185c8ae2016-05-26 08:55:16 -0500124# $1 ... .its filename
125# $2 ... Image counter
126# $3 ... Path to kernel image
127# $4 ... Compression type
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500128fitimage_emit_section_kernel() {
129
Brad Bishopf3fd2882019-06-21 08:06:37 -0400130 kernel_csum="${FIT_HASH_ALG}"
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600131 kernel_sign_algo="${FIT_SIGN_ALG}"
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500132 kernel_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500133
Brad Bishop316dfdd2018-06-25 12:45:53 -0400134 ENTRYPOINT="${UBOOT_ENTRYPOINT}"
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500135 if [ -n "${UBOOT_ENTRYSYMBOL}" ]; then
136 ENTRYPOINT=`${HOST_PREFIX}nm vmlinux | \
137 awk '$3=="${UBOOT_ENTRYSYMBOL}" {print "0x"$1;exit}'`
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500138 fi
139
George McCollister185c8ae2016-05-26 08:55:16 -0500140 cat << EOF >> ${1}
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600141 kernel-${2} {
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500142 description = "Linux kernel";
George McCollister185c8ae2016-05-26 08:55:16 -0500143 data = /incbin/("${3}");
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500144 type = "kernel";
145 arch = "${UBOOT_ARCH}";
146 os = "linux";
George McCollister185c8ae2016-05-26 08:55:16 -0500147 compression = "${4}";
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500148 load = <${UBOOT_LOADADDRESS}>;
149 entry = <${ENTRYPOINT}>;
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600150 hash-1 {
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500151 algo = "${kernel_csum}";
152 };
153 };
154EOF
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600155
156 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "${kernel_sign_keyname}" ] ; then
157 sed -i '$ d' ${1}
158 cat << EOF >> ${1}
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600159 signature-1 {
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600160 algo = "${kernel_csum},${kernel_sign_algo}";
161 key-name-hint = "${kernel_sign_keyname}";
162 };
163 };
164EOF
165 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500166}
167
168#
169# Emit the fitImage ITS DTB section
170#
George McCollister185c8ae2016-05-26 08:55:16 -0500171# $1 ... .its filename
172# $2 ... Image counter
173# $3 ... Path to DTB image
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500174fitimage_emit_section_dtb() {
175
Brad Bishopf3fd2882019-06-21 08:06:37 -0400176 dtb_csum="${FIT_HASH_ALG}"
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600177 dtb_sign_algo="${FIT_SIGN_ALG}"
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500178 dtb_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500179
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800180 dtb_loadline=""
181 dtb_ext=${DTB##*.}
182 if [ "${dtb_ext}" = "dtbo" ]; then
183 if [ -n "${UBOOT_DTBO_LOADADDRESS}" ]; then
184 dtb_loadline="load = <${UBOOT_DTBO_LOADADDRESS}>;"
185 fi
186 elif [ -n "${UBOOT_DTB_LOADADDRESS}" ]; then
187 dtb_loadline="load = <${UBOOT_DTB_LOADADDRESS}>;"
188 fi
George McCollister185c8ae2016-05-26 08:55:16 -0500189 cat << EOF >> ${1}
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600190 fdt-${2} {
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500191 description = "Flattened Device Tree blob";
George McCollister185c8ae2016-05-26 08:55:16 -0500192 data = /incbin/("${3}");
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500193 type = "flat_dt";
194 arch = "${UBOOT_ARCH}";
195 compression = "none";
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800196 ${dtb_loadline}
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600197 hash-1 {
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500198 algo = "${dtb_csum}";
199 };
200 };
201EOF
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600202
203 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "${dtb_sign_keyname}" ] ; then
204 sed -i '$ d' ${1}
205 cat << EOF >> ${1}
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600206 signature-1 {
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600207 algo = "${dtb_csum},${dtb_sign_algo}";
208 key-name-hint = "${dtb_sign_keyname}";
209 };
210 };
211EOF
212 fi
213}
214
215#
216# Emit the fitImage ITS u-boot script section
217#
218# $1 ... .its filename
219# $2 ... Image counter
220# $3 ... Path to boot script image
221fitimage_emit_section_boot_script() {
222
223 bootscr_csum="${FIT_HASH_ALG}"
224 bootscr_sign_algo="${FIT_SIGN_ALG}"
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500225 bootscr_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600226
227 cat << EOF >> ${1}
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700228 bootscr-${2} {
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600229 description = "U-boot script";
230 data = /incbin/("${3}");
231 type = "script";
232 arch = "${UBOOT_ARCH}";
233 compression = "none";
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700234 hash-1 {
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600235 algo = "${bootscr_csum}";
236 };
237 };
238EOF
239
240 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "${bootscr_sign_keyname}" ] ; then
241 sed -i '$ d' ${1}
242 cat << EOF >> ${1}
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700243 signature-1 {
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600244 algo = "${bootscr_csum},${bootscr_sign_algo}";
245 key-name-hint = "${bootscr_sign_keyname}";
246 };
247 };
248EOF
249 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500250}
251
252#
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600253# Emit the fitImage ITS setup section
254#
255# $1 ... .its filename
256# $2 ... Image counter
257# $3 ... Path to setup image
258fitimage_emit_section_setup() {
259
Brad Bishopf3fd2882019-06-21 08:06:37 -0400260 setup_csum="${FIT_HASH_ALG}"
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600261
262 cat << EOF >> ${1}
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600263 setup-${2} {
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600264 description = "Linux setup.bin";
265 data = /incbin/("${3}");
266 type = "x86_setup";
267 arch = "${UBOOT_ARCH}";
268 os = "linux";
269 compression = "none";
270 load = <0x00090000>;
271 entry = <0x00090000>;
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600272 hash-1 {
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600273 algo = "${setup_csum}";
274 };
275 };
276EOF
277}
278
279#
George McCollister185c8ae2016-05-26 08:55:16 -0500280# Emit the fitImage ITS ramdisk section
281#
282# $1 ... .its filename
283# $2 ... Image counter
284# $3 ... Path to ramdisk image
285fitimage_emit_section_ramdisk() {
286
Brad Bishopf3fd2882019-06-21 08:06:37 -0400287 ramdisk_csum="${FIT_HASH_ALG}"
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600288 ramdisk_sign_algo="${FIT_SIGN_ALG}"
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500289 ramdisk_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
Nathan Rossib4a4dc02016-10-21 22:07:27 +1000290 ramdisk_loadline=""
291 ramdisk_entryline=""
292
293 if [ -n "${UBOOT_RD_LOADADDRESS}" ]; then
294 ramdisk_loadline="load = <${UBOOT_RD_LOADADDRESS}>;"
295 fi
296 if [ -n "${UBOOT_RD_ENTRYPOINT}" ]; then
297 ramdisk_entryline="entry = <${UBOOT_RD_ENTRYPOINT}>;"
298 fi
George McCollister185c8ae2016-05-26 08:55:16 -0500299
300 cat << EOF >> ${1}
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600301 ramdisk-${2} {
Rick Altherrbc1b8802017-01-20 11:28:53 -0800302 description = "${INITRAMFS_IMAGE}";
George McCollister185c8ae2016-05-26 08:55:16 -0500303 data = /incbin/("${3}");
304 type = "ramdisk";
305 arch = "${UBOOT_ARCH}";
306 os = "linux";
Brad Bishop00e122a2019-10-05 11:10:57 -0400307 compression = "none";
Nathan Rossib4a4dc02016-10-21 22:07:27 +1000308 ${ramdisk_loadline}
309 ${ramdisk_entryline}
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600310 hash-1 {
George McCollister185c8ae2016-05-26 08:55:16 -0500311 algo = "${ramdisk_csum}";
312 };
313 };
314EOF
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600315
316 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "${ramdisk_sign_keyname}" ] ; then
317 sed -i '$ d' ${1}
318 cat << EOF >> ${1}
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600319 signature-1 {
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600320 algo = "${ramdisk_csum},${ramdisk_sign_algo}";
321 key-name-hint = "${ramdisk_sign_keyname}";
322 };
323 };
324EOF
325 fi
George McCollister185c8ae2016-05-26 08:55:16 -0500326}
327
328#
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500329# Emit the fitImage ITS configuration section
330#
George McCollister185c8ae2016-05-26 08:55:16 -0500331# $1 ... .its filename
332# $2 ... Linux kernel ID
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500333# $3 ... DTB image name
George McCollister185c8ae2016-05-26 08:55:16 -0500334# $4 ... ramdisk ID
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600335# $5 ... u-boot script ID
336# $6 ... config ID
337# $7 ... default flag
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500338fitimage_emit_section_config() {
339
Brad Bishopf3fd2882019-06-21 08:06:37 -0400340 conf_csum="${FIT_HASH_ALG}"
Brad Bishop64c979e2019-11-04 13:55:29 -0500341 conf_sign_algo="${FIT_SIGN_ALG}"
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700342 if [ "${UBOOT_SIGN_ENABLE}" = "1" ] ; then
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600343 conf_sign_keyname="${UBOOT_SIGN_KEYNAME}"
344 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500345
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600346 its_file="${1}"
347 kernel_id="${2}"
348 dtb_image="${3}"
349 ramdisk_id="${4}"
350 bootscr_id="${5}"
351 config_id="${6}"
352 default_flag="${7}"
353
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500354 # Test if we have any DTBs at all
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800355 sep=""
356 conf_desc=""
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600357 conf_node="conf-"
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800358 kernel_line=""
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600359 fdt_line=""
360 ramdisk_line=""
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600361 bootscr_line=""
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500362 setup_line=""
363 default_line=""
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600364
Andrew Geissler635e0e42020-08-21 15:58:33 -0500365 # conf node name is selected based on dtb ID if it is present,
366 # otherwise its selected based on kernel ID
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600367 if [ -n "${dtb_image}" ]; then
368 conf_node=$conf_node${dtb_image}
Andrew Geissler635e0e42020-08-21 15:58:33 -0500369 else
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600370 conf_node=$conf_node${kernel_id}
Andrew Geissler635e0e42020-08-21 15:58:33 -0500371 fi
372
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600373 if [ -n "${kernel_id}" ]; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800374 conf_desc="Linux kernel"
375 sep=", "
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600376 kernel_line="kernel = \"kernel-${kernel_id}\";"
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800377 fi
378
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600379 if [ -n "${dtb_image}" ]; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800380 conf_desc="${conf_desc}${sep}FDT blob"
381 sep=", "
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600382 fdt_line="fdt = \"fdt-${dtb_image}\";"
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600383 fi
384
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600385 if [ -n "${ramdisk_id}" ]; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800386 conf_desc="${conf_desc}${sep}ramdisk"
387 sep=", "
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600388 ramdisk_line="ramdisk = \"ramdisk-${ramdisk_id}\";"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500389 fi
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600390
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600391 if [ -n "${bootscr_id}" ]; then
392 conf_desc="${conf_desc}${sep}u-boot script"
393 sep=", "
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700394 bootscr_line="bootscr = \"bootscr-${bootscr_id}\";"
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600395 fi
396
397 if [ -n "${config_id}" ]; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800398 conf_desc="${conf_desc}${sep}setup"
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600399 setup_line="setup = \"setup-${config_id}\";"
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600400 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500401
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600402 if [ "${default_flag}" = "1" ]; then
Andrew Geissler635e0e42020-08-21 15:58:33 -0500403 # default node is selected based on dtb ID if it is present,
404 # otherwise its selected based on kernel ID
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600405 if [ -n "${dtb_image}" ]; then
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600406 default_line="default = \"conf-${dtb_image}\";"
Andrew Geissler635e0e42020-08-21 15:58:33 -0500407 else
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600408 default_line="default = \"conf-${kernel_id}\";"
Andrew Geissler635e0e42020-08-21 15:58:33 -0500409 fi
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500410 fi
411
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600412 cat << EOF >> ${its_file}
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500413 ${default_line}
Andrew Geissler635e0e42020-08-21 15:58:33 -0500414 $conf_node {
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600415 description = "${default_flag} ${conf_desc}";
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500416 ${kernel_line}
417 ${fdt_line}
George McCollister185c8ae2016-05-26 08:55:16 -0500418 ${ramdisk_line}
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600419 ${bootscr_line}
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600420 ${setup_line}
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600421 hash-1 {
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500422 algo = "${conf_csum}";
423 };
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600424EOF
425
426 if [ ! -z "${conf_sign_keyname}" ] ; then
427
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800428 sign_line="sign-images = "
429 sep=""
430
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600431 if [ -n "${kernel_id}" ]; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800432 sign_line="${sign_line}${sep}\"kernel\""
433 sep=", "
434 fi
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600435
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600436 if [ -n "${dtb_image}" ]; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800437 sign_line="${sign_line}${sep}\"fdt\""
438 sep=", "
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600439 fi
440
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600441 if [ -n "${ramdisk_id}" ]; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800442 sign_line="${sign_line}${sep}\"ramdisk\""
443 sep=", "
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600444 fi
445
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600446 if [ -n "${bootscr_id}" ]; then
447 sign_line="${sign_line}${sep}\"bootscr\""
448 sep=", "
449 fi
450
451 if [ -n "${config_id}" ]; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800452 sign_line="${sign_line}${sep}\"setup\""
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600453 fi
454
455 sign_line="${sign_line};"
456
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600457 cat << EOF >> ${its_file}
Andrew Geissler90fd73c2021-03-05 15:25:55 -0600458 signature-1 {
Brad Bishop64c979e2019-11-04 13:55:29 -0500459 algo = "${conf_csum},${conf_sign_algo}";
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600460 key-name-hint = "${conf_sign_keyname}";
461 ${sign_line}
462 };
463EOF
464 fi
465
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600466 cat << EOF >> ${its_file}
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500467 };
468EOF
469}
470
George McCollister185c8ae2016-05-26 08:55:16 -0500471#
472# Assemble fitImage
473#
474# $1 ... .its filename
475# $2 ... fitImage name
476# $3 ... include ramdisk
477fitimage_assemble() {
478 kernelcount=1
479 dtbcount=""
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500480 DTBS=""
George McCollister185c8ae2016-05-26 08:55:16 -0500481 ramdiskcount=${3}
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600482 setupcount=""
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600483 bootscr_id=""
George McCollister185c8ae2016-05-26 08:55:16 -0500484 rm -f ${1} arch/${ARCH}/boot/${2}
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500485
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500486 if [ ! -z "${UBOOT_SIGN_IMG_KEYNAME}" -a "${UBOOT_SIGN_KEYNAME}" = "${UBOOT_SIGN_IMG_KEYNAME}" ]; then
487 bbfatal "Keys used to sign images and configuration nodes must be different."
488 fi
489
George McCollister185c8ae2016-05-26 08:55:16 -0500490 fitimage_emit_fit_header ${1}
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500491
George McCollister185c8ae2016-05-26 08:55:16 -0500492 #
493 # Step 1: Prepare a kernel image section.
494 #
495 fitimage_emit_section_maint ${1} imagestart
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500496
George McCollister185c8ae2016-05-26 08:55:16 -0500497 uboot_prep_kimage
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600498
499 if [ "${INITRAMFS_IMAGE_BUNDLE}" = "1" ]; then
500 initramfs_bundle_path="arch/"${UBOOT_ARCH}"/boot/"${KERNEL_IMAGETYPE_REPLACEMENT}".initramfs"
501 if [ -e "${initramfs_bundle_path}" ]; then
502
503 #
504 # Include the kernel/rootfs bundle.
505 #
506
507 fitimage_emit_section_kernel ${1} "${kernelcount}" "${initramfs_bundle_path}" "${linux_comp}"
508 else
509 bbwarn "${initramfs_bundle_path} not found."
510 fi
511 else
512 fitimage_emit_section_kernel ${1} "${kernelcount}" linux.bin "${linux_comp}"
513 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500514
George McCollister185c8ae2016-05-26 08:55:16 -0500515 #
516 # Step 2: Prepare a DTB image section
517 #
Brad Bishop19323692019-04-05 15:28:33 -0400518
Andrew Geissler95ac1b82021-03-31 14:34:31 -0500519 if [ -n "${KERNEL_DEVICETREE}" ]; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500520 dtbcount=1
George McCollister185c8ae2016-05-26 08:55:16 -0500521 for DTB in ${KERNEL_DEVICETREE}; do
522 if echo ${DTB} | grep -q '/dts/'; then
523 bbwarn "${DTB} contains the full path to the the dts file, but only the dtb name should be used."
524 DTB=`basename ${DTB} | sed 's,\.dts$,.dtb,g'`
525 fi
Andrew Geissler95ac1b82021-03-31 14:34:31 -0500526
527 # Skip ${DTB} if it's also provided in ${EXTERNAL_KERNEL_DEVICETREE}
528 if [ -n "${EXTERNAL_KERNEL_DEVICETREE}" ] && [ -s ${EXTERNAL_KERNEL_DEVICETREE}/${DTB} ]; then
529 continue
530 fi
531
George McCollister185c8ae2016-05-26 08:55:16 -0500532 DTB_PATH="arch/${ARCH}/boot/dts/${DTB}"
533 if [ ! -e "${DTB_PATH}" ]; then
534 DTB_PATH="arch/${ARCH}/boot/${DTB}"
535 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500536
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500537 DTB=$(echo "${DTB}" | tr '/' '_')
538 DTBS="${DTBS} ${DTB}"
539 fitimage_emit_section_dtb ${1} ${DTB} ${DTB_PATH}
George McCollister185c8ae2016-05-26 08:55:16 -0500540 done
541 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500542
Brad Bishop19323692019-04-05 15:28:33 -0400543 if [ -n "${EXTERNAL_KERNEL_DEVICETREE}" ]; then
544 dtbcount=1
Andrew Geissler82c905d2020-04-13 13:39:40 -0500545 for DTB in $(find "${EXTERNAL_KERNEL_DEVICETREE}" \( -name '*.dtb' -o -name '*.dtbo' \) -printf '%P\n' | sort); do
Brad Bishop19323692019-04-05 15:28:33 -0400546 DTB=$(echo "${DTB}" | tr '/' '_')
547 DTBS="${DTBS} ${DTB}"
Andrew Geissler82c905d2020-04-13 13:39:40 -0500548 fitimage_emit_section_dtb ${1} ${DTB} "${EXTERNAL_KERNEL_DEVICETREE}/${DTB}"
Brad Bishop19323692019-04-05 15:28:33 -0400549 done
550 fi
551
George McCollister185c8ae2016-05-26 08:55:16 -0500552 #
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600553 # Step 3: Prepare a u-boot script section
554 #
555
556 if [ -n "${UBOOT_ENV}" ] && [ -d "${STAGING_DIR_HOST}/boot" ]; then
557 if [ -e "${STAGING_DIR_HOST}/boot/${UBOOT_ENV_BINARY}" ]; then
558 cp ${STAGING_DIR_HOST}/boot/${UBOOT_ENV_BINARY} ${B}
559 bootscr_id="${UBOOT_ENV_BINARY}"
560 fitimage_emit_section_boot_script ${1} "${bootscr_id}" ${UBOOT_ENV_BINARY}
561 else
562 bbwarn "${STAGING_DIR_HOST}/boot/${UBOOT_ENV_BINARY} not found."
563 fi
564 fi
565
566 #
567 # Step 4: Prepare a setup section. (For x86)
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600568 #
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500569 if [ -e arch/${ARCH}/boot/setup.bin ]; then
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600570 setupcount=1
571 fitimage_emit_section_setup ${1} "${setupcount}" arch/${ARCH}/boot/setup.bin
572 fi
573
574 #
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600575 # Step 5: Prepare a ramdisk section.
George McCollister185c8ae2016-05-26 08:55:16 -0500576 #
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600577 if [ "x${ramdiskcount}" = "x1" ] && [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
Rick Altherrbc1b8802017-01-20 11:28:53 -0800578 # Find and use the first initramfs image archive type we find
Andrew Geisslerd159c7f2021-09-02 21:05:58 -0500579 for img in cpio.lz4 cpio.lzo cpio.lzma cpio.xz cpio.zst cpio.gz ext2.gz cpio; do
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500580 initramfs_path="${DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.${img}"
Rick Altherrbc1b8802017-01-20 11:28:53 -0800581 echo "Using $initramfs_path"
582 if [ -e "${initramfs_path}" ]; then
583 fitimage_emit_section_ramdisk ${1} "${ramdiskcount}" "${initramfs_path}"
584 break
585 fi
586 done
George McCollister185c8ae2016-05-26 08:55:16 -0500587 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500588
George McCollister185c8ae2016-05-26 08:55:16 -0500589 fitimage_emit_section_maint ${1} sectend
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500590
George McCollister185c8ae2016-05-26 08:55:16 -0500591 # Force the first Kernel and DTB in the default config
592 kernelcount=1
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500593 if [ -n "${dtbcount}" ]; then
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600594 dtbcount=1
595 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500596
George McCollister185c8ae2016-05-26 08:55:16 -0500597 #
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600598 # Step 6: Prepare a configurations section
George McCollister185c8ae2016-05-26 08:55:16 -0500599 #
600 fitimage_emit_section_maint ${1} confstart
601
Andrew Geissler635e0e42020-08-21 15:58:33 -0500602 # kernel-fitimage.bbclass currently only supports a single kernel (no less or
603 # more) to be added to the FIT image along with 0 or more device trees and
604 # 0 or 1 ramdisk.
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600605 # It is also possible to include an initramfs bundle (kernel and rootfs in one binary)
606 # When the initramfs bundle is used ramdisk is disabled.
Andrew Geissler635e0e42020-08-21 15:58:33 -0500607 # If a device tree is to be part of the FIT image, then select
608 # the default configuration to be used is based on the dtbcount. If there is
609 # no dtb present than select the default configuation to be based on
610 # the kernelcount.
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500611 if [ -n "${DTBS}" ]; then
612 i=1
613 for DTB in ${DTBS}; do
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800614 dtb_ext=${DTB##*.}
615 if [ "${dtb_ext}" = "dtbo" ]; then
Andrew Geissler9b4d8b02021-02-19 12:26:16 -0600616 fitimage_emit_section_config ${1} "" "${DTB}" "" "${bootscr_id}" "" "`expr ${i} = ${dtbcount}`"
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800617 else
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600618 fitimage_emit_section_config ${1} "${kernelcount}" "${DTB}" "${ramdiskcount}" "${bootscr_id}" "${setupcount}" "`expr ${i} = ${dtbcount}`"
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800619 fi
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500620 i=`expr ${i} + 1`
621 done
Andrew Geissler635e0e42020-08-21 15:58:33 -0500622 else
623 defaultconfigcount=1
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600624 fitimage_emit_section_config ${1} "${kernelcount}" "" "${ramdiskcount}" "${bootscr_id}" "${setupcount}" "${defaultconfigcount}"
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500625 fi
George McCollister185c8ae2016-05-26 08:55:16 -0500626
627 fitimage_emit_section_maint ${1} sectend
628
629 fitimage_emit_section_maint ${1} fitend
630
631 #
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600632 # Step 7: Assemble the image
George McCollister185c8ae2016-05-26 08:55:16 -0500633 #
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600634 ${UBOOT_MKIMAGE} \
George McCollister185c8ae2016-05-26 08:55:16 -0500635 ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
636 -f ${1} \
637 arch/${ARCH}/boot/${2}
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600638
639 #
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600640 # Step 8: Sign the image and add public key to U-Boot dtb
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600641 #
642 if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then
Brad Bishop19323692019-04-05 15:28:33 -0400643 add_key_to_u_boot=""
644 if [ -n "${UBOOT_DTB_BINARY}" ]; then
645 # The u-boot.dtb is a symlink to UBOOT_DTB_IMAGE, so we need copy
646 # both of them, and don't dereference the symlink.
647 cp -P ${STAGING_DATADIR}/u-boot*.dtb ${B}
648 add_key_to_u_boot="-K ${B}/${UBOOT_DTB_BINARY}"
649 fi
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600650 ${UBOOT_MKIMAGE_SIGN} \
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600651 ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
652 -F -k "${UBOOT_SIGN_KEYDIR}" \
Brad Bishop19323692019-04-05 15:28:33 -0400653 $add_key_to_u_boot \
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600654 -r arch/${ARCH}/boot/${2} \
655 ${UBOOT_MKIMAGE_SIGN_ARGS}
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600656 fi
George McCollister185c8ae2016-05-26 08:55:16 -0500657}
658
659do_assemble_fitimage() {
660 if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
661 cd ${B}
662 fitimage_assemble fit-image.its fitImage
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500663 fi
664}
665
666addtask assemble_fitimage before do_install after do_compile
667
George McCollister185c8ae2016-05-26 08:55:16 -0500668do_assemble_fitimage_initramfs() {
669 if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage" && \
670 test -n "${INITRAMFS_IMAGE}" ; then
671 cd ${B}
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600672 if [ "${INITRAMFS_IMAGE_BUNDLE}" = "1" ]; then
673 fitimage_assemble fit-image-${INITRAMFS_IMAGE}.its fitImage ""
674 else
675 fitimage_assemble fit-image-${INITRAMFS_IMAGE}.its fitImage-${INITRAMFS_IMAGE} 1
676 fi
George McCollister185c8ae2016-05-26 08:55:16 -0500677 fi
678}
679
Brad Bishop19323692019-04-05 15:28:33 -0400680addtask assemble_fitimage_initramfs before do_deploy after do_bundle_initramfs
George McCollister185c8ae2016-05-26 08:55:16 -0500681
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700682do_kernel_generate_rsa_keys() {
683 if [ "${UBOOT_SIGN_ENABLE}" = "0" ] && [ "${FIT_GENERATE_KEYS}" = "1" ]; then
684 bbwarn "FIT_GENERATE_KEYS is set to 1 even though UBOOT_SIGN_ENABLE is set to 0. The keys will not be generated as they won't be used."
685 fi
686
687 if [ "${UBOOT_SIGN_ENABLE}" = "1" ] && [ "${FIT_GENERATE_KEYS}" = "1" ]; then
688
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500689 # Generate keys to sign configuration nodes, only if they don't already exist
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700690 if [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key ] || \
691 [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".crt ]; then
692
693 # make directory if it does not already exist
694 mkdir -p "${UBOOT_SIGN_KEYDIR}"
695
696 echo "Generating RSA private key for signing fitImage"
697 openssl genrsa ${FIT_KEY_GENRSA_ARGS} -out \
698 "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key \
699 "${FIT_SIGN_NUMBITS}"
700
701 echo "Generating certificate for signing fitImage"
702 openssl req ${FIT_KEY_REQ_ARGS} "${FIT_KEY_SIGN_PKCS}" \
703 -key "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key \
704 -out "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".crt
705 fi
Patrick Williams0ca19cc2021-08-16 14:03:13 -0500706
707 # Generate keys to sign image nodes, only if they don't already exist
708 if [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key ] || \
709 [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".crt ]; then
710
711 # make directory if it does not already exist
712 mkdir -p "${UBOOT_SIGN_KEYDIR}"
713
714 echo "Generating RSA private key for signing fitImage"
715 openssl genrsa ${FIT_KEY_GENRSA_ARGS} -out \
716 "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key \
717 "${FIT_SIGN_NUMBITS}"
718
719 echo "Generating certificate for signing fitImage"
720 openssl req ${FIT_KEY_REQ_ARGS} "${FIT_KEY_SIGN_PKCS}" \
721 -key "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key \
722 -out "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".crt
723 fi
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700724 fi
725}
726
727addtask kernel_generate_rsa_keys before do_assemble_fitimage after do_compile
George McCollister185c8ae2016-05-26 08:55:16 -0500728
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500729kernel_do_deploy[vardepsexclude] = "DATETIME"
Patrick Williams213cb262021-08-07 19:21:33 -0500730kernel_do_deploy:append() {
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500731 # Update deploy directory
He Zhefe76b1e2016-05-25 04:47:16 -0400732 if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800733
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600734 if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
735 echo "Copying fit-image.its source file..."
736 install -m 0644 ${B}/fit-image.its "$deployDir/fitImage-its-${KERNEL_FIT_NAME}.its"
737 ln -snf fitImage-its-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${KERNEL_FIT_LINK_NAME}"
738
739 echo "Copying linux.bin file..."
740 install -m 0644 ${B}/linux.bin $deployDir/fitImage-linux.bin-${KERNEL_FIT_NAME}.bin
741 ln -snf fitImage-linux.bin-${KERNEL_FIT_NAME}.bin "$deployDir/fitImage-linux.bin-${KERNEL_FIT_LINK_NAME}"
742 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500743
George McCollister185c8ae2016-05-26 08:55:16 -0500744 if [ -n "${INITRAMFS_IMAGE}" ]; then
745 echo "Copying fit-image-${INITRAMFS_IMAGE}.its source file..."
Brad Bishop64c979e2019-11-04 13:55:29 -0500746 install -m 0644 ${B}/fit-image-${INITRAMFS_IMAGE}.its "$deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its"
747 ln -snf fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
George McCollister185c8ae2016-05-26 08:55:16 -0500748
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600749 if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
750 echo "Copying fitImage-${INITRAMFS_IMAGE} file..."
751 install -m 0644 ${B}/arch/${ARCH}/boot/fitImage-${INITRAMFS_IMAGE} "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.bin"
752 ln -snf fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.bin "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
753 fi
George McCollister185c8ae2016-05-26 08:55:16 -0500754 fi
Andrew Geissler3b8a17c2021-04-15 15:55:55 -0500755 fi
756 if [ "${UBOOT_SIGN_ENABLE}" = "1" -o "${UBOOT_FITIMAGE_ENABLE}" = "1" ] && \
757 [ -n "${UBOOT_DTB_BINARY}" ] ; then
758 # UBOOT_DTB_IMAGE is a realfile, but we can't use
759 # ${UBOOT_DTB_IMAGE} since it contains ${PV} which is aimed
760 # for u-boot, but we are in kernel env now.
761 install -m 0644 ${B}/u-boot-${MACHINE}*.dtb "$deployDir/"
762 fi
763 if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" -a -n "${UBOOT_BINARY}" -a -n "${SPL_DTB_BINARY}" ] ; then
764 # If we're also creating and/or signing the uboot fit, now we need to
765 # deploy it, it's its file, as well as u-boot-spl.dtb
766 install -m 0644 ${B}/u-boot-spl-${MACHINE}*.dtb "$deployDir/"
767 echo "Copying u-boot-fitImage file..."
768 install -m 0644 ${B}/u-boot-fitImage-* "$deployDir/"
769 echo "Copying u-boot-its file..."
770 install -m 0644 ${B}/u-boot-its-* "$deployDir/"
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500771 fi
772}
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600773
774# The function below performs the following in case of initramfs bundles:
775# - Removes do_assemble_fitimage. FIT generation is done through
776# do_assemble_fitimage_initramfs. do_assemble_fitimage is not needed
777# and should not be part of the tasks to be executed.
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700778# - Since do_kernel_generate_rsa_keys is inserted by default
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600779# between do_compile and do_assemble_fitimage, this is
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700780# not suitable in case of initramfs bundles. do_kernel_generate_rsa_keys
Andrew Geisslerd1e89492021-02-12 15:35:20 -0600781# should be between do_bundle_initramfs and do_assemble_fitimage_initramfs.
782python () {
783 if d.getVar('INITRAMFS_IMAGE_BUNDLE') == "1":
784 bb.build.deltask('do_assemble_fitimage', d)
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700785 bb.build.deltask('kernel_generate_rsa_keys', d)
786 bb.build.addtask('kernel_generate_rsa_keys', 'do_assemble_fitimage_initramfs', 'do_bundle_initramfs', d)
Andrew Geissler95ac1b82021-03-31 14:34:31 -0500787}