blob: 54cbfa5ba71f642572dce1c9459f98218774e2fa [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 Kobylak5a5753a2019-07-30 11:27:46 -050019FLASH_EXT4_OVERLAY_BASETYPE ?= "ext4"
Brad Bishop19fc4f82017-08-04 23:38:54 -040020
Brad Bishop02ee6ae2018-03-30 08:43:23 -040021IMAGE_TYPES += "mtd-static mtd-static-alltar mtd-static-tar mtd-ubi mtd-ubi-tar"
Brad Bishop19fc4f82017-08-04 23:38:54 -040022
23IMAGE_TYPEDEP_mtd-static = "${IMAGE_BASETYPE}"
24IMAGE_TYPEDEP_mtd-static-tar = "${IMAGE_BASETYPE}"
25IMAGE_TYPEDEP_mtd-static-alltar = "mtd-static"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040026IMAGE_TYPEDEP_mtd-ubi = "${FLASH_UBI_BASETYPE}"
27IMAGE_TYPEDEP_mtd-ubi-tar = "${FLASH_UBI_BASETYPE}"
Brad Bishop02ee6ae2018-03-30 08:43:23 -040028IMAGE_TYPES_MASKED += "mtd-static mtd-static-alltar mtd-static-tar mtd-ubi mtd-ubi-tar"
Brad Bishop19fc4f82017-08-04 23:38:54 -040029
Brad Bishop3aa1ef62017-08-04 23:48:12 -040030# Flash characteristics in KB unless otherwise noted
Brad Bishopdcd861c2019-09-24 21:16:09 -040031DISTROOVERRIDES .= ":flash-${FLASH_SIZE}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040032FLASH_SIZE ?= "32768"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040033FLASH_PEB_SIZE ?= "64"
34# Flash page and overhead sizes in bytes
35FLASH_PAGE_SIZE ?= "1"
36FLASH_NOR_UBI_OVERHEAD ?= "64"
Brad Bishop19fc4f82017-08-04 23:38:54 -040037
38# Fixed partition offsets
39FLASH_UBOOT_OFFSET ?= "0"
40FLASH_KERNEL_OFFSET ?= "512"
Brad Bishopdcd861c2019-09-24 21:16:09 -040041FLASH_KERNEL_OFFSET_flash-131072 ?= "1024"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040042FLASH_UBI_OFFSET ?= "${FLASH_KERNEL_OFFSET}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040043FLASH_ROFS_OFFSET ?= "4864"
Brad Bishopdcd861c2019-09-24 21:16:09 -040044FLASH_ROFS_OFFSET_flash-131072 ?= "10240"
Brad Bishop19fc4f82017-08-04 23:38:54 -040045FLASH_RWFS_OFFSET ?= "28672"
Brad Bishopdcd861c2019-09-24 21:16:09 -040046FLASH_RWFS_OFFSET_flash-131072 ?= "98304"
Brad Bishop19fc4f82017-08-04 23:38:54 -040047
Brad Bishop3aa1ef62017-08-04 23:48:12 -040048# UBI volume sizes in KB unless otherwise noted.
Adriana Kobylakb70005d2018-02-14 16:35:30 -060049FLASH_UBI_RWFS_SIZE ?= "6144"
Brad Bishopdcd861c2019-09-24 21:16:09 -040050FLASH_UBI_RWFS_SIZE_flash-131072 ?= "32768"
Adriana Kobylakb70005d2018-02-14 16:35:30 -060051FLASH_UBI_RWFS_TXT_SIZE ?= "6MiB"
Brad Bishopdcd861c2019-09-24 21:16:09 -040052FLASH_UBI_RWFS_TXT_SIZE_flash-131072 ?= "32MiB"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040053
Eddie Jamesb2b7ff62018-02-09 11:59:18 -060054SIGNING_KEY ?= "${STAGING_DIR_NATIVE}${datadir}/OpenBMC.priv"
55INSECURE_KEY = "${@'${SIGNING_KEY}' == '${STAGING_DIR_NATIVE}${datadir}/OpenBMC.priv'}"
56SIGNING_KEY_DEPENDS = "${@oe.utils.conditional('INSECURE_KEY', 'True', 'phosphor-insecure-signing-key-native:do_populate_sysroot', '', d)}"
57
Brad Bishop3e37d382018-03-31 12:17:28 -040058UBOOT_SUFFIX ?= "bin"
59
Brad Bishop3aa1ef62017-08-04 23:48:12 -040060python() {
61 # Compute rwfs LEB count and LEB size.
62 page_size = d.getVar('FLASH_PAGE_SIZE', True)
63 nor_overhead_size = d.getVar('FLASH_NOR_UBI_OVERHEAD', True)
64 overhead_size = max(int(page_size), int(nor_overhead_size))
65 peb_size = d.getVar('FLASH_PEB_SIZE', True)
66 leb_size = (int(peb_size) * 1024) - (2 * overhead_size)
67 d.setVar('FLASH_LEB_SIZE', str(leb_size)) # In bytes
68
69 rwfs_size = d.getVar('FLASH_UBI_RWFS_SIZE', True)
70 rwfs_size = int(rwfs_size) * 1024
71 lebs = int((rwfs_size + leb_size - 1) / leb_size) # Rounding up
72 d.setVar('FLASH_UBI_RWFS_LEBS', str(lebs))
73}
74
Brad Bishop19fc4f82017-08-04 23:38:54 -040075# Allow rwfs mkfs configuration through OVERLAY_MKFS_OPTS and OVERRIDES. However,
76# avoid setting 'ext4' or 'jffs2' in OVERRIDES as such raw filesystem types are
77# reserved for the primary image (and setting them currently breaks the build).
78# Instead, prefix the overlay override value with 'rwfs-' to avoid collisions.
79DISTROOVERRIDES .= ":static-rwfs-${OVERLAY_BASETYPE}"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040080DISTROOVERRIDES .= ":ubi-rwfs-${FLASH_UBI_OVERLAY_BASETYPE}"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050081DISTROOVERRIDES .= ":mmc-rwfs-${FLASH_EXT4_OVERLAY_BASETYPE}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040082
William A. Kennington IIIc230ab32019-09-16 17:44:48 -070083JFFS2_RWFS_CMD = "mkfs.jffs2 --root=jffs2 --faketime --output=${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.jffs2"
84UBIFS_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 -050085EXT4_RWFS_CMD = "mkfs.ext4 -F ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4"
Brad Bishop19fc4f82017-08-04 23:38:54 -040086
87FLASH_STATIC_RWFS_CMD_static-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040088FLASH_UBI_RWFS_CMD_ubi-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
89FLASH_UBI_RWFS_CMD_ubi-rwfs-ubifs = "${UBIFS_RWFS_CMD}"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050090FLASH_EXT4_RWFS_CMD_mmc-rwfs-ext4 = "${EXT4_RWFS_CMD}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040091
Adriana Kobylak661cf392019-07-29 14:39:00 -050092mk_empty_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -040093 image_dst="$1"
94 image_size_kb=$2
95 dd if=/dev/zero bs=1k count=$image_size_kb \
96 | tr '\000' '\377' > $image_dst
97}
98
Adriana Kobylakf494bb52019-07-29 16:14:11 -050099clean_rwfs() {
100 type=$1
101 shift
102
103 rm -f ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type
104 rm -rf $type
105 mkdir $type
106}
107
Brad Bishop19fc4f82017-08-04 23:38:54 -0400108make_rwfs() {
109 type=$1
110 cmd=$2
111 shift
112 shift
113 opts="$@"
114
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500115 mkdir -p $type
Brad Bishop19fc4f82017-08-04 23:38:54 -0400116
117 $cmd $opts
118}
119
120do_generate_rwfs_static() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500121 clean_rwfs ${OVERLAY_BASETYPE}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400122 make_rwfs ${OVERLAY_BASETYPE} "${FLASH_STATIC_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
123}
124do_generate_rwfs_static[dirs] = " ${S}/static"
125do_generate_rwfs_static[depends] += " \
126 mtd-utils-native:do_populate_sysroot \
127 "
128
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400129do_generate_rwfs_ubi() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500130 clean_rwfs ${FLASH_UBI_OVERLAY_BASETYPE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400131 make_rwfs ${FLASH_UBI_OVERLAY_BASETYPE} "${FLASH_UBI_RWFS_CMD}"
132}
133do_generate_rwfs_ubi[dirs] = " ${S}/ubi"
134do_generate_rwfs_ubi[depends] += " \
135 mtd-utils-native:do_populate_sysroot \
136 "
137
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500138do_generate_rwfs_ext4() {
139 clean_rwfs rwfs.${FLASH_EXT4_OVERLAY_BASETYPE}
140 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4 1024
141 make_rwfs ${FLASH_EXT4_OVERLAY_BASETYPE} "${FLASH_EXT4_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
142}
143do_generate_rwfs_ext4[dirs] = " ${S}/ext4"
144do_generate_rwfs_ext4[depends] += " \
145 e2fsprogs-native:do_populate_sysroot \
146 "
147
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400148add_volume() {
149 config_file=$1
150 vol_id=$2
151 vol_type=$3
152 vol_name=$4
153 image=$5
154 vol_size=$6
155
156 echo \[$vol_name\] >> $config_file
157 echo mode=ubi >> $config_file
158 echo image=$image >> $config_file
159 echo vol_type=$vol_type >> $config_file
160 echo vol_name=$vol_name >> $config_file
161 echo vol_id=$vol_id >> $config_file
162 if [ ! -z $vol_size ]; then
163 echo vol_size=$vol_size >> $config_file
164 fi
165}
166
Saqib Khan41723472017-09-22 10:21:30 -0500167python do_generate_ubi() {
168 version_id = do_get_versionID(d)
169 d.setVar('VERSION_ID', version_id)
170 bb.build.exec_func("do_make_ubi", d)
171}
172do_generate_ubi[dirs] = "${S}/ubi"
173do_generate_ubi[depends] += " \
174 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
175 virtual/kernel:do_deploy \
176 u-boot:do_populate_sysroot \
177 mtd-utils-native:do_populate_sysroot \
178 "
179
180do_make_ubi() {
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400181 cfg=ubinize-${IMAGE_NAME}.cfg
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400182 rm -f $cfg ubi-img
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400183 # Construct the ubinize config file
Saqib Khan41723472017-09-22 10:21:30 -0500184 add_volume $cfg 0 static kernel-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400185 ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE}
186
Saqib Khan41723472017-09-22 10:21:30 -0500187 add_volume $cfg 1 static rofs-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400188 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${FLASH_UBI_BASETYPE}
189
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700190 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 -0400191
192 # Build the ubi partition image
193 ubinize -p ${FLASH_PEB_SIZE}KiB -m ${FLASH_PAGE_SIZE} -o ubi-img $cfg
194
195 # Concatenate the uboot and ubi partitions
Adriana Kobylak661cf392019-07-29 14:39:00 -0500196 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd ${FLASH_SIZE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400197 dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
198 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
199 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
200 dd bs=1k conv=notrunc seek=${FLASH_UBI_OFFSET} \
201 if=ubi-img \
202 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
203
204 cd ${IMGDEPLOYDIR}
205 ln -sf ${IMAGE_NAME}.ubi.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.ubi.mtd
206}
Saqib Khan41723472017-09-22 10:21:30 -0500207do_make_ubi[dirs] = "${S}/ubi"
208do_make_ubi[depends] += " \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400209 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
210 virtual/kernel:do_deploy \
211 u-boot:do_populate_sysroot \
212 mtd-utils-native:do_populate_sysroot \
213 "
214
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300215do_mk_static_nor_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400216 # Assemble the flash image
Adriana Kobylak661cf392019-07-29 14:39:00 -0500217 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd ${FLASH_SIZE}
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300218}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400219
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300220python do_generate_static() {
221 import subprocess
Brad Bishop19fc4f82017-08-04 23:38:54 -0400222
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300223 bb.build.exec_func("do_mk_static_nor_image", d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400224
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300225 nor_image = os.path.join(d.getVar('IMGDEPLOYDIR', True),
226 '%s.static.mtd' % d.getVar('IMAGE_NAME', True))
227
228 def _append_image(imgpath, start_kb, finish_kb):
229 imgsize = os.path.getsize(imgpath)
230 if imgsize > (finish_kb - start_kb) * 1024:
231 bb.fatal("Image '%s' is too large!" % imgpath)
232
233 subprocess.check_call(['dd', 'bs=1k', 'conv=notrunc',
234 'seek=%d' % start_kb,
235 'if=%s' % imgpath,
236 'of=%s' % nor_image])
237
238 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
239 'u-boot.%s' % d.getVar('UBOOT_SUFFIX',True)),
240 int(d.getVar('FLASH_UBOOT_OFFSET', True)),
241 int(d.getVar('FLASH_KERNEL_OFFSET', True)))
242
243 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
244 d.getVar('FLASH_KERNEL_IMAGE', True)),
245 int(d.getVar('FLASH_KERNEL_OFFSET', True)),
246 int(d.getVar('FLASH_ROFS_OFFSET', True)))
247
248 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
249 '%s.%s' % (
250 d.getVar('IMAGE_LINK_NAME', True),
251 d.getVar('IMAGE_BASETYPE', True))),
252 int(d.getVar('FLASH_ROFS_OFFSET', True)),
253 int(d.getVar('FLASH_RWFS_OFFSET', True)))
254
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700255 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
256 '%s.%s' % (
257 d.getVar('IMAGE_LINK_NAME', True),
258 d.getVar('OVERLAY_BASETYPE', True))),
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300259 int(d.getVar('FLASH_RWFS_OFFSET', True)),
260 int(d.getVar('FLASH_SIZE', True)))
261
262 bb.build.exec_func("do_mk_static_symlinks", d)
263}
264
265do_mk_static_symlinks() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400266 cd ${IMGDEPLOYDIR}
267 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd
268
269 # Maintain non-standard legacy links
270 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/flash-${MACHINE}
271 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/image-bmc
272 ln -sf u-boot.${UBOOT_SUFFIX} ${IMGDEPLOYDIR}/image-u-boot
273 ln -sf ${FLASH_KERNEL_IMAGE} ${IMGDEPLOYDIR}/image-kernel
274 ln -sf ${IMAGE_LINK_NAME}.${IMAGE_BASETYPE} ${IMGDEPLOYDIR}/image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700275 ln -sf ${IMAGE_LINK_NAME}.${OVERLAY_BASETYPE} ${IMGDEPLOYDIR}/image-rwfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400276}
277do_generate_static[dirs] = "${S}/static"
278do_generate_static[depends] += " \
279 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
280 virtual/kernel:do_deploy \
281 u-boot:do_populate_sysroot \
282 "
283
Lei YUf2072212018-06-20 13:27:34 +0800284make_signatures() {
285 signature_files=""
286 for file in "$@"; do
287 openssl dgst -sha256 -sign ${SIGNING_KEY} -out "${file}.sig" $file
288 signature_files="${signature_files} ${file}.sig"
289 done
290}
291
Brad Bishop19fc4f82017-08-04 23:38:54 -0400292do_generate_static_alltar() {
Lei YUa4674942018-05-23 14:01:14 +0800293 ln -sf ${S}/MANIFEST MANIFEST
294 ln -sf ${S}/publickey publickey
Brad Bishop19fc4f82017-08-04 23:38:54 -0400295 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd image-bmc
Lei YUa4674942018-05-23 14:01:14 +0800296
Lei YUf2072212018-06-20 13:27:34 +0800297 make_signatures image-bmc MANIFEST publickey
Lei YUa4674942018-05-23 14:01:14 +0800298
299 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd.all.tar \
300 image-bmc MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400301
302 cd ${IMGDEPLOYDIR}
303
304 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
305 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd.all.tar
306
307 # Maintain non-standard legacy link.
308 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
309 ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.all.tar
Lei YUa4674942018-05-23 14:01:14 +0800310
Brad Bishop19fc4f82017-08-04 23:38:54 -0400311}
312do_generate_static_alltar[vardepsexclude] = "DATETIME"
313do_generate_static_alltar[dirs] = "${S}/static"
Lei YUa4674942018-05-23 14:01:14 +0800314do_generate_static_alltar[depends] += " \
315 openssl-native:do_populate_sysroot \
316 ${SIGNING_KEY_DEPENDS} \
317 ${PN}:do_copy_signing_pubkey \
318 "
Brad Bishop19fc4f82017-08-04 23:38:54 -0400319
Brad Bishopde659382018-03-30 01:46:16 -0400320make_image_links() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400321 rwfs=$1
322 rofs=$2
Brad Bishop19fc4f82017-08-04 23:38:54 -0400323 shift
324 shift
Brad Bishop19fc4f82017-08-04 23:38:54 -0400325
Brad Bishopde659382018-03-30 01:46:16 -0400326 # Create some links to help make the tar archive in the format
327 # expected by phosphor-bmc-code-mgmt.
Brad Bishop19fc4f82017-08-04 23:38:54 -0400328 ln -sf ${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} image-u-boot
329 ln -sf ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} image-kernel
330 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rofs image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700331 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rwfs image-rwfs
Brad Bishopde659382018-03-30 01:46:16 -0400332}
333
334make_tar_of_images() {
335 type=$1
336 shift
337 extra_files="$@"
Brad Bishop19fc4f82017-08-04 23:38:54 -0400338
339 # Create the tar archive
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500340 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.$type.tar \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400341 image-u-boot image-kernel image-rofs image-rwfs $extra_files
342
343 cd ${IMGDEPLOYDIR}
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500344 ln -sf ${IMAGE_NAME}.$type.tar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type.tar
Brad Bishop19fc4f82017-08-04 23:38:54 -0400345}
346
347do_generate_static_tar() {
Lei YUa4674942018-05-23 14:01:14 +0800348 ln -sf ${S}/MANIFEST MANIFEST
349 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400350 make_image_links ${OVERLAY_BASETYPE} ${IMAGE_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800351 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500352 make_tar_of_images static.mtd MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400353
354 # Maintain non-standard legacy link.
355 cd ${IMGDEPLOYDIR}
356 ln -sf ${IMAGE_NAME}.static.mtd.tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar
357}
358do_generate_static_tar[dirs] = " ${S}/static"
359do_generate_static_tar[depends] += " \
360 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
361 virtual/kernel:do_deploy \
362 u-boot:do_populate_sysroot \
Lei YUa4674942018-05-23 14:01:14 +0800363 openssl-native:do_populate_sysroot \
364 ${SIGNING_KEY_DEPENDS} \
365 ${PN}:do_copy_signing_pubkey \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400366 "
367do_generate_static_tar[vardepsexclude] = "DATETIME"
368
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400369do_generate_ubi_tar() {
370 ln -sf ${S}/MANIFEST MANIFEST
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600371 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400372 make_image_links ${FLASH_UBI_OVERLAY_BASETYPE} ${FLASH_UBI_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800373 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500374 make_tar_of_images ubi.mtd MANIFEST publickey ${signature_files}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400375}
376do_generate_ubi_tar[dirs] = " ${S}/ubi"
377do_generate_ubi_tar[depends] += " \
378 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
379 virtual/kernel:do_deploy \
380 u-boot:do_populate_sysroot \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600381 openssl-native:do_populate_sysroot \
382 ${SIGNING_KEY_DEPENDS} \
383 ${PN}:do_copy_signing_pubkey \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400384 "
385
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600386def get_pubkey_basedir(d):
387 return os.path.join(
388 d.getVar('STAGING_DIR_TARGET', True),
389 d.getVar('sysconfdir', True).strip(os.sep),
390 'activationdata')
391
392def get_pubkey_type(d):
393 return os.listdir(get_pubkey_basedir(d))[0]
394
395def get_pubkey_path(d):
396 return os.path.join(
397 get_pubkey_basedir(d),
398 get_pubkey_type(d),
399 'publickey')
400
Brad Bishop19fc4f82017-08-04 23:38:54 -0400401python do_generate_phosphor_manifest() {
Saqib Khan41723472017-09-22 10:21:30 -0500402 version = do_get_version(d)
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700403 target_machine = d.getVar('MACHINE', True)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400404 with open('MANIFEST', 'w') as fd:
405 fd.write('purpose=xyz.openbmc_project.Software.Version.VersionPurpose.BMC\n')
406 fd.write('version={}\n'.format(version.strip('"')))
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600407 fd.write('KeyType={}\n'.format(get_pubkey_type(d)))
408 fd.write('HashType=RSA-SHA256\n')
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700409 fd.write('MachineName={}\n'.format(target_machine))
Brad Bishop19fc4f82017-08-04 23:38:54 -0400410}
411do_generate_phosphor_manifest[dirs] = "${S}"
412do_generate_phosphor_manifest[depends] += " \
413 os-release:do_populate_sysroot \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600414 phosphor-image-signing:do_populate_sysroot \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400415 "
416
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600417python do_copy_signing_pubkey() {
418 with open(get_pubkey_path(d), 'r') as read_fd:
419 with open('publickey', 'w') as write_fd:
420 write_fd.write(read_fd.read())
421}
422
423do_copy_signing_pubkey[dirs] = "${S}"
424do_copy_signing_pubkey[depends] += " \
425 phosphor-image-signing:do_populate_sysroot \
426 "
427
428addtask copy_signing_pubkey after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400429addtask generate_phosphor_manifest after do_rootfs
430addtask generate_rwfs_static after do_rootfs
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400431addtask generate_rwfs_ubi after do_rootfs
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500432addtask generate_rwfs_ext4 after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400433
434python() {
435 types = d.getVar('IMAGE_FSTYPES', True).split()
436
437 if any([x in types for x in ['mtd-static', 'mtd-static-alltar']]):
438 bb.build.addtask(
439 'do_generate_static',
440 'do_image_complete',
441 'do_generate_rwfs_static', d)
442 if 'mtd-static-alltar' in types:
443 bb.build.addtask(
444 'do_generate_static_alltar',
445 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800446 'do_generate_static do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400447 if 'mtd-static-tar' in types:
448 bb.build.addtask(
449 'do_generate_static_tar',
450 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800451 'do_generate_rwfs_static do_generate_phosphor_manifest', d)
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400452
453 if 'mtd-ubi' in types:
454 bb.build.addtask(
455 'do_generate_ubi',
456 'do_image_complete',
457 'do_generate_rwfs_ubi', d)
458 if 'mtd-ubi-tar' in types:
459 bb.build.addtask(
460 'do_generate_ubi_tar',
461 'do_image_complete',
462 'do_generate_rwfs_ubi do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400463}