blob: 39801204be67d2cc0b1e87ce13e9fa97fef0e243 [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
Brad Bishop19fc4f82017-08-04 23:38:54 -04005# Phosphor image types
6#
Brad Bishop3aa1ef62017-08-04 23:48:12 -04007# Phosphor OpenBMC supports a fixed partition mtd layout,
8# A dynamic mtd with ubi layout, and a tar file for use with
9# The reference BMC software update implementation.
Brad Bishop19fc4f82017-08-04 23:38:54 -040010
11# Image composition
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080012FLASH_KERNEL_IMAGE ?= "fitImage-${INITRAMFS_IMAGE}-${MACHINE}-${MACHINE}"
Brad Bishop8623bbe2018-03-09 00:04:00 -050013FLASH_KERNEL_IMAGE_df-obmc-ubi-fs ?= "fitImage-${MACHINE}.bin"
14
Brad Bishop19fc4f82017-08-04 23:38:54 -040015IMAGE_BASETYPE ?= "squashfs-xz"
16OVERLAY_BASETYPE ?= "jffs2"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040017FLASH_UBI_BASETYPE ?= "${IMAGE_BASETYPE}"
18FLASH_UBI_OVERLAY_BASETYPE ?= "ubifs"
Adriana Kobylak9b7197e2019-07-29 15:25:33 -050019FLASH_EXT4_BASETYPE ?= "ext4"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050020FLASH_EXT4_OVERLAY_BASETYPE ?= "ext4"
Brad Bishop19fc4f82017-08-04 23:38:54 -040021
Adriana Kobylak35542752020-08-25 10:37:49 -050022IMAGE_TYPES += "mtd-static mtd-static-alltar mtd-static-tar mtd-ubi mtd-ubi-tar mmc-ext4-tar"
Brad Bishop19fc4f82017-08-04 23:38:54 -040023
24IMAGE_TYPEDEP_mtd-static = "${IMAGE_BASETYPE}"
25IMAGE_TYPEDEP_mtd-static-tar = "${IMAGE_BASETYPE}"
26IMAGE_TYPEDEP_mtd-static-alltar = "mtd-static"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040027IMAGE_TYPEDEP_mtd-ubi = "${FLASH_UBI_BASETYPE}"
28IMAGE_TYPEDEP_mtd-ubi-tar = "${FLASH_UBI_BASETYPE}"
Adriana Kobylak9b7197e2019-07-29 15:25:33 -050029IMAGE_TYPEDEP_mmc-ext4-tar = "${FLASH_EXT4_BASETYPE}"
Adriana Kobylak35542752020-08-25 10:37:49 -050030IMAGE_TYPES_MASKED += "mtd-static mtd-static-alltar mtd-static-tar mtd-ubi mtd-ubi-tar mmc-ext4-tar"
Brad Bishop19fc4f82017-08-04 23:38:54 -040031
Brad Bishop3aa1ef62017-08-04 23:48:12 -040032# Flash characteristics in KB unless otherwise noted
Brad Bishopdcd861c2019-09-24 21:16:09 -040033DISTROOVERRIDES .= ":flash-${FLASH_SIZE}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040034FLASH_SIZE ?= "32768"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040035FLASH_PEB_SIZE ?= "64"
36# Flash page and overhead sizes in bytes
37FLASH_PAGE_SIZE ?= "1"
38FLASH_NOR_UBI_OVERHEAD ?= "64"
Brad Bishop19fc4f82017-08-04 23:38:54 -040039
40# Fixed partition offsets
Adriana Kobylake913dd82020-04-13 13:56:41 -050041FLASH_UBOOT_SPL_SIZE ?= "64"
Brad Bishop19fc4f82017-08-04 23:38:54 -040042FLASH_UBOOT_OFFSET ?= "0"
43FLASH_KERNEL_OFFSET ?= "512"
Brad Bishopdcd861c2019-09-24 21:16:09 -040044FLASH_KERNEL_OFFSET_flash-131072 ?= "1024"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040045FLASH_UBI_OFFSET ?= "${FLASH_KERNEL_OFFSET}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040046FLASH_ROFS_OFFSET ?= "4864"
Brad Bishopdcd861c2019-09-24 21:16:09 -040047FLASH_ROFS_OFFSET_flash-131072 ?= "10240"
Brad Bishop19fc4f82017-08-04 23:38:54 -040048FLASH_RWFS_OFFSET ?= "28672"
Brad Bishopdcd861c2019-09-24 21:16:09 -040049FLASH_RWFS_OFFSET_flash-131072 ?= "98304"
Brad Bishop19fc4f82017-08-04 23:38:54 -040050
Brad Bishop3aa1ef62017-08-04 23:48:12 -040051# UBI volume sizes in KB unless otherwise noted.
Adriana Kobylakb70005d2018-02-14 16:35:30 -060052FLASH_UBI_RWFS_SIZE ?= "6144"
Brad Bishopdcd861c2019-09-24 21:16:09 -040053FLASH_UBI_RWFS_SIZE_flash-131072 ?= "32768"
Adriana Kobylakb70005d2018-02-14 16:35:30 -060054FLASH_UBI_RWFS_TXT_SIZE ?= "6MiB"
Brad Bishopdcd861c2019-09-24 21:16:09 -040055FLASH_UBI_RWFS_TXT_SIZE_flash-131072 ?= "32MiB"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040056
Adriana Kobylak45a57952020-07-01 16:23:11 -050057# eMMC sizes in KB unless otherwise noted.
58MMC_BOOT_PARTITION_SIZE ?= "65536"
59
Eddie Jamesb2b7ff62018-02-09 11:59:18 -060060SIGNING_KEY ?= "${STAGING_DIR_NATIVE}${datadir}/OpenBMC.priv"
61INSECURE_KEY = "${@'${SIGNING_KEY}' == '${STAGING_DIR_NATIVE}${datadir}/OpenBMC.priv'}"
62SIGNING_KEY_DEPENDS = "${@oe.utils.conditional('INSECURE_KEY', 'True', 'phosphor-insecure-signing-key-native:do_populate_sysroot', '', d)}"
63
Adriana Kobylakfb62a682019-10-28 16:03:12 -050064VERSION_PURPOSE ?= "xyz.openbmc_project.Software.Version.VersionPurpose.BMC"
65
Brad Bishop3e37d382018-03-31 12:17:28 -040066UBOOT_SUFFIX ?= "bin"
67
Brad Bishop3aa1ef62017-08-04 23:48:12 -040068python() {
69 # Compute rwfs LEB count and LEB size.
70 page_size = d.getVar('FLASH_PAGE_SIZE', True)
71 nor_overhead_size = d.getVar('FLASH_NOR_UBI_OVERHEAD', True)
72 overhead_size = max(int(page_size), int(nor_overhead_size))
73 peb_size = d.getVar('FLASH_PEB_SIZE', True)
74 leb_size = (int(peb_size) * 1024) - (2 * overhead_size)
75 d.setVar('FLASH_LEB_SIZE', str(leb_size)) # In bytes
76
77 rwfs_size = d.getVar('FLASH_UBI_RWFS_SIZE', True)
78 rwfs_size = int(rwfs_size) * 1024
79 lebs = int((rwfs_size + leb_size - 1) / leb_size) # Rounding up
80 d.setVar('FLASH_UBI_RWFS_LEBS', str(lebs))
81}
82
Brad Bishop19fc4f82017-08-04 23:38:54 -040083# Allow rwfs mkfs configuration through OVERLAY_MKFS_OPTS and OVERRIDES. However,
84# avoid setting 'ext4' or 'jffs2' in OVERRIDES as such raw filesystem types are
85# reserved for the primary image (and setting them currently breaks the build).
86# Instead, prefix the overlay override value with 'rwfs-' to avoid collisions.
87DISTROOVERRIDES .= ":static-rwfs-${OVERLAY_BASETYPE}"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040088DISTROOVERRIDES .= ":ubi-rwfs-${FLASH_UBI_OVERLAY_BASETYPE}"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050089DISTROOVERRIDES .= ":mmc-rwfs-${FLASH_EXT4_OVERLAY_BASETYPE}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040090
William A. Kennington IIIc230ab32019-09-16 17:44:48 -070091JFFS2_RWFS_CMD = "mkfs.jffs2 --root=jffs2 --faketime --output=${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.jffs2"
92UBIFS_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 -050093EXT4_RWFS_CMD = "mkfs.ext4 -F ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4"
Brad Bishop19fc4f82017-08-04 23:38:54 -040094
95FLASH_STATIC_RWFS_CMD_static-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040096FLASH_UBI_RWFS_CMD_ubi-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
97FLASH_UBI_RWFS_CMD_ubi-rwfs-ubifs = "${UBIFS_RWFS_CMD}"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050098FLASH_EXT4_RWFS_CMD_mmc-rwfs-ext4 = "${EXT4_RWFS_CMD}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040099
Adriana Kobylak661cf392019-07-29 14:39:00 -0500100mk_empty_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400101 image_dst="$1"
102 image_size_kb=$2
103 dd if=/dev/zero bs=1k count=$image_size_kb \
104 | tr '\000' '\377' > $image_dst
105}
106
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500107clean_rwfs() {
108 type=$1
109 shift
110
111 rm -f ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type
112 rm -rf $type
113 mkdir $type
114}
115
Brad Bishop19fc4f82017-08-04 23:38:54 -0400116make_rwfs() {
117 type=$1
118 cmd=$2
119 shift
120 shift
121 opts="$@"
122
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500123 mkdir -p $type
Brad Bishop19fc4f82017-08-04 23:38:54 -0400124
125 $cmd $opts
126}
127
128do_generate_rwfs_static() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500129 clean_rwfs ${OVERLAY_BASETYPE}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400130 make_rwfs ${OVERLAY_BASETYPE} "${FLASH_STATIC_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
131}
132do_generate_rwfs_static[dirs] = " ${S}/static"
133do_generate_rwfs_static[depends] += " \
134 mtd-utils-native:do_populate_sysroot \
135 "
136
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400137do_generate_rwfs_ubi() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500138 clean_rwfs ${FLASH_UBI_OVERLAY_BASETYPE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400139 make_rwfs ${FLASH_UBI_OVERLAY_BASETYPE} "${FLASH_UBI_RWFS_CMD}"
140}
141do_generate_rwfs_ubi[dirs] = " ${S}/ubi"
142do_generate_rwfs_ubi[depends] += " \
143 mtd-utils-native:do_populate_sysroot \
144 "
145
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500146do_generate_rwfs_ext4() {
147 clean_rwfs rwfs.${FLASH_EXT4_OVERLAY_BASETYPE}
148 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4 1024
149 make_rwfs ${FLASH_EXT4_OVERLAY_BASETYPE} "${FLASH_EXT4_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
150}
151do_generate_rwfs_ext4[dirs] = " ${S}/ext4"
152do_generate_rwfs_ext4[depends] += " \
153 e2fsprogs-native:do_populate_sysroot \
154 "
155
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400156add_volume() {
157 config_file=$1
158 vol_id=$2
159 vol_type=$3
160 vol_name=$4
161 image=$5
162 vol_size=$6
163
164 echo \[$vol_name\] >> $config_file
165 echo mode=ubi >> $config_file
166 echo image=$image >> $config_file
167 echo vol_type=$vol_type >> $config_file
168 echo vol_name=$vol_name >> $config_file
169 echo vol_id=$vol_id >> $config_file
170 if [ ! -z $vol_size ]; then
171 echo vol_size=$vol_size >> $config_file
172 fi
173}
174
Saqib Khan41723472017-09-22 10:21:30 -0500175python do_generate_ubi() {
176 version_id = do_get_versionID(d)
177 d.setVar('VERSION_ID', version_id)
178 bb.build.exec_func("do_make_ubi", d)
179}
180do_generate_ubi[dirs] = "${S}/ubi"
181do_generate_ubi[depends] += " \
182 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
183 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500184 u-boot:do_deploy \
Saqib Khan41723472017-09-22 10:21:30 -0500185 mtd-utils-native:do_populate_sysroot \
186 "
187
188do_make_ubi() {
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400189 cfg=ubinize-${IMAGE_NAME}.cfg
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400190 rm -f $cfg ubi-img
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400191 # Construct the ubinize config file
Saqib Khan41723472017-09-22 10:21:30 -0500192 add_volume $cfg 0 static kernel-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400193 ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE}
194
Saqib Khan41723472017-09-22 10:21:30 -0500195 add_volume $cfg 1 static rofs-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400196 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${FLASH_UBI_BASETYPE}
197
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700198 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 -0400199
200 # Build the ubi partition image
201 ubinize -p ${FLASH_PEB_SIZE}KiB -m ${FLASH_PAGE_SIZE} -o ubi-img $cfg
202
203 # Concatenate the uboot and ubi partitions
Adriana Kobylak661cf392019-07-29 14:39:00 -0500204 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd ${FLASH_SIZE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400205 dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
206 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
207 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
208 dd bs=1k conv=notrunc seek=${FLASH_UBI_OFFSET} \
209 if=ubi-img \
210 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
211
212 cd ${IMGDEPLOYDIR}
213 ln -sf ${IMAGE_NAME}.ubi.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.ubi.mtd
214}
Saqib Khan41723472017-09-22 10:21:30 -0500215do_make_ubi[dirs] = "${S}/ubi"
216do_make_ubi[depends] += " \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400217 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
218 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500219 u-boot:do_deploy \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400220 mtd-utils-native:do_populate_sysroot \
221 "
222
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300223do_mk_static_nor_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400224 # Assemble the flash image
Adriana Kobylak661cf392019-07-29 14:39:00 -0500225 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd ${FLASH_SIZE}
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300226}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400227
Adriana Kobylakf1954f02020-04-27 15:20:35 -0500228do_generate_image_uboot_file() {
229 image_dst="$1"
230 uboot_offset=${FLASH_UBOOT_OFFSET}
231
232 if [ ! -z ${SPL_BINARY} ]; then
233 dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
234 if=${DEPLOY_DIR_IMAGE}/u-boot-spl.${UBOOT_SUFFIX} \
235 of=${image_dst}
236 uboot_offset=${FLASH_UBOOT_SPL_SIZE}
237 fi
238
239 dd bs=1k conv=notrunc seek=${uboot_offset} \
240 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
241 of=${image_dst}
242}
243
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300244python do_generate_static() {
245 import subprocess
Brad Bishop19fc4f82017-08-04 23:38:54 -0400246
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300247 bb.build.exec_func("do_mk_static_nor_image", d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400248
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300249 nor_image = os.path.join(d.getVar('IMGDEPLOYDIR', True),
250 '%s.static.mtd' % d.getVar('IMAGE_NAME', True))
251
252 def _append_image(imgpath, start_kb, finish_kb):
253 imgsize = os.path.getsize(imgpath)
Josh Lehan0a5ef2a2020-02-26 12:11:33 -0800254 maxsize = (finish_kb - start_kb) * 1024
255 bb.debug(1, 'Considering file size=' + str(imgsize) + ' name=' + imgpath)
256 bb.debug(1, 'Spanning start=' + str(start_kb) + 'K end=' + str(finish_kb) + 'K')
257 bb.debug(1, 'Compare needed=' + str(imgsize) + ' available=' + str(maxsize) + ' margin=' + str(maxsize - imgsize))
258 if imgsize > maxsize:
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300259 bb.fatal("Image '%s' is too large!" % imgpath)
260
261 subprocess.check_call(['dd', 'bs=1k', 'conv=notrunc',
262 'seek=%d' % start_kb,
263 'if=%s' % imgpath,
264 'of=%s' % nor_image])
265
Adriana Kobylake913dd82020-04-13 13:56:41 -0500266 uboot_offset = int(d.getVar('FLASH_UBOOT_OFFSET', True))
267
268 spl_binary = d.getVar('SPL_BINARY', True)
269 if spl_binary:
270 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
271 'u-boot-spl.%s' % d.getVar('UBOOT_SUFFIX',True)),
272 int(d.getVar('FLASH_UBOOT_OFFSET', True)),
273 int(d.getVar('FLASH_UBOOT_SPL_SIZE', True)))
274 uboot_offset += int(d.getVar('FLASH_UBOOT_SPL_SIZE', True))
275
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300276 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
277 'u-boot.%s' % d.getVar('UBOOT_SUFFIX',True)),
Adriana Kobylake913dd82020-04-13 13:56:41 -0500278 uboot_offset,
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300279 int(d.getVar('FLASH_KERNEL_OFFSET', True)))
280
281 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
282 d.getVar('FLASH_KERNEL_IMAGE', True)),
283 int(d.getVar('FLASH_KERNEL_OFFSET', True)),
284 int(d.getVar('FLASH_ROFS_OFFSET', True)))
285
286 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
287 '%s.%s' % (
288 d.getVar('IMAGE_LINK_NAME', True),
289 d.getVar('IMAGE_BASETYPE', True))),
290 int(d.getVar('FLASH_ROFS_OFFSET', True)),
291 int(d.getVar('FLASH_RWFS_OFFSET', True)))
292
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700293 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
294 '%s.%s' % (
295 d.getVar('IMAGE_LINK_NAME', True),
296 d.getVar('OVERLAY_BASETYPE', True))),
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300297 int(d.getVar('FLASH_RWFS_OFFSET', True)),
298 int(d.getVar('FLASH_SIZE', True)))
299
300 bb.build.exec_func("do_mk_static_symlinks", d)
301}
302
303do_mk_static_symlinks() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400304 cd ${IMGDEPLOYDIR}
305 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd
306
307 # Maintain non-standard legacy links
Adriana Kobylakf1954f02020-04-27 15:20:35 -0500308 do_generate_image_uboot_file ${IMGDEPLOYDIR}/image-u-boot
Brad Bishop19fc4f82017-08-04 23:38:54 -0400309 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/flash-${MACHINE}
310 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/image-bmc
Brad Bishop19fc4f82017-08-04 23:38:54 -0400311 ln -sf ${FLASH_KERNEL_IMAGE} ${IMGDEPLOYDIR}/image-kernel
312 ln -sf ${IMAGE_LINK_NAME}.${IMAGE_BASETYPE} ${IMGDEPLOYDIR}/image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700313 ln -sf ${IMAGE_LINK_NAME}.${OVERLAY_BASETYPE} ${IMGDEPLOYDIR}/image-rwfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400314}
315do_generate_static[dirs] = "${S}/static"
316do_generate_static[depends] += " \
317 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
318 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500319 u-boot:do_deploy \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400320 "
321
Lei YUf2072212018-06-20 13:27:34 +0800322make_signatures() {
323 signature_files=""
324 for file in "$@"; do
325 openssl dgst -sha256 -sign ${SIGNING_KEY} -out "${file}.sig" $file
326 signature_files="${signature_files} ${file}.sig"
327 done
328}
329
Brad Bishop19fc4f82017-08-04 23:38:54 -0400330do_generate_static_alltar() {
Lei YUa4674942018-05-23 14:01:14 +0800331 ln -sf ${S}/MANIFEST MANIFEST
332 ln -sf ${S}/publickey publickey
Brad Bishop19fc4f82017-08-04 23:38:54 -0400333 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd image-bmc
Lei YUa4674942018-05-23 14:01:14 +0800334
Lei YUf2072212018-06-20 13:27:34 +0800335 make_signatures image-bmc MANIFEST publickey
Lei YUa4674942018-05-23 14:01:14 +0800336
337 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd.all.tar \
338 image-bmc MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400339
340 cd ${IMGDEPLOYDIR}
341
342 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
343 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd.all.tar
344
345 # Maintain non-standard legacy link.
346 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
347 ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.all.tar
Lei YUa4674942018-05-23 14:01:14 +0800348
Brad Bishop19fc4f82017-08-04 23:38:54 -0400349}
350do_generate_static_alltar[vardepsexclude] = "DATETIME"
351do_generate_static_alltar[dirs] = "${S}/static"
Lei YUa4674942018-05-23 14:01:14 +0800352do_generate_static_alltar[depends] += " \
353 openssl-native:do_populate_sysroot \
354 ${SIGNING_KEY_DEPENDS} \
355 ${PN}:do_copy_signing_pubkey \
356 "
Brad Bishop19fc4f82017-08-04 23:38:54 -0400357
Brad Bishopde659382018-03-30 01:46:16 -0400358make_image_links() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400359 rwfs=$1
360 rofs=$2
Brad Bishop19fc4f82017-08-04 23:38:54 -0400361 shift
362 shift
Brad Bishop19fc4f82017-08-04 23:38:54 -0400363
Brad Bishopde659382018-03-30 01:46:16 -0400364 # Create some links to help make the tar archive in the format
365 # expected by phosphor-bmc-code-mgmt.
Adriana Kobylakf1954f02020-04-27 15:20:35 -0500366 do_generate_image_uboot_file image-u-boot
Brad Bishop19fc4f82017-08-04 23:38:54 -0400367 ln -sf ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} image-kernel
368 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rofs image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700369 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rwfs image-rwfs
Brad Bishopde659382018-03-30 01:46:16 -0400370}
371
372make_tar_of_images() {
373 type=$1
374 shift
375 extra_files="$@"
Brad Bishop19fc4f82017-08-04 23:38:54 -0400376
377 # Create the tar archive
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500378 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.$type.tar \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400379 image-u-boot image-kernel image-rofs image-rwfs $extra_files
380
381 cd ${IMGDEPLOYDIR}
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500382 ln -sf ${IMAGE_NAME}.$type.tar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type.tar
Brad Bishop19fc4f82017-08-04 23:38:54 -0400383}
384
385do_generate_static_tar() {
Lei YUa4674942018-05-23 14:01:14 +0800386 ln -sf ${S}/MANIFEST MANIFEST
387 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400388 make_image_links ${OVERLAY_BASETYPE} ${IMAGE_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800389 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500390 make_tar_of_images static.mtd MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400391
392 # Maintain non-standard legacy link.
393 cd ${IMGDEPLOYDIR}
394 ln -sf ${IMAGE_NAME}.static.mtd.tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar
395}
396do_generate_static_tar[dirs] = " ${S}/static"
397do_generate_static_tar[depends] += " \
398 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
399 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500400 u-boot:do_deploy \
Lei YUa4674942018-05-23 14:01:14 +0800401 openssl-native:do_populate_sysroot \
402 ${SIGNING_KEY_DEPENDS} \
403 ${PN}:do_copy_signing_pubkey \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400404 "
405do_generate_static_tar[vardepsexclude] = "DATETIME"
406
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400407do_generate_ubi_tar() {
408 ln -sf ${S}/MANIFEST MANIFEST
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600409 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400410 make_image_links ${FLASH_UBI_OVERLAY_BASETYPE} ${FLASH_UBI_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800411 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500412 make_tar_of_images ubi.mtd MANIFEST publickey ${signature_files}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400413}
414do_generate_ubi_tar[dirs] = " ${S}/ubi"
415do_generate_ubi_tar[depends] += " \
416 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
417 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500418 u-boot:do_deploy \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600419 openssl-native:do_populate_sysroot \
420 ${SIGNING_KEY_DEPENDS} \
421 ${PN}:do_copy_signing_pubkey \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400422 "
423
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500424do_generate_ext4_tar() {
Adriana Kobylak45a57952020-07-01 16:23:11 -0500425 # Generate the U-Boot image
426 do_generate_image_uboot_file image-u-boot
427
428 # Generate a compressed ext4 filesystem with the fitImage file in it to be
429 # flashed to the boot partition of the eMMC
430 install -d boot-image
431 install -m 644 ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} boot-image/fitImage
432 mk_empty_image boot-image.${FLASH_EXT4_BASETYPE} ${MMC_BOOT_PARTITION_SIZE}
433 mkfs.ext4 -F -i 4096 -d boot-image boot-image.${FLASH_EXT4_BASETYPE}
434 # Error codes 0-3 indicate successfull operation of fsck
435 fsck.ext4 -pvfD boot-image.${FLASH_EXT4_BASETYPE} || [ $? -le 3 ]
436 zstd -f -k -T0 -c ${ZSTD_COMPRESSION_LEVEL} boot-image.${FLASH_EXT4_BASETYPE} > boot-image.${FLASH_EXT4_BASETYPE}.zst
437
438 # Generate the compressed ext4 rootfs
439 zstd -f -k -T0 -c ${ZSTD_COMPRESSION_LEVEL} ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${FLASH_EXT4_BASETYPE} > ${IMAGE_LINK_NAME}.${FLASH_EXT4_BASETYPE}.zst
440
441 ln -sf boot-image.${FLASH_EXT4_BASETYPE}.zst image-kernel
442 ln -sf ${IMAGE_LINK_NAME}.${FLASH_EXT4_BASETYPE}.zst image-rofs
443 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.${FLASH_EXT4_OVERLAY_BASETYPE} image-rwfs
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500444 ln -sf ${S}/MANIFEST MANIFEST
445 ln -sf ${S}/publickey publickey
Adriana Kobylak81846a22020-07-12 15:12:36 -0500446
447 hostfw_update_file="${DEPLOY_DIR_IMAGE}/hostfw/update/image-hostfw"
448 if [ -e "${hostfw_update_file}" ]; then
449 ln -sf "${hostfw_update_file}" image-hostfw
450 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey image-hostfw
451 make_tar_of_images ext4.mmc MANIFEST publickey ${signature_files} image-hostfw
452 else
453 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
454 make_tar_of_images ext4.mmc MANIFEST publickey ${signature_files}
455 fi
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500456}
457do_generate_ext4_tar[dirs] = " ${S}/ext4"
458do_generate_ext4_tar[depends] += " \
Adriana Kobylak4cc866b2020-03-28 13:43:33 -0500459 zstd-native:do_populate_sysroot \
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500460 ${PN}:do_image_${FLASH_EXT4_BASETYPE} \
461 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500462 u-boot:do_deploy \
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500463 openssl-native:do_populate_sysroot \
464 ${SIGNING_KEY_DEPENDS} \
465 ${PN}:do_copy_signing_pubkey \
Brad Bishop209ed522020-11-02 12:36:04 -0500466 phosphor-hostfw-image:do_deploy \
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500467 "
468
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600469def get_pubkey_basedir(d):
470 return os.path.join(
471 d.getVar('STAGING_DIR_TARGET', True),
472 d.getVar('sysconfdir', True).strip(os.sep),
473 'activationdata')
474
475def get_pubkey_type(d):
476 return os.listdir(get_pubkey_basedir(d))[0]
477
478def get_pubkey_path(d):
479 return os.path.join(
480 get_pubkey_basedir(d),
481 get_pubkey_type(d),
482 'publickey')
483
Brad Bishop19fc4f82017-08-04 23:38:54 -0400484python do_generate_phosphor_manifest() {
Adriana Kobylakfb62a682019-10-28 16:03:12 -0500485 purpose = d.getVar('VERSION_PURPOSE', True)
Saqib Khan41723472017-09-22 10:21:30 -0500486 version = do_get_version(d)
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700487 target_machine = d.getVar('MACHINE', True)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400488 with open('MANIFEST', 'w') as fd:
Adriana Kobylakfb62a682019-10-28 16:03:12 -0500489 fd.write('purpose={}\n'.format(purpose))
Brad Bishop19fc4f82017-08-04 23:38:54 -0400490 fd.write('version={}\n'.format(version.strip('"')))
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600491 fd.write('KeyType={}\n'.format(get_pubkey_type(d)))
492 fd.write('HashType=RSA-SHA256\n')
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700493 fd.write('MachineName={}\n'.format(target_machine))
Brad Bishop19fc4f82017-08-04 23:38:54 -0400494}
495do_generate_phosphor_manifest[dirs] = "${S}"
496do_generate_phosphor_manifest[depends] += " \
497 os-release:do_populate_sysroot \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600498 phosphor-image-signing:do_populate_sysroot \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400499 "
500
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600501python do_copy_signing_pubkey() {
502 with open(get_pubkey_path(d), 'r') as read_fd:
503 with open('publickey', 'w') as write_fd:
504 write_fd.write(read_fd.read())
505}
506
507do_copy_signing_pubkey[dirs] = "${S}"
508do_copy_signing_pubkey[depends] += " \
509 phosphor-image-signing:do_populate_sysroot \
510 "
511
512addtask copy_signing_pubkey after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400513addtask generate_phosphor_manifest after do_rootfs
514addtask generate_rwfs_static after do_rootfs
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400515addtask generate_rwfs_ubi after do_rootfs
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500516addtask generate_rwfs_ext4 after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400517
518python() {
519 types = d.getVar('IMAGE_FSTYPES', True).split()
520
521 if any([x in types for x in ['mtd-static', 'mtd-static-alltar']]):
522 bb.build.addtask(
523 'do_generate_static',
524 'do_image_complete',
525 'do_generate_rwfs_static', d)
526 if 'mtd-static-alltar' in types:
527 bb.build.addtask(
528 'do_generate_static_alltar',
529 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800530 'do_generate_static do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400531 if 'mtd-static-tar' in types:
532 bb.build.addtask(
533 'do_generate_static_tar',
534 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800535 'do_generate_rwfs_static do_generate_phosphor_manifest', d)
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400536
537 if 'mtd-ubi' in types:
538 bb.build.addtask(
539 'do_generate_ubi',
540 'do_image_complete',
541 'do_generate_rwfs_ubi', d)
542 if 'mtd-ubi-tar' in types:
543 bb.build.addtask(
544 'do_generate_ubi_tar',
545 'do_image_complete',
546 'do_generate_rwfs_ubi do_generate_phosphor_manifest', d)
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500547
548 if 'mmc-ext4-tar' in types:
549 bb.build.addtask(
550 'do_generate_ext4_tar',
551 'do_image_complete',
552 'do_generate_rwfs_ext4 do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400553}