blob: e29f4ff47f600f376d1475e382b62cbce89c4eb1 [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 Kobylak9b7197e2019-07-29 15:25:33 -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}"
30IMAGE_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
41FLASH_UBOOT_OFFSET ?= "0"
42FLASH_KERNEL_OFFSET ?= "512"
Brad Bishopdcd861c2019-09-24 21:16:09 -040043FLASH_KERNEL_OFFSET_flash-131072 ?= "1024"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040044FLASH_UBI_OFFSET ?= "${FLASH_KERNEL_OFFSET}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040045FLASH_ROFS_OFFSET ?= "4864"
Brad Bishopdcd861c2019-09-24 21:16:09 -040046FLASH_ROFS_OFFSET_flash-131072 ?= "10240"
Brad Bishop19fc4f82017-08-04 23:38:54 -040047FLASH_RWFS_OFFSET ?= "28672"
Brad Bishopdcd861c2019-09-24 21:16:09 -040048FLASH_RWFS_OFFSET_flash-131072 ?= "98304"
Brad Bishop19fc4f82017-08-04 23:38:54 -040049
Brad Bishop3aa1ef62017-08-04 23:48:12 -040050# UBI volume sizes in KB unless otherwise noted.
Adriana Kobylakb70005d2018-02-14 16:35:30 -060051FLASH_UBI_RWFS_SIZE ?= "6144"
Brad Bishopdcd861c2019-09-24 21:16:09 -040052FLASH_UBI_RWFS_SIZE_flash-131072 ?= "32768"
Adriana Kobylakb70005d2018-02-14 16:35:30 -060053FLASH_UBI_RWFS_TXT_SIZE ?= "6MiB"
Brad Bishopdcd861c2019-09-24 21:16:09 -040054FLASH_UBI_RWFS_TXT_SIZE_flash-131072 ?= "32MiB"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040055
Eddie Jamesb2b7ff62018-02-09 11:59:18 -060056SIGNING_KEY ?= "${STAGING_DIR_NATIVE}${datadir}/OpenBMC.priv"
57INSECURE_KEY = "${@'${SIGNING_KEY}' == '${STAGING_DIR_NATIVE}${datadir}/OpenBMC.priv'}"
58SIGNING_KEY_DEPENDS = "${@oe.utils.conditional('INSECURE_KEY', 'True', 'phosphor-insecure-signing-key-native:do_populate_sysroot', '', d)}"
59
Adriana Kobylakfb62a682019-10-28 16:03:12 -050060VERSION_PURPOSE ?= "xyz.openbmc_project.Software.Version.VersionPurpose.BMC"
61
Brad Bishop3e37d382018-03-31 12:17:28 -040062UBOOT_SUFFIX ?= "bin"
63
Brad Bishop3aa1ef62017-08-04 23:48:12 -040064python() {
65 # Compute rwfs LEB count and LEB size.
66 page_size = d.getVar('FLASH_PAGE_SIZE', True)
67 nor_overhead_size = d.getVar('FLASH_NOR_UBI_OVERHEAD', True)
68 overhead_size = max(int(page_size), int(nor_overhead_size))
69 peb_size = d.getVar('FLASH_PEB_SIZE', True)
70 leb_size = (int(peb_size) * 1024) - (2 * overhead_size)
71 d.setVar('FLASH_LEB_SIZE', str(leb_size)) # In bytes
72
73 rwfs_size = d.getVar('FLASH_UBI_RWFS_SIZE', True)
74 rwfs_size = int(rwfs_size) * 1024
75 lebs = int((rwfs_size + leb_size - 1) / leb_size) # Rounding up
76 d.setVar('FLASH_UBI_RWFS_LEBS', str(lebs))
77}
78
Brad Bishop19fc4f82017-08-04 23:38:54 -040079# Allow rwfs mkfs configuration through OVERLAY_MKFS_OPTS and OVERRIDES. However,
80# avoid setting 'ext4' or 'jffs2' in OVERRIDES as such raw filesystem types are
81# reserved for the primary image (and setting them currently breaks the build).
82# Instead, prefix the overlay override value with 'rwfs-' to avoid collisions.
83DISTROOVERRIDES .= ":static-rwfs-${OVERLAY_BASETYPE}"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040084DISTROOVERRIDES .= ":ubi-rwfs-${FLASH_UBI_OVERLAY_BASETYPE}"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050085DISTROOVERRIDES .= ":mmc-rwfs-${FLASH_EXT4_OVERLAY_BASETYPE}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040086
William A. Kennington IIIc230ab32019-09-16 17:44:48 -070087JFFS2_RWFS_CMD = "mkfs.jffs2 --root=jffs2 --faketime --output=${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.jffs2"
88UBIFS_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 -050089EXT4_RWFS_CMD = "mkfs.ext4 -F ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4"
Brad Bishop19fc4f82017-08-04 23:38:54 -040090
91FLASH_STATIC_RWFS_CMD_static-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040092FLASH_UBI_RWFS_CMD_ubi-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
93FLASH_UBI_RWFS_CMD_ubi-rwfs-ubifs = "${UBIFS_RWFS_CMD}"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050094FLASH_EXT4_RWFS_CMD_mmc-rwfs-ext4 = "${EXT4_RWFS_CMD}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040095
Adriana Kobylak661cf392019-07-29 14:39:00 -050096mk_empty_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -040097 image_dst="$1"
98 image_size_kb=$2
99 dd if=/dev/zero bs=1k count=$image_size_kb \
100 | tr '\000' '\377' > $image_dst
101}
102
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500103clean_rwfs() {
104 type=$1
105 shift
106
107 rm -f ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type
108 rm -rf $type
109 mkdir $type
110}
111
Brad Bishop19fc4f82017-08-04 23:38:54 -0400112make_rwfs() {
113 type=$1
114 cmd=$2
115 shift
116 shift
117 opts="$@"
118
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500119 mkdir -p $type
Brad Bishop19fc4f82017-08-04 23:38:54 -0400120
121 $cmd $opts
122}
123
124do_generate_rwfs_static() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500125 clean_rwfs ${OVERLAY_BASETYPE}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400126 make_rwfs ${OVERLAY_BASETYPE} "${FLASH_STATIC_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
127}
128do_generate_rwfs_static[dirs] = " ${S}/static"
129do_generate_rwfs_static[depends] += " \
130 mtd-utils-native:do_populate_sysroot \
131 "
132
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400133do_generate_rwfs_ubi() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500134 clean_rwfs ${FLASH_UBI_OVERLAY_BASETYPE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400135 make_rwfs ${FLASH_UBI_OVERLAY_BASETYPE} "${FLASH_UBI_RWFS_CMD}"
136}
137do_generate_rwfs_ubi[dirs] = " ${S}/ubi"
138do_generate_rwfs_ubi[depends] += " \
139 mtd-utils-native:do_populate_sysroot \
140 "
141
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500142do_generate_rwfs_ext4() {
143 clean_rwfs rwfs.${FLASH_EXT4_OVERLAY_BASETYPE}
144 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4 1024
145 make_rwfs ${FLASH_EXT4_OVERLAY_BASETYPE} "${FLASH_EXT4_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
146}
147do_generate_rwfs_ext4[dirs] = " ${S}/ext4"
148do_generate_rwfs_ext4[depends] += " \
149 e2fsprogs-native:do_populate_sysroot \
150 "
151
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400152add_volume() {
153 config_file=$1
154 vol_id=$2
155 vol_type=$3
156 vol_name=$4
157 image=$5
158 vol_size=$6
159
160 echo \[$vol_name\] >> $config_file
161 echo mode=ubi >> $config_file
162 echo image=$image >> $config_file
163 echo vol_type=$vol_type >> $config_file
164 echo vol_name=$vol_name >> $config_file
165 echo vol_id=$vol_id >> $config_file
166 if [ ! -z $vol_size ]; then
167 echo vol_size=$vol_size >> $config_file
168 fi
169}
170
Saqib Khan41723472017-09-22 10:21:30 -0500171python do_generate_ubi() {
172 version_id = do_get_versionID(d)
173 d.setVar('VERSION_ID', version_id)
174 bb.build.exec_func("do_make_ubi", d)
175}
176do_generate_ubi[dirs] = "${S}/ubi"
177do_generate_ubi[depends] += " \
178 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
179 virtual/kernel:do_deploy \
180 u-boot:do_populate_sysroot \
181 mtd-utils-native:do_populate_sysroot \
182 "
183
184do_make_ubi() {
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400185 cfg=ubinize-${IMAGE_NAME}.cfg
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400186 rm -f $cfg ubi-img
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400187 # Construct the ubinize config file
Saqib Khan41723472017-09-22 10:21:30 -0500188 add_volume $cfg 0 static kernel-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400189 ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE}
190
Saqib Khan41723472017-09-22 10:21:30 -0500191 add_volume $cfg 1 static rofs-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400192 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${FLASH_UBI_BASETYPE}
193
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700194 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 -0400195
196 # Build the ubi partition image
197 ubinize -p ${FLASH_PEB_SIZE}KiB -m ${FLASH_PAGE_SIZE} -o ubi-img $cfg
198
199 # Concatenate the uboot and ubi partitions
Adriana Kobylak661cf392019-07-29 14:39:00 -0500200 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd ${FLASH_SIZE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400201 dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
202 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
203 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
204 dd bs=1k conv=notrunc seek=${FLASH_UBI_OFFSET} \
205 if=ubi-img \
206 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
207
208 cd ${IMGDEPLOYDIR}
209 ln -sf ${IMAGE_NAME}.ubi.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.ubi.mtd
210}
Saqib Khan41723472017-09-22 10:21:30 -0500211do_make_ubi[dirs] = "${S}/ubi"
212do_make_ubi[depends] += " \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400213 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
214 virtual/kernel:do_deploy \
215 u-boot:do_populate_sysroot \
216 mtd-utils-native:do_populate_sysroot \
217 "
218
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300219do_mk_static_nor_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400220 # Assemble the flash image
Adriana Kobylak661cf392019-07-29 14:39:00 -0500221 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd ${FLASH_SIZE}
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300222}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400223
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300224python do_generate_static() {
225 import subprocess
Brad Bishop19fc4f82017-08-04 23:38:54 -0400226
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300227 bb.build.exec_func("do_mk_static_nor_image", d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400228
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300229 nor_image = os.path.join(d.getVar('IMGDEPLOYDIR', True),
230 '%s.static.mtd' % d.getVar('IMAGE_NAME', True))
231
232 def _append_image(imgpath, start_kb, finish_kb):
233 imgsize = os.path.getsize(imgpath)
234 if imgsize > (finish_kb - start_kb) * 1024:
235 bb.fatal("Image '%s' is too large!" % imgpath)
236
237 subprocess.check_call(['dd', 'bs=1k', 'conv=notrunc',
238 'seek=%d' % start_kb,
239 'if=%s' % imgpath,
240 'of=%s' % nor_image])
241
242 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
243 'u-boot.%s' % d.getVar('UBOOT_SUFFIX',True)),
244 int(d.getVar('FLASH_UBOOT_OFFSET', True)),
245 int(d.getVar('FLASH_KERNEL_OFFSET', True)))
246
247 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
248 d.getVar('FLASH_KERNEL_IMAGE', True)),
249 int(d.getVar('FLASH_KERNEL_OFFSET', True)),
250 int(d.getVar('FLASH_ROFS_OFFSET', True)))
251
252 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
253 '%s.%s' % (
254 d.getVar('IMAGE_LINK_NAME', True),
255 d.getVar('IMAGE_BASETYPE', True))),
256 int(d.getVar('FLASH_ROFS_OFFSET', True)),
257 int(d.getVar('FLASH_RWFS_OFFSET', True)))
258
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700259 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
260 '%s.%s' % (
261 d.getVar('IMAGE_LINK_NAME', True),
262 d.getVar('OVERLAY_BASETYPE', True))),
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300263 int(d.getVar('FLASH_RWFS_OFFSET', True)),
264 int(d.getVar('FLASH_SIZE', True)))
265
266 bb.build.exec_func("do_mk_static_symlinks", d)
267}
268
269do_mk_static_symlinks() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400270 cd ${IMGDEPLOYDIR}
271 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd
272
273 # Maintain non-standard legacy links
274 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/flash-${MACHINE}
275 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/image-bmc
276 ln -sf u-boot.${UBOOT_SUFFIX} ${IMGDEPLOYDIR}/image-u-boot
277 ln -sf ${FLASH_KERNEL_IMAGE} ${IMGDEPLOYDIR}/image-kernel
278 ln -sf ${IMAGE_LINK_NAME}.${IMAGE_BASETYPE} ${IMGDEPLOYDIR}/image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700279 ln -sf ${IMAGE_LINK_NAME}.${OVERLAY_BASETYPE} ${IMGDEPLOYDIR}/image-rwfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400280}
281do_generate_static[dirs] = "${S}/static"
282do_generate_static[depends] += " \
283 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
284 virtual/kernel:do_deploy \
285 u-boot:do_populate_sysroot \
286 "
287
Lei YUf2072212018-06-20 13:27:34 +0800288make_signatures() {
289 signature_files=""
290 for file in "$@"; do
291 openssl dgst -sha256 -sign ${SIGNING_KEY} -out "${file}.sig" $file
292 signature_files="${signature_files} ${file}.sig"
293 done
294}
295
Brad Bishop19fc4f82017-08-04 23:38:54 -0400296do_generate_static_alltar() {
Lei YUa4674942018-05-23 14:01:14 +0800297 ln -sf ${S}/MANIFEST MANIFEST
298 ln -sf ${S}/publickey publickey
Brad Bishop19fc4f82017-08-04 23:38:54 -0400299 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd image-bmc
Lei YUa4674942018-05-23 14:01:14 +0800300
Lei YUf2072212018-06-20 13:27:34 +0800301 make_signatures image-bmc MANIFEST publickey
Lei YUa4674942018-05-23 14:01:14 +0800302
303 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd.all.tar \
304 image-bmc MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400305
306 cd ${IMGDEPLOYDIR}
307
308 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
309 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd.all.tar
310
311 # Maintain non-standard legacy link.
312 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
313 ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.all.tar
Lei YUa4674942018-05-23 14:01:14 +0800314
Brad Bishop19fc4f82017-08-04 23:38:54 -0400315}
316do_generate_static_alltar[vardepsexclude] = "DATETIME"
317do_generate_static_alltar[dirs] = "${S}/static"
Lei YUa4674942018-05-23 14:01:14 +0800318do_generate_static_alltar[depends] += " \
319 openssl-native:do_populate_sysroot \
320 ${SIGNING_KEY_DEPENDS} \
321 ${PN}:do_copy_signing_pubkey \
322 "
Brad Bishop19fc4f82017-08-04 23:38:54 -0400323
Brad Bishopde659382018-03-30 01:46:16 -0400324make_image_links() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400325 rwfs=$1
326 rofs=$2
Brad Bishop19fc4f82017-08-04 23:38:54 -0400327 shift
328 shift
Brad Bishop19fc4f82017-08-04 23:38:54 -0400329
Brad Bishopde659382018-03-30 01:46:16 -0400330 # Create some links to help make the tar archive in the format
331 # expected by phosphor-bmc-code-mgmt.
Brad Bishop19fc4f82017-08-04 23:38:54 -0400332 ln -sf ${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} image-u-boot
333 ln -sf ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} image-kernel
334 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rofs image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700335 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rwfs image-rwfs
Brad Bishopde659382018-03-30 01:46:16 -0400336}
337
338make_tar_of_images() {
339 type=$1
340 shift
341 extra_files="$@"
Brad Bishop19fc4f82017-08-04 23:38:54 -0400342
343 # Create the tar archive
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500344 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.$type.tar \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400345 image-u-boot image-kernel image-rofs image-rwfs $extra_files
346
347 cd ${IMGDEPLOYDIR}
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500348 ln -sf ${IMAGE_NAME}.$type.tar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type.tar
Brad Bishop19fc4f82017-08-04 23:38:54 -0400349}
350
351do_generate_static_tar() {
Lei YUa4674942018-05-23 14:01:14 +0800352 ln -sf ${S}/MANIFEST MANIFEST
353 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400354 make_image_links ${OVERLAY_BASETYPE} ${IMAGE_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800355 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500356 make_tar_of_images static.mtd MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400357
358 # Maintain non-standard legacy link.
359 cd ${IMGDEPLOYDIR}
360 ln -sf ${IMAGE_NAME}.static.mtd.tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar
361}
362do_generate_static_tar[dirs] = " ${S}/static"
363do_generate_static_tar[depends] += " \
364 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
365 virtual/kernel:do_deploy \
366 u-boot:do_populate_sysroot \
Lei YUa4674942018-05-23 14:01:14 +0800367 openssl-native:do_populate_sysroot \
368 ${SIGNING_KEY_DEPENDS} \
369 ${PN}:do_copy_signing_pubkey \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400370 "
371do_generate_static_tar[vardepsexclude] = "DATETIME"
372
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400373do_generate_ubi_tar() {
374 ln -sf ${S}/MANIFEST MANIFEST
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600375 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400376 make_image_links ${FLASH_UBI_OVERLAY_BASETYPE} ${FLASH_UBI_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800377 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500378 make_tar_of_images ubi.mtd MANIFEST publickey ${signature_files}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400379}
380do_generate_ubi_tar[dirs] = " ${S}/ubi"
381do_generate_ubi_tar[depends] += " \
382 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
383 virtual/kernel:do_deploy \
384 u-boot:do_populate_sysroot \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600385 openssl-native:do_populate_sysroot \
386 ${SIGNING_KEY_DEPENDS} \
387 ${PN}:do_copy_signing_pubkey \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400388 "
389
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500390do_generate_ext4_tar() {
391 ln -sf ${S}/MANIFEST MANIFEST
392 ln -sf ${S}/publickey publickey
393 make_image_links rwfs.${FLASH_EXT4_OVERLAY_BASETYPE} ${FLASH_EXT4_BASETYPE}
394 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
395 make_tar_of_images ext4.mmc MANIFEST publickey ${signature_files}
396}
397do_generate_ext4_tar[dirs] = " ${S}/ext4"
398do_generate_ext4_tar[depends] += " \
399 ${PN}:do_image_${FLASH_EXT4_BASETYPE} \
400 virtual/kernel:do_deploy \
401 u-boot:do_populate_sysroot \
402 openssl-native:do_populate_sysroot \
403 ${SIGNING_KEY_DEPENDS} \
404 ${PN}:do_copy_signing_pubkey \
405 "
406
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600407def get_pubkey_basedir(d):
408 return os.path.join(
409 d.getVar('STAGING_DIR_TARGET', True),
410 d.getVar('sysconfdir', True).strip(os.sep),
411 'activationdata')
412
413def get_pubkey_type(d):
414 return os.listdir(get_pubkey_basedir(d))[0]
415
416def get_pubkey_path(d):
417 return os.path.join(
418 get_pubkey_basedir(d),
419 get_pubkey_type(d),
420 'publickey')
421
Brad Bishop19fc4f82017-08-04 23:38:54 -0400422python do_generate_phosphor_manifest() {
Adriana Kobylakfb62a682019-10-28 16:03:12 -0500423 purpose = d.getVar('VERSION_PURPOSE', True)
Saqib Khan41723472017-09-22 10:21:30 -0500424 version = do_get_version(d)
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700425 target_machine = d.getVar('MACHINE', True)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400426 with open('MANIFEST', 'w') as fd:
Adriana Kobylakfb62a682019-10-28 16:03:12 -0500427 fd.write('purpose={}\n'.format(purpose))
Brad Bishop19fc4f82017-08-04 23:38:54 -0400428 fd.write('version={}\n'.format(version.strip('"')))
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600429 fd.write('KeyType={}\n'.format(get_pubkey_type(d)))
430 fd.write('HashType=RSA-SHA256\n')
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700431 fd.write('MachineName={}\n'.format(target_machine))
Brad Bishop19fc4f82017-08-04 23:38:54 -0400432}
433do_generate_phosphor_manifest[dirs] = "${S}"
434do_generate_phosphor_manifest[depends] += " \
435 os-release:do_populate_sysroot \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600436 phosphor-image-signing:do_populate_sysroot \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400437 "
438
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600439python do_copy_signing_pubkey() {
440 with open(get_pubkey_path(d), 'r') as read_fd:
441 with open('publickey', 'w') as write_fd:
442 write_fd.write(read_fd.read())
443}
444
445do_copy_signing_pubkey[dirs] = "${S}"
446do_copy_signing_pubkey[depends] += " \
447 phosphor-image-signing:do_populate_sysroot \
448 "
449
450addtask copy_signing_pubkey after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400451addtask generate_phosphor_manifest after do_rootfs
452addtask generate_rwfs_static after do_rootfs
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400453addtask generate_rwfs_ubi after do_rootfs
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500454addtask generate_rwfs_ext4 after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400455
456python() {
457 types = d.getVar('IMAGE_FSTYPES', True).split()
458
459 if any([x in types for x in ['mtd-static', 'mtd-static-alltar']]):
460 bb.build.addtask(
461 'do_generate_static',
462 'do_image_complete',
463 'do_generate_rwfs_static', d)
464 if 'mtd-static-alltar' in types:
465 bb.build.addtask(
466 'do_generate_static_alltar',
467 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800468 'do_generate_static do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400469 if 'mtd-static-tar' in types:
470 bb.build.addtask(
471 'do_generate_static_tar',
472 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800473 'do_generate_rwfs_static do_generate_phosphor_manifest', d)
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400474
475 if 'mtd-ubi' in types:
476 bb.build.addtask(
477 'do_generate_ubi',
478 'do_image_complete',
479 'do_generate_rwfs_ubi', d)
480 if 'mtd-ubi-tar' in types:
481 bb.build.addtask(
482 'do_generate_ubi_tar',
483 'do_image_complete',
484 'do_generate_rwfs_ubi do_generate_phosphor_manifest', d)
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500485
486 if 'mmc-ext4-tar' in types:
487 bb.build.addtask(
488 'do_generate_ext4_tar',
489 'do_image_complete',
490 'do_generate_rwfs_ext4 do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400491}