blob: 49d13b4daf24a77a9be32c1f18bab329b1b57c2d [file] [log] [blame]
Brad Bishop97cce002017-07-22 14:49:25 -04001# Base image class extension, inlined into every image.
2
Saqib Khan41723472017-09-22 10:21:30 -05003inherit image_version
Brad Bishop97cce002017-07-22 14:49:25 -04004
Patrick Williamsb9e124c2022-12-14 09:10:49 -06005FIT_IMAGE_INHERIT=""
6FIT_IMAGE_INHERIT:df-obmc-static-norootfs = "fit-image"
7inherit ${FIT_IMAGE_INHERIT}
8
Brad Bishop19fc4f82017-08-04 23:38:54 -04009# Phosphor image types
10#
Brad Bishop3aa1ef62017-08-04 23:48:12 -040011# Phosphor OpenBMC supports a fixed partition mtd layout,
12# A dynamic mtd with ubi layout, and a tar file for use with
13# The reference BMC software update implementation.
Brad Bishop19fc4f82017-08-04 23:38:54 -040014
15# Image composition
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080016FLASH_KERNEL_IMAGE ?= "fitImage-${INITRAMFS_IMAGE}-${MACHINE}-${MACHINE}"
Patrick Williams12fc9392021-08-06 09:16:53 -050017FLASH_KERNEL_IMAGE:df-obmc-ubi-fs ?= "fitImage-${MACHINE}.bin"
Brad Bishop8623bbe2018-03-09 00:04:00 -050018
Brad Bishop19fc4f82017-08-04 23:38:54 -040019IMAGE_BASETYPE ?= "squashfs-xz"
Patrick Williamsb9e124c2022-12-14 09:10:49 -060020IMAGE_BASETYPE:df-obmc-static-norootfs ?= "cpio"
Brad Bishop19fc4f82017-08-04 23:38:54 -040021OVERLAY_BASETYPE ?= "jffs2"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040022FLASH_UBI_BASETYPE ?= "${IMAGE_BASETYPE}"
23FLASH_UBI_OVERLAY_BASETYPE ?= "ubifs"
Adriana Kobylak9b7197e2019-07-29 15:25:33 -050024FLASH_EXT4_BASETYPE ?= "ext4"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050025FLASH_EXT4_OVERLAY_BASETYPE ?= "ext4"
Brad Bishop19fc4f82017-08-04 23:38:54 -040026
Patrick Williamsb9e124c2022-12-14 09:10:49 -060027PHOSPHOR_IMAGE_TYPES += " \
28 mtd-static \
29 mtd-static-alltar \
30 mtd-static-tar \
31 mtd-static-norootfs \
32 mtd-ubi \
33 mtd-ubi-tar \
34 mmc-ext4-tar \
35"
36IMAGE_TYPES += "${PHOSPHOR_IMAGE_TYPES}"
37IMAGE_TYPES_MASKED += "${PHOSPHOR_IMAGE_TYPES}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040038
Patrick Williams12fc9392021-08-06 09:16:53 -050039IMAGE_TYPEDEP:mtd-static = "${IMAGE_BASETYPE}"
40IMAGE_TYPEDEP:mtd-static-tar = "${IMAGE_BASETYPE}"
41IMAGE_TYPEDEP:mtd-static-alltar = "mtd-static"
Patrick Williamsb9e124c2022-12-14 09:10:49 -060042IMAGE_TYPEDEP:mtd-static-norootfs = "${IMAGE_BASETYPE}"
Patrick Williams12fc9392021-08-06 09:16:53 -050043IMAGE_TYPEDEP:mtd-ubi = "${FLASH_UBI_BASETYPE}"
44IMAGE_TYPEDEP:mtd-ubi-tar = "${FLASH_UBI_BASETYPE}"
45IMAGE_TYPEDEP:mmc-ext4-tar = "${FLASH_EXT4_BASETYPE}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040046
Brad Bishop3aa1ef62017-08-04 23:48:12 -040047# Flash characteristics in KB unless otherwise noted
Brad Bishopdcd861c2019-09-24 21:16:09 -040048DISTROOVERRIDES .= ":flash-${FLASH_SIZE}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040049FLASH_SIZE ?= "32768"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040050FLASH_PEB_SIZE ?= "64"
51# Flash page and overhead sizes in bytes
52FLASH_PAGE_SIZE ?= "1"
53FLASH_NOR_UBI_OVERHEAD ?= "64"
Brad Bishop19fc4f82017-08-04 23:38:54 -040054
55# Fixed partition offsets
Adriana Kobylake913dd82020-04-13 13:56:41 -050056FLASH_UBOOT_SPL_SIZE ?= "64"
Brad Bishop19fc4f82017-08-04 23:38:54 -040057FLASH_UBOOT_OFFSET ?= "0"
Patrick Williams917fab22023-03-10 16:58:50 -060058FLASH_MANIFEST_OFFSET ?= "376"
59FLASH_MANIFEST_OFFSET:flash-65536 ?= "888"
60FLASH_MANIFEST_OFFSET:flash-131072 ?= "888"
Patrick Williams2e375292023-03-10 12:18:56 -060061FLASH_UBOOT_ENV_OFFSET ?= "384"
62FLASH_UBOOT_ENV_OFFSET:flash-65536 ?= "896"
63FLASH_UBOOT_ENV_OFFSET:flash-131072 ?= "896"
Brad Bishop19fc4f82017-08-04 23:38:54 -040064FLASH_KERNEL_OFFSET ?= "512"
Patrick Williams12fc9392021-08-06 09:16:53 -050065FLASH_KERNEL_OFFSET:flash-65536 ?= "1024"
66FLASH_KERNEL_OFFSET:flash-131072 ?= "1024"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040067FLASH_UBI_OFFSET ?= "${FLASH_KERNEL_OFFSET}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040068FLASH_ROFS_OFFSET ?= "4864"
Patrick Williams12fc9392021-08-06 09:16:53 -050069FLASH_ROFS_OFFSET:flash-65536 ?= "10240"
70FLASH_ROFS_OFFSET:flash-131072 ?= "10240"
Brad Bishop19fc4f82017-08-04 23:38:54 -040071FLASH_RWFS_OFFSET ?= "28672"
Patrick Williams12fc9392021-08-06 09:16:53 -050072FLASH_RWFS_OFFSET:flash-65536 ?= "43008"
73FLASH_RWFS_OFFSET:flash-131072 ?= "98304"
Brad Bishop19fc4f82017-08-04 23:38:54 -040074
Brad Bishop3aa1ef62017-08-04 23:48:12 -040075# UBI volume sizes in KB unless otherwise noted.
Adriana Kobylakb70005d2018-02-14 16:35:30 -060076FLASH_UBI_RWFS_SIZE ?= "6144"
Patrick Williams12fc9392021-08-06 09:16:53 -050077FLASH_UBI_RWFS_SIZE:flash-131072 ?= "32768"
Adriana Kobylakb70005d2018-02-14 16:35:30 -060078FLASH_UBI_RWFS_TXT_SIZE ?= "6MiB"
Patrick Williams12fc9392021-08-06 09:16:53 -050079FLASH_UBI_RWFS_TXT_SIZE:flash-131072 ?= "32MiB"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040080
Adriana Kobylak45a57952020-07-01 16:23:11 -050081# eMMC sizes in KB unless otherwise noted.
Adriana Kobylak55681e42020-11-11 15:06:50 -060082MMC_UBOOT_SIZE ?= "1024"
Adriana Kobylak45a57952020-07-01 16:23:11 -050083MMC_BOOT_PARTITION_SIZE ?= "65536"
84
Eddie Jamesb2b7ff62018-02-09 11:59:18 -060085SIGNING_KEY ?= "${STAGING_DIR_NATIVE}${datadir}/OpenBMC.priv"
86INSECURE_KEY = "${@'${SIGNING_KEY}' == '${STAGING_DIR_NATIVE}${datadir}/OpenBMC.priv'}"
87SIGNING_KEY_DEPENDS = "${@oe.utils.conditional('INSECURE_KEY', 'True', 'phosphor-insecure-signing-key-native:do_populate_sysroot', '', d)}"
88
Adriana Kobylakfb62a682019-10-28 16:03:12 -050089VERSION_PURPOSE ?= "xyz.openbmc_project.Software.Version.VersionPurpose.BMC"
90
Brad Bishop3e37d382018-03-31 12:17:28 -040091UBOOT_SUFFIX ?= "bin"
92
Brad Bishop3aa1ef62017-08-04 23:48:12 -040093python() {
94 # Compute rwfs LEB count and LEB size.
95 page_size = d.getVar('FLASH_PAGE_SIZE', True)
96 nor_overhead_size = d.getVar('FLASH_NOR_UBI_OVERHEAD', True)
97 overhead_size = max(int(page_size), int(nor_overhead_size))
98 peb_size = d.getVar('FLASH_PEB_SIZE', True)
99 leb_size = (int(peb_size) * 1024) - (2 * overhead_size)
100 d.setVar('FLASH_LEB_SIZE', str(leb_size)) # In bytes
101
102 rwfs_size = d.getVar('FLASH_UBI_RWFS_SIZE', True)
103 rwfs_size = int(rwfs_size) * 1024
104 lebs = int((rwfs_size + leb_size - 1) / leb_size) # Rounding up
105 d.setVar('FLASH_UBI_RWFS_LEBS', str(lebs))
106}
107
Brad Bishop19fc4f82017-08-04 23:38:54 -0400108# Allow rwfs mkfs configuration through OVERLAY_MKFS_OPTS and OVERRIDES. However,
109# avoid setting 'ext4' or 'jffs2' in OVERRIDES as such raw filesystem types are
110# reserved for the primary image (and setting them currently breaks the build).
111# Instead, prefix the overlay override value with 'rwfs-' to avoid collisions.
112DISTROOVERRIDES .= ":static-rwfs-${OVERLAY_BASETYPE}"
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400113DISTROOVERRIDES .= ":ubi-rwfs-${FLASH_UBI_OVERLAY_BASETYPE}"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500114DISTROOVERRIDES .= ":mmc-rwfs-${FLASH_EXT4_OVERLAY_BASETYPE}"
Brad Bishop19fc4f82017-08-04 23:38:54 -0400115
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700116JFFS2_RWFS_CMD = "mkfs.jffs2 --root=jffs2 --faketime --output=${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.jffs2"
117UBIFS_RWFS_CMD = "mkfs.ubifs -r ubifs -c ${FLASH_UBI_RWFS_LEBS} -m ${FLASH_PAGE_SIZE} -e ${FLASH_LEB_SIZE} ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.ubifs"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500118EXT4_RWFS_CMD = "mkfs.ext4 -F ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4"
Brad Bishop19fc4f82017-08-04 23:38:54 -0400119
Patrick Williams12fc9392021-08-06 09:16:53 -0500120FLASH_STATIC_RWFS_CMD:static-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
121FLASH_UBI_RWFS_CMD:ubi-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
122FLASH_UBI_RWFS_CMD:ubi-rwfs-ubifs = "${UBIFS_RWFS_CMD}"
123FLASH_EXT4_RWFS_CMD:mmc-rwfs-ext4 = "${EXT4_RWFS_CMD}"
Brad Bishop19fc4f82017-08-04 23:38:54 -0400124
Adriana Kobylak661cf392019-07-29 14:39:00 -0500125mk_empty_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400126 image_dst="$1"
127 image_size_kb=$2
128 dd if=/dev/zero bs=1k count=$image_size_kb \
129 | tr '\000' '\377' > $image_dst
130}
131
Adriana Kobylak55681e42020-11-11 15:06:50 -0600132mk_empty_image_zeros() {
133 image_dst="$1"
134 image_size_kb=$2
135 dd if=/dev/zero of=$image_dst bs=1k count=$image_size_kb
136}
137
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500138clean_rwfs() {
139 type=$1
140 shift
141
142 rm -f ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type
143 rm -rf $type
144 mkdir $type
145}
146
Brad Bishop19fc4f82017-08-04 23:38:54 -0400147make_rwfs() {
148 type=$1
149 cmd=$2
150 shift
151 shift
152 opts="$@"
153
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500154 mkdir -p $type
Brad Bishop19fc4f82017-08-04 23:38:54 -0400155
156 $cmd $opts
157}
158
159do_generate_rwfs_static() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500160 clean_rwfs ${OVERLAY_BASETYPE}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400161 make_rwfs ${OVERLAY_BASETYPE} "${FLASH_STATIC_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
162}
163do_generate_rwfs_static[dirs] = " ${S}/static"
164do_generate_rwfs_static[depends] += " \
165 mtd-utils-native:do_populate_sysroot \
166 "
167
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400168do_generate_rwfs_ubi() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500169 clean_rwfs ${FLASH_UBI_OVERLAY_BASETYPE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400170 make_rwfs ${FLASH_UBI_OVERLAY_BASETYPE} "${FLASH_UBI_RWFS_CMD}"
171}
172do_generate_rwfs_ubi[dirs] = " ${S}/ubi"
173do_generate_rwfs_ubi[depends] += " \
174 mtd-utils-native:do_populate_sysroot \
175 "
176
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500177do_generate_rwfs_ext4() {
178 clean_rwfs rwfs.${FLASH_EXT4_OVERLAY_BASETYPE}
179 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4 1024
180 make_rwfs ${FLASH_EXT4_OVERLAY_BASETYPE} "${FLASH_EXT4_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
181}
182do_generate_rwfs_ext4[dirs] = " ${S}/ext4"
183do_generate_rwfs_ext4[depends] += " \
184 e2fsprogs-native:do_populate_sysroot \
185 "
186
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400187add_volume() {
188 config_file=$1
189 vol_id=$2
190 vol_type=$3
191 vol_name=$4
192 image=$5
193 vol_size=$6
194
195 echo \[$vol_name\] >> $config_file
196 echo mode=ubi >> $config_file
197 echo image=$image >> $config_file
198 echo vol_type=$vol_type >> $config_file
199 echo vol_name=$vol_name >> $config_file
200 echo vol_id=$vol_id >> $config_file
201 if [ ! -z $vol_size ]; then
202 echo vol_size=$vol_size >> $config_file
203 fi
204}
205
Saqib Khan41723472017-09-22 10:21:30 -0500206python do_generate_ubi() {
207 version_id = do_get_versionID(d)
208 d.setVar('VERSION_ID', version_id)
209 bb.build.exec_func("do_make_ubi", d)
210}
211do_generate_ubi[dirs] = "${S}/ubi"
212do_generate_ubi[depends] += " \
213 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
214 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500215 u-boot:do_deploy \
Saqib Khan41723472017-09-22 10:21:30 -0500216 mtd-utils-native:do_populate_sysroot \
217 "
218
219do_make_ubi() {
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400220 cfg=ubinize-${IMAGE_NAME}.cfg
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400221 rm -f $cfg ubi-img
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400222 # Construct the ubinize config file
Saqib Khan41723472017-09-22 10:21:30 -0500223 add_volume $cfg 0 static kernel-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400224 ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE}
225
Saqib Khan41723472017-09-22 10:21:30 -0500226 add_volume $cfg 1 static rofs-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400227 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${FLASH_UBI_BASETYPE}
228
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700229 add_volume $cfg 2 dynamic rwfs ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${FLASH_UBI_OVERLAY_BASETYPE} ${FLASH_UBI_RWFS_TXT_SIZE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400230
231 # Build the ubi partition image
232 ubinize -p ${FLASH_PEB_SIZE}KiB -m ${FLASH_PAGE_SIZE} -o ubi-img $cfg
233
234 # Concatenate the uboot and ubi partitions
Adriana Kobylak661cf392019-07-29 14:39:00 -0500235 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd ${FLASH_SIZE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400236 dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
237 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
238 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
239 dd bs=1k conv=notrunc seek=${FLASH_UBI_OFFSET} \
240 if=ubi-img \
241 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
242
243 cd ${IMGDEPLOYDIR}
244 ln -sf ${IMAGE_NAME}.ubi.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.ubi.mtd
245}
Saqib Khan41723472017-09-22 10:21:30 -0500246do_make_ubi[dirs] = "${S}/ubi"
247do_make_ubi[depends] += " \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400248 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
249 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500250 u-boot:do_deploy \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400251 mtd-utils-native:do_populate_sysroot \
252 "
253
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300254do_mk_static_nor_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400255 # Assemble the flash image
Adriana Kobylak661cf392019-07-29 14:39:00 -0500256 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd ${FLASH_SIZE}
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300257}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400258
Adriana Kobylakf1954f02020-04-27 15:20:35 -0500259do_generate_image_uboot_file() {
260 image_dst="$1"
261 uboot_offset=${FLASH_UBOOT_OFFSET}
262
263 if [ ! -z ${SPL_BINARY} ]; then
264 dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
265 if=${DEPLOY_DIR_IMAGE}/u-boot-spl.${UBOOT_SUFFIX} \
266 of=${image_dst}
267 uboot_offset=${FLASH_UBOOT_SPL_SIZE}
268 fi
269
270 dd bs=1k conv=notrunc seek=${uboot_offset} \
271 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
272 of=${image_dst}
273}
274
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300275python do_generate_static() {
276 import subprocess
Brad Bishop19fc4f82017-08-04 23:38:54 -0400277
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300278 bb.build.exec_func("do_mk_static_nor_image", d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400279
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300280 nor_image = os.path.join(d.getVar('IMGDEPLOYDIR', True),
281 '%s.static.mtd' % d.getVar('IMAGE_NAME', True))
282
283 def _append_image(imgpath, start_kb, finish_kb):
284 imgsize = os.path.getsize(imgpath)
Josh Lehan0a5ef2a2020-02-26 12:11:33 -0800285 maxsize = (finish_kb - start_kb) * 1024
286 bb.debug(1, 'Considering file size=' + str(imgsize) + ' name=' + imgpath)
287 bb.debug(1, 'Spanning start=' + str(start_kb) + 'K end=' + str(finish_kb) + 'K')
288 bb.debug(1, 'Compare needed=' + str(imgsize) + ' available=' + str(maxsize) + ' margin=' + str(maxsize - imgsize))
289 if imgsize > maxsize:
Joel Stanley909f33e2023-01-18 18:56:17 +1030290 bb.fatal("Image '%s' is %d bytes too large!" % (imgpath, imgsize - maxsize))
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300291
292 subprocess.check_call(['dd', 'bs=1k', 'conv=notrunc',
293 'seek=%d' % start_kb,
294 'if=%s' % imgpath,
295 'of=%s' % nor_image])
296
Adriana Kobylake913dd82020-04-13 13:56:41 -0500297 uboot_offset = int(d.getVar('FLASH_UBOOT_OFFSET', True))
298
299 spl_binary = d.getVar('SPL_BINARY', True)
300 if spl_binary:
301 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
302 'u-boot-spl.%s' % d.getVar('UBOOT_SUFFIX',True)),
303 int(d.getVar('FLASH_UBOOT_OFFSET', True)),
304 int(d.getVar('FLASH_UBOOT_SPL_SIZE', True)))
305 uboot_offset += int(d.getVar('FLASH_UBOOT_SPL_SIZE', True))
306
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300307 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
308 'u-boot.%s' % d.getVar('UBOOT_SUFFIX',True)),
Adriana Kobylake913dd82020-04-13 13:56:41 -0500309 uboot_offset,
Patrick Williams2e375292023-03-10 12:18:56 -0600310 int(d.getVar('FLASH_UBOOT_ENV_OFFSET', True)))
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300311
312 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
313 d.getVar('FLASH_KERNEL_IMAGE', True)),
314 int(d.getVar('FLASH_KERNEL_OFFSET', True)),
315 int(d.getVar('FLASH_ROFS_OFFSET', True)))
316
317 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
318 '%s.%s' % (
319 d.getVar('IMAGE_LINK_NAME', True),
320 d.getVar('IMAGE_BASETYPE', True))),
321 int(d.getVar('FLASH_ROFS_OFFSET', True)),
322 int(d.getVar('FLASH_RWFS_OFFSET', True)))
323
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700324 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
325 '%s.%s' % (
326 d.getVar('IMAGE_LINK_NAME', True),
327 d.getVar('OVERLAY_BASETYPE', True))),
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300328 int(d.getVar('FLASH_RWFS_OFFSET', True)),
329 int(d.getVar('FLASH_SIZE', True)))
330
331 bb.build.exec_func("do_mk_static_symlinks", d)
332}
333
334do_mk_static_symlinks() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400335 cd ${IMGDEPLOYDIR}
336 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd
337
338 # Maintain non-standard legacy links
Adriana Kobylakf1954f02020-04-27 15:20:35 -0500339 do_generate_image_uboot_file ${IMGDEPLOYDIR}/image-u-boot
Brad Bishop19fc4f82017-08-04 23:38:54 -0400340 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/flash-${MACHINE}
341 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/image-bmc
Brad Bishop19fc4f82017-08-04 23:38:54 -0400342 ln -sf ${FLASH_KERNEL_IMAGE} ${IMGDEPLOYDIR}/image-kernel
343 ln -sf ${IMAGE_LINK_NAME}.${IMAGE_BASETYPE} ${IMGDEPLOYDIR}/image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700344 ln -sf ${IMAGE_LINK_NAME}.${OVERLAY_BASETYPE} ${IMGDEPLOYDIR}/image-rwfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400345}
346do_generate_static[dirs] = "${S}/static"
347do_generate_static[depends] += " \
348 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
349 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500350 u-boot:do_deploy \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400351 "
352
Lei YUf2072212018-06-20 13:27:34 +0800353make_signatures() {
354 signature_files=""
355 for file in "$@"; do
356 openssl dgst -sha256 -sign ${SIGNING_KEY} -out "${file}.sig" $file
357 signature_files="${signature_files} ${file}.sig"
358 done
George Liuf0afcf82020-12-15 09:46:10 +0800359
360 if [ -n "$signature_files" ]; then
361 sort_signature_files=`echo "$signature_files" | tr ' ' '\n' | sort | tr '\n' ' '`
362 cat $sort_signature_files > image-full
363 openssl dgst -sha256 -sign ${SIGNING_KEY} -out image-full.sig image-full
364 signature_files="${signature_files} image-full.sig"
George Liuf0afcf82020-12-15 09:46:10 +0800365 fi
Lei YUf2072212018-06-20 13:27:34 +0800366}
367
Brad Bishop19fc4f82017-08-04 23:38:54 -0400368do_generate_static_alltar() {
Lei YUa4674942018-05-23 14:01:14 +0800369 ln -sf ${S}/MANIFEST MANIFEST
370 ln -sf ${S}/publickey publickey
Brad Bishop19fc4f82017-08-04 23:38:54 -0400371 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd image-bmc
Lei YUa4674942018-05-23 14:01:14 +0800372
Lei YUf2072212018-06-20 13:27:34 +0800373 make_signatures image-bmc MANIFEST publickey
Lei YUa4674942018-05-23 14:01:14 +0800374
375 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd.all.tar \
376 image-bmc MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400377
378 cd ${IMGDEPLOYDIR}
379
380 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
381 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd.all.tar
382
383 # Maintain non-standard legacy link.
384 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
385 ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.all.tar
Lei YUa4674942018-05-23 14:01:14 +0800386
Brad Bishop19fc4f82017-08-04 23:38:54 -0400387}
388do_generate_static_alltar[vardepsexclude] = "DATETIME"
389do_generate_static_alltar[dirs] = "${S}/static"
Lei YUa4674942018-05-23 14:01:14 +0800390do_generate_static_alltar[depends] += " \
391 openssl-native:do_populate_sysroot \
392 ${SIGNING_KEY_DEPENDS} \
393 ${PN}:do_copy_signing_pubkey \
394 "
Brad Bishop19fc4f82017-08-04 23:38:54 -0400395
Brad Bishopde659382018-03-30 01:46:16 -0400396make_image_links() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400397 rwfs=$1
398 rofs=$2
Brad Bishop19fc4f82017-08-04 23:38:54 -0400399 shift
400 shift
Brad Bishop19fc4f82017-08-04 23:38:54 -0400401
Brad Bishopde659382018-03-30 01:46:16 -0400402 # Create some links to help make the tar archive in the format
403 # expected by phosphor-bmc-code-mgmt.
Adriana Kobylakf1954f02020-04-27 15:20:35 -0500404 do_generate_image_uboot_file image-u-boot
Brad Bishop19fc4f82017-08-04 23:38:54 -0400405 ln -sf ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} image-kernel
406 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rofs image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700407 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rwfs image-rwfs
Brad Bishopde659382018-03-30 01:46:16 -0400408}
409
410make_tar_of_images() {
411 type=$1
412 shift
413 extra_files="$@"
Brad Bishop19fc4f82017-08-04 23:38:54 -0400414
415 # Create the tar archive
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500416 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.$type.tar \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400417 image-u-boot image-kernel image-rofs image-rwfs $extra_files
418
419 cd ${IMGDEPLOYDIR}
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500420 ln -sf ${IMAGE_NAME}.$type.tar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type.tar
Brad Bishop19fc4f82017-08-04 23:38:54 -0400421}
422
423do_generate_static_tar() {
Lei YUa4674942018-05-23 14:01:14 +0800424 ln -sf ${S}/MANIFEST MANIFEST
425 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400426 make_image_links ${OVERLAY_BASETYPE} ${IMAGE_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800427 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500428 make_tar_of_images static.mtd MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400429
430 # Maintain non-standard legacy link.
431 cd ${IMGDEPLOYDIR}
432 ln -sf ${IMAGE_NAME}.static.mtd.tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar
433}
434do_generate_static_tar[dirs] = " ${S}/static"
435do_generate_static_tar[depends] += " \
436 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
437 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500438 u-boot:do_deploy \
Lei YUa4674942018-05-23 14:01:14 +0800439 openssl-native:do_populate_sysroot \
440 ${SIGNING_KEY_DEPENDS} \
441 ${PN}:do_copy_signing_pubkey \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400442 "
443do_generate_static_tar[vardepsexclude] = "DATETIME"
444
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600445python do_generate_static_norootfs() {
Patrick Williams917fab22023-03-10 16:58:50 -0600446 import hashlib
447 import json
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600448 import subprocess
449
Patrick Williams917fab22023-03-10 16:58:50 -0600450 manifest = {
451 "type": "phosphor-image-manifest",
452 "version": 1,
453 "info": {
454 "purpose": d.getVar('VERSION_PURPOSE', True),
455 "machine": d.getVar('MACHINE', True),
456 "version": do_get_version(d).strip('"'),
457 "build-id": do_get_buildID(d).strip('"'),
458 },
459 "partitions": [],
460 # Create an empty hash-value so that the dictionary can be emitted,
461 # hashed, and then updated.
462 "manifest-sha256": "",
463 }
464 extended_version = do_get_extended_version(d).strip('"')
465 if extended_version:
466 manifest["info"]["extended-version"] = extended_version
467 compatible_names = d.getVar('OBMC_COMPATIBLE_NAMES', True)
468 if compatible_names:
469 manifest["info"]["compatible-names"] = compatible_names.split()
470
471 manifest_json_file = os.path.join(d.getVar('IMGDEPLOYDIR', True),
472 "phosphor-image-manifest.json")
473
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600474 nor_image_basename = '%s.static.mtd' % d.getVar('IMAGE_NAME', True)
475 nor_image = os.path.join(d.getVar('IMGDEPLOYDIR', True), nor_image_basename)
476
Patrick Williams917fab22023-03-10 16:58:50 -0600477 def _add_manifest(partname, typename, offset, size, sha256_value = None):
478 manifest["partitions"].append(
479 {
480 "name": partname,
481 "type": typename,
482 "offset": offset,
483 "size": size,
484 }
485 )
486 if typename == "fit":
487 if "u-boot-fit" == partname:
488 manifest["partitions"][-1]["num-nodes"] = 1
489 elif "os-fit" == partname:
490 manifest["partitions"][-1]["num-nodes"] = 3
491 else:
492 bb.fatal(f"Unknown FIT partition type: {partname}")
493 if sha256_value:
494 manifest["partitions"][-1]["sha256"] = sha256_value
495
496
497 def _append_image(partname, typename, imgpath, start_kb, finish_kb):
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600498 imgsize = os.path.getsize(imgpath)
499 maxsize = (finish_kb - start_kb) * 1024
500 bb.debug(1, 'Considering file size=' + str(imgsize) + ' name=' + imgpath)
501 bb.debug(1, 'Spanning start=' + str(start_kb) + 'K end=' + str(finish_kb) + 'K')
502 bb.debug(1, 'Compare needed=' + str(imgsize) + ' available=' + str(maxsize) + ' margin=' + str(maxsize - imgsize))
503 if imgsize > maxsize:
504 bb.fatal("Image '%s' is too large!" % imgpath)
505
Patrick Williams917fab22023-03-10 16:58:50 -0600506 with open(imgpath, "rb") as fp:
507 sha256 = hashlib.sha256(fp.read()).hexdigest()
508
509 _add_manifest(partname, typename, start_kb * 1024, imgsize, sha256)
510
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600511 subprocess.check_call(['dd', 'bs=1k', 'conv=notrunc',
512 'seek=%d' % start_kb,
513 'if=%s' % imgpath,
514 'of=%s' % nor_image])
Patrick Williams917fab22023-03-10 16:58:50 -0600515
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600516 uboot_offset = int(d.getVar('FLASH_UBOOT_OFFSET', True))
517
518 spl_binary = d.getVar('SPL_BINARY', True)
519 if spl_binary:
Patrick Williams917fab22023-03-10 16:58:50 -0600520 _append_image("spl", "u-boot",
521 os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600522 'u-boot-spl.%s' % d.getVar('UBOOT_SUFFIX',True)),
523 int(d.getVar('FLASH_UBOOT_OFFSET', True)),
524 int(d.getVar('FLASH_UBOOT_SPL_SIZE', True)))
525 uboot_offset += int(d.getVar('FLASH_UBOOT_SPL_SIZE', True))
526
Patrick Williams917fab22023-03-10 16:58:50 -0600527 _append_image("u-boot-fit", "fit",
528 os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600529 'u-boot.%s' % d.getVar('UBOOT_SUFFIX',True)),
530 uboot_offset,
Patrick Williams917fab22023-03-10 16:58:50 -0600531 int(d.getVar('FLASH_MANIFEST_OFFSET', True)))
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600532
Patrick Williams917fab22023-03-10 16:58:50 -0600533 _add_manifest("manifest", "json",
534 int(d.getVar('FLASH_MANIFEST_OFFSET', True)) * 1024,
535 (int(d.getVar('FLASH_UBOOT_ENV_OFFSET', True)) -
536 int(d.getVar('FLASH_MANIFEST_OFFSET', True))) * 1024)
537
538 _add_manifest("u-boot-env", "data",
539 int(d.getVar('FLASH_UBOOT_ENV_OFFSET', True)) * 1024,
540 (int(d.getVar('FLASH_KERNEL_OFFSET', True)) -
541 int(d.getVar('FLASH_UBOOT_ENV_OFFSET', True))) * 1024)
542
543 _append_image("os-fit", "fit",
544 os.path.join(d.getVar('IMGDEPLOYDIR', True),
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600545 '%s.cpio.%s.fitImage' % (
546 d.getVar('IMAGE_LINK_NAME', True),
547 d.getVar('INITRAMFS_CTYPE', True))),
548 int(d.getVar('FLASH_KERNEL_OFFSET', True)),
549 int(d.getVar('FLASH_RWFS_OFFSET', True)))
550
Patrick Williams917fab22023-03-10 16:58:50 -0600551 _add_manifest("rwfs", "data",
552 int(d.getVar('FLASH_RWFS_OFFSET', True)) * 1024,
553 (int(d.getVar('FLASH_SIZE', True)) -
554 int(d.getVar('FLASH_RWFS_OFFSET', True))) * 1024)
555
556 # Calculate the sha256 of the current manifest and update.
557 manifest_raw = json.dumps(manifest, indent=4)
558 manifest_raw = manifest_raw[:manifest_raw.find("manifest-sha256")]
559 manifest["manifest-sha256"] = hashlib.sha256(
560 manifest_raw.encode('utf-8')).hexdigest()
561
562 # Write the final manifest json and add it to the image.
563 with open(manifest_json_file, "wb") as fp:
564 fp.write(json.dumps(manifest, indent=4).encode('utf-8'))
565 _append_image("manifest", "json", manifest_json_file,
566 int(d.getVar('FLASH_MANIFEST_OFFSET', True)),
567 int(d.getVar('FLASH_UBOOT_ENV_OFFSET', True)))
568
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600569 flash_symlink = os.path.join(
570 d.getVar('IMGDEPLOYDIR', True),
571 'flash-%s' % d.getVar('MACHINE', True))
572 if os.path.exists(flash_symlink):
573 os.remove(flash_symlink)
574 os.symlink(nor_image_basename, flash_symlink)
575}
576do_generate_static_norootfs[depends] += " \
577 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
578 u-boot:do_deploy \
579 "
580
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400581do_generate_ubi_tar() {
582 ln -sf ${S}/MANIFEST MANIFEST
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600583 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400584 make_image_links ${FLASH_UBI_OVERLAY_BASETYPE} ${FLASH_UBI_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800585 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500586 make_tar_of_images ubi.mtd MANIFEST publickey ${signature_files}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400587}
588do_generate_ubi_tar[dirs] = " ${S}/ubi"
589do_generate_ubi_tar[depends] += " \
590 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
591 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500592 u-boot:do_deploy \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600593 openssl-native:do_populate_sysroot \
594 ${SIGNING_KEY_DEPENDS} \
595 ${PN}:do_copy_signing_pubkey \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400596 "
597
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500598do_generate_ext4_tar() {
Adriana Kobylak45a57952020-07-01 16:23:11 -0500599 # Generate the U-Boot image
Adriana Kobylak55681e42020-11-11 15:06:50 -0600600 mk_empty_image_zeros image-u-boot ${MMC_UBOOT_SIZE}
Adriana Kobylak45a57952020-07-01 16:23:11 -0500601 do_generate_image_uboot_file image-u-boot
602
603 # Generate a compressed ext4 filesystem with the fitImage file in it to be
604 # flashed to the boot partition of the eMMC
605 install -d boot-image
606 install -m 644 ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} boot-image/fitImage
Adriana Kobylak55681e42020-11-11 15:06:50 -0600607 mk_empty_image_zeros boot-image.${FLASH_EXT4_BASETYPE} ${MMC_BOOT_PARTITION_SIZE}
Adriana Kobylak45a57952020-07-01 16:23:11 -0500608 mkfs.ext4 -F -i 4096 -d boot-image boot-image.${FLASH_EXT4_BASETYPE}
609 # Error codes 0-3 indicate successfull operation of fsck
610 fsck.ext4 -pvfD boot-image.${FLASH_EXT4_BASETYPE} || [ $? -le 3 ]
611 zstd -f -k -T0 -c ${ZSTD_COMPRESSION_LEVEL} boot-image.${FLASH_EXT4_BASETYPE} > boot-image.${FLASH_EXT4_BASETYPE}.zst
612
613 # Generate the compressed ext4 rootfs
614 zstd -f -k -T0 -c ${ZSTD_COMPRESSION_LEVEL} ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${FLASH_EXT4_BASETYPE} > ${IMAGE_LINK_NAME}.${FLASH_EXT4_BASETYPE}.zst
615
616 ln -sf boot-image.${FLASH_EXT4_BASETYPE}.zst image-kernel
617 ln -sf ${IMAGE_LINK_NAME}.${FLASH_EXT4_BASETYPE}.zst image-rofs
618 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.${FLASH_EXT4_OVERLAY_BASETYPE} image-rwfs
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500619 ln -sf ${S}/MANIFEST MANIFEST
620 ln -sf ${S}/publickey publickey
Adriana Kobylak81846a22020-07-12 15:12:36 -0500621
622 hostfw_update_file="${DEPLOY_DIR_IMAGE}/hostfw/update/image-hostfw"
623 if [ -e "${hostfw_update_file}" ]; then
624 ln -sf "${hostfw_update_file}" image-hostfw
625 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey image-hostfw
626 make_tar_of_images ext4.mmc MANIFEST publickey ${signature_files} image-hostfw
627 else
628 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
629 make_tar_of_images ext4.mmc MANIFEST publickey ${signature_files}
630 fi
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500631}
632do_generate_ext4_tar[dirs] = " ${S}/ext4"
633do_generate_ext4_tar[depends] += " \
Adriana Kobylak4cc866b2020-03-28 13:43:33 -0500634 zstd-native:do_populate_sysroot \
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500635 ${PN}:do_image_${FLASH_EXT4_BASETYPE} \
636 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500637 u-boot:do_deploy \
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500638 openssl-native:do_populate_sysroot \
639 ${SIGNING_KEY_DEPENDS} \
640 ${PN}:do_copy_signing_pubkey \
Brad Bishop209ed522020-11-02 12:36:04 -0500641 phosphor-hostfw-image:do_deploy \
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500642 "
643
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600644def get_pubkey_basedir(d):
645 return os.path.join(
646 d.getVar('STAGING_DIR_TARGET', True),
647 d.getVar('sysconfdir', True).strip(os.sep),
648 'activationdata')
649
650def get_pubkey_type(d):
651 return os.listdir(get_pubkey_basedir(d))[0]
652
653def get_pubkey_path(d):
654 return os.path.join(
655 get_pubkey_basedir(d),
656 get_pubkey_type(d),
657 'publickey')
658
Brad Bishop19fc4f82017-08-04 23:38:54 -0400659python do_generate_phosphor_manifest() {
Adriana Kobylakfb62a682019-10-28 16:03:12 -0500660 purpose = d.getVar('VERSION_PURPOSE', True)
Saqib Khan41723472017-09-22 10:21:30 -0500661 version = do_get_version(d)
Adriana Kobylakcdd91ad2021-10-25 15:58:19 +0000662 build_id = do_get_buildID(d)
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700663 target_machine = d.getVar('MACHINE', True)
Adriana Kobylakbde7dbe2022-08-04 09:13:26 -0500664 extended_version = do_get_extended_version(d)
Justin Ledfordb4de16d2022-03-24 17:27:17 -0700665 compatible_names = d.getVar('OBMC_COMPATIBLE_NAMES', True)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400666 with open('MANIFEST', 'w') as fd:
Adriana Kobylakfb62a682019-10-28 16:03:12 -0500667 fd.write('purpose={}\n'.format(purpose))
Brad Bishop19fc4f82017-08-04 23:38:54 -0400668 fd.write('version={}\n'.format(version.strip('"')))
Adriana Kobylakcdd91ad2021-10-25 15:58:19 +0000669 fd.write('BuildId={}\n'.format(build_id.strip('"')))
Justin Ledfordb4de16d2022-03-24 17:27:17 -0700670 if extended_version:
671 fd.write('ExtendedVersion={}\n'.format(extended_version))
672 if compatible_names:
673 for name in compatible_names.split():
674 fd.write('CompatibleName={}\n'.format(name))
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600675 fd.write('KeyType={}\n'.format(get_pubkey_type(d)))
676 fd.write('HashType=RSA-SHA256\n')
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700677 fd.write('MachineName={}\n'.format(target_machine))
Brad Bishop19fc4f82017-08-04 23:38:54 -0400678}
679do_generate_phosphor_manifest[dirs] = "${S}"
680do_generate_phosphor_manifest[depends] += " \
681 os-release:do_populate_sysroot \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600682 phosphor-image-signing:do_populate_sysroot \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400683 "
684
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600685python do_copy_signing_pubkey() {
686 with open(get_pubkey_path(d), 'r') as read_fd:
687 with open('publickey', 'w') as write_fd:
688 write_fd.write(read_fd.read())
689}
690
691do_copy_signing_pubkey[dirs] = "${S}"
692do_copy_signing_pubkey[depends] += " \
693 phosphor-image-signing:do_populate_sysroot \
694 "
695
696addtask copy_signing_pubkey after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400697addtask generate_phosphor_manifest after do_rootfs
698addtask generate_rwfs_static after do_rootfs
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400699addtask generate_rwfs_ubi after do_rootfs
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500700addtask generate_rwfs_ext4 after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400701
702python() {
703 types = d.getVar('IMAGE_FSTYPES', True).split()
704
705 if any([x in types for x in ['mtd-static', 'mtd-static-alltar']]):
706 bb.build.addtask(
707 'do_generate_static',
708 'do_image_complete',
709 'do_generate_rwfs_static', d)
710 if 'mtd-static-alltar' in types:
711 bb.build.addtask(
712 'do_generate_static_alltar',
713 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800714 'do_generate_static do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400715 if 'mtd-static-tar' in types:
716 bb.build.addtask(
717 'do_generate_static_tar',
718 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800719 'do_generate_rwfs_static do_generate_phosphor_manifest', d)
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400720
Patrick Williamsb9e124c2022-12-14 09:10:49 -0600721 if 'mtd-static-norootfs' in types:
722 bb.build.addtask(
723 'do_generate_static_norootfs',
724 'do_image_complete',
725 'do_image_cpio', d)
726
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400727 if 'mtd-ubi' in types:
728 bb.build.addtask(
729 'do_generate_ubi',
730 'do_image_complete',
731 'do_generate_rwfs_ubi', d)
732 if 'mtd-ubi-tar' in types:
733 bb.build.addtask(
734 'do_generate_ubi_tar',
735 'do_image_complete',
736 'do_generate_rwfs_ubi do_generate_phosphor_manifest', d)
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500737
738 if 'mmc-ext4-tar' in types:
739 bb.build.addtask(
740 'do_generate_ext4_tar',
741 'do_image_complete',
742 'do_generate_rwfs_ext4 do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400743}