blob: 23ff3475c7f3b123979794771108c3f58052754c [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
Brad Bishop3e37d382018-03-31 12:17:28 -040060UBOOT_SUFFIX ?= "bin"
61
Brad Bishop3aa1ef62017-08-04 23:48:12 -040062python() {
63 # Compute rwfs LEB count and LEB size.
64 page_size = d.getVar('FLASH_PAGE_SIZE', True)
65 nor_overhead_size = d.getVar('FLASH_NOR_UBI_OVERHEAD', True)
66 overhead_size = max(int(page_size), int(nor_overhead_size))
67 peb_size = d.getVar('FLASH_PEB_SIZE', True)
68 leb_size = (int(peb_size) * 1024) - (2 * overhead_size)
69 d.setVar('FLASH_LEB_SIZE', str(leb_size)) # In bytes
70
71 rwfs_size = d.getVar('FLASH_UBI_RWFS_SIZE', True)
72 rwfs_size = int(rwfs_size) * 1024
73 lebs = int((rwfs_size + leb_size - 1) / leb_size) # Rounding up
74 d.setVar('FLASH_UBI_RWFS_LEBS', str(lebs))
75}
76
Brad Bishop19fc4f82017-08-04 23:38:54 -040077# Allow rwfs mkfs configuration through OVERLAY_MKFS_OPTS and OVERRIDES. However,
78# avoid setting 'ext4' or 'jffs2' in OVERRIDES as such raw filesystem types are
79# reserved for the primary image (and setting them currently breaks the build).
80# Instead, prefix the overlay override value with 'rwfs-' to avoid collisions.
81DISTROOVERRIDES .= ":static-rwfs-${OVERLAY_BASETYPE}"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040082DISTROOVERRIDES .= ":ubi-rwfs-${FLASH_UBI_OVERLAY_BASETYPE}"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050083DISTROOVERRIDES .= ":mmc-rwfs-${FLASH_EXT4_OVERLAY_BASETYPE}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040084
William A. Kennington IIIc230ab32019-09-16 17:44:48 -070085JFFS2_RWFS_CMD = "mkfs.jffs2 --root=jffs2 --faketime --output=${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.jffs2"
86UBIFS_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 -050087EXT4_RWFS_CMD = "mkfs.ext4 -F ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4"
Brad Bishop19fc4f82017-08-04 23:38:54 -040088
89FLASH_STATIC_RWFS_CMD_static-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040090FLASH_UBI_RWFS_CMD_ubi-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
91FLASH_UBI_RWFS_CMD_ubi-rwfs-ubifs = "${UBIFS_RWFS_CMD}"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050092FLASH_EXT4_RWFS_CMD_mmc-rwfs-ext4 = "${EXT4_RWFS_CMD}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040093
Adriana Kobylak661cf392019-07-29 14:39:00 -050094mk_empty_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -040095 image_dst="$1"
96 image_size_kb=$2
97 dd if=/dev/zero bs=1k count=$image_size_kb \
98 | tr '\000' '\377' > $image_dst
99}
100
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500101clean_rwfs() {
102 type=$1
103 shift
104
105 rm -f ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type
106 rm -rf $type
107 mkdir $type
108}
109
Brad Bishop19fc4f82017-08-04 23:38:54 -0400110make_rwfs() {
111 type=$1
112 cmd=$2
113 shift
114 shift
115 opts="$@"
116
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500117 mkdir -p $type
Brad Bishop19fc4f82017-08-04 23:38:54 -0400118
119 $cmd $opts
120}
121
122do_generate_rwfs_static() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500123 clean_rwfs ${OVERLAY_BASETYPE}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400124 make_rwfs ${OVERLAY_BASETYPE} "${FLASH_STATIC_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
125}
126do_generate_rwfs_static[dirs] = " ${S}/static"
127do_generate_rwfs_static[depends] += " \
128 mtd-utils-native:do_populate_sysroot \
129 "
130
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400131do_generate_rwfs_ubi() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500132 clean_rwfs ${FLASH_UBI_OVERLAY_BASETYPE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400133 make_rwfs ${FLASH_UBI_OVERLAY_BASETYPE} "${FLASH_UBI_RWFS_CMD}"
134}
135do_generate_rwfs_ubi[dirs] = " ${S}/ubi"
136do_generate_rwfs_ubi[depends] += " \
137 mtd-utils-native:do_populate_sysroot \
138 "
139
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500140do_generate_rwfs_ext4() {
141 clean_rwfs rwfs.${FLASH_EXT4_OVERLAY_BASETYPE}
142 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4 1024
143 make_rwfs ${FLASH_EXT4_OVERLAY_BASETYPE} "${FLASH_EXT4_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
144}
145do_generate_rwfs_ext4[dirs] = " ${S}/ext4"
146do_generate_rwfs_ext4[depends] += " \
147 e2fsprogs-native:do_populate_sysroot \
148 "
149
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400150add_volume() {
151 config_file=$1
152 vol_id=$2
153 vol_type=$3
154 vol_name=$4
155 image=$5
156 vol_size=$6
157
158 echo \[$vol_name\] >> $config_file
159 echo mode=ubi >> $config_file
160 echo image=$image >> $config_file
161 echo vol_type=$vol_type >> $config_file
162 echo vol_name=$vol_name >> $config_file
163 echo vol_id=$vol_id >> $config_file
164 if [ ! -z $vol_size ]; then
165 echo vol_size=$vol_size >> $config_file
166 fi
167}
168
Saqib Khan41723472017-09-22 10:21:30 -0500169python do_generate_ubi() {
170 version_id = do_get_versionID(d)
171 d.setVar('VERSION_ID', version_id)
172 bb.build.exec_func("do_make_ubi", d)
173}
174do_generate_ubi[dirs] = "${S}/ubi"
175do_generate_ubi[depends] += " \
176 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
177 virtual/kernel:do_deploy \
178 u-boot:do_populate_sysroot \
179 mtd-utils-native:do_populate_sysroot \
180 "
181
182do_make_ubi() {
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400183 cfg=ubinize-${IMAGE_NAME}.cfg
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400184 rm -f $cfg ubi-img
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400185 # Construct the ubinize config file
Saqib Khan41723472017-09-22 10:21:30 -0500186 add_volume $cfg 0 static kernel-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400187 ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE}
188
Saqib Khan41723472017-09-22 10:21:30 -0500189 add_volume $cfg 1 static rofs-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400190 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${FLASH_UBI_BASETYPE}
191
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700192 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 -0400193
194 # Build the ubi partition image
195 ubinize -p ${FLASH_PEB_SIZE}KiB -m ${FLASH_PAGE_SIZE} -o ubi-img $cfg
196
197 # Concatenate the uboot and ubi partitions
Adriana Kobylak661cf392019-07-29 14:39:00 -0500198 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd ${FLASH_SIZE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400199 dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
200 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
201 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
202 dd bs=1k conv=notrunc seek=${FLASH_UBI_OFFSET} \
203 if=ubi-img \
204 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
205
206 cd ${IMGDEPLOYDIR}
207 ln -sf ${IMAGE_NAME}.ubi.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.ubi.mtd
208}
Saqib Khan41723472017-09-22 10:21:30 -0500209do_make_ubi[dirs] = "${S}/ubi"
210do_make_ubi[depends] += " \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400211 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
212 virtual/kernel:do_deploy \
213 u-boot:do_populate_sysroot \
214 mtd-utils-native:do_populate_sysroot \
215 "
216
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300217do_mk_static_nor_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400218 # Assemble the flash image
Adriana Kobylak661cf392019-07-29 14:39:00 -0500219 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd ${FLASH_SIZE}
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300220}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400221
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300222python do_generate_static() {
223 import subprocess
Brad Bishop19fc4f82017-08-04 23:38:54 -0400224
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300225 bb.build.exec_func("do_mk_static_nor_image", d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400226
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300227 nor_image = os.path.join(d.getVar('IMGDEPLOYDIR', True),
228 '%s.static.mtd' % d.getVar('IMAGE_NAME', True))
229
230 def _append_image(imgpath, start_kb, finish_kb):
231 imgsize = os.path.getsize(imgpath)
232 if imgsize > (finish_kb - start_kb) * 1024:
233 bb.fatal("Image '%s' is too large!" % imgpath)
234
235 subprocess.check_call(['dd', 'bs=1k', 'conv=notrunc',
236 'seek=%d' % start_kb,
237 'if=%s' % imgpath,
238 'of=%s' % nor_image])
239
240 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
241 'u-boot.%s' % d.getVar('UBOOT_SUFFIX',True)),
242 int(d.getVar('FLASH_UBOOT_OFFSET', True)),
243 int(d.getVar('FLASH_KERNEL_OFFSET', True)))
244
245 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
246 d.getVar('FLASH_KERNEL_IMAGE', True)),
247 int(d.getVar('FLASH_KERNEL_OFFSET', True)),
248 int(d.getVar('FLASH_ROFS_OFFSET', True)))
249
250 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
251 '%s.%s' % (
252 d.getVar('IMAGE_LINK_NAME', True),
253 d.getVar('IMAGE_BASETYPE', True))),
254 int(d.getVar('FLASH_ROFS_OFFSET', True)),
255 int(d.getVar('FLASH_RWFS_OFFSET', True)))
256
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700257 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
258 '%s.%s' % (
259 d.getVar('IMAGE_LINK_NAME', True),
260 d.getVar('OVERLAY_BASETYPE', True))),
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300261 int(d.getVar('FLASH_RWFS_OFFSET', True)),
262 int(d.getVar('FLASH_SIZE', True)))
263
264 bb.build.exec_func("do_mk_static_symlinks", d)
265}
266
267do_mk_static_symlinks() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400268 cd ${IMGDEPLOYDIR}
269 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd
270
271 # Maintain non-standard legacy links
272 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/flash-${MACHINE}
273 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/image-bmc
274 ln -sf u-boot.${UBOOT_SUFFIX} ${IMGDEPLOYDIR}/image-u-boot
275 ln -sf ${FLASH_KERNEL_IMAGE} ${IMGDEPLOYDIR}/image-kernel
276 ln -sf ${IMAGE_LINK_NAME}.${IMAGE_BASETYPE} ${IMGDEPLOYDIR}/image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700277 ln -sf ${IMAGE_LINK_NAME}.${OVERLAY_BASETYPE} ${IMGDEPLOYDIR}/image-rwfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400278}
279do_generate_static[dirs] = "${S}/static"
280do_generate_static[depends] += " \
281 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
282 virtual/kernel:do_deploy \
283 u-boot:do_populate_sysroot \
284 "
285
Lei YUf2072212018-06-20 13:27:34 +0800286make_signatures() {
287 signature_files=""
288 for file in "$@"; do
289 openssl dgst -sha256 -sign ${SIGNING_KEY} -out "${file}.sig" $file
290 signature_files="${signature_files} ${file}.sig"
291 done
292}
293
Brad Bishop19fc4f82017-08-04 23:38:54 -0400294do_generate_static_alltar() {
Lei YUa4674942018-05-23 14:01:14 +0800295 ln -sf ${S}/MANIFEST MANIFEST
296 ln -sf ${S}/publickey publickey
Brad Bishop19fc4f82017-08-04 23:38:54 -0400297 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd image-bmc
Lei YUa4674942018-05-23 14:01:14 +0800298
Lei YUf2072212018-06-20 13:27:34 +0800299 make_signatures image-bmc MANIFEST publickey
Lei YUa4674942018-05-23 14:01:14 +0800300
301 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd.all.tar \
302 image-bmc MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400303
304 cd ${IMGDEPLOYDIR}
305
306 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
307 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd.all.tar
308
309 # Maintain non-standard legacy link.
310 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
311 ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.all.tar
Lei YUa4674942018-05-23 14:01:14 +0800312
Brad Bishop19fc4f82017-08-04 23:38:54 -0400313}
314do_generate_static_alltar[vardepsexclude] = "DATETIME"
315do_generate_static_alltar[dirs] = "${S}/static"
Lei YUa4674942018-05-23 14:01:14 +0800316do_generate_static_alltar[depends] += " \
317 openssl-native:do_populate_sysroot \
318 ${SIGNING_KEY_DEPENDS} \
319 ${PN}:do_copy_signing_pubkey \
320 "
Brad Bishop19fc4f82017-08-04 23:38:54 -0400321
Brad Bishopde659382018-03-30 01:46:16 -0400322make_image_links() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400323 rwfs=$1
324 rofs=$2
Brad Bishop19fc4f82017-08-04 23:38:54 -0400325 shift
326 shift
Brad Bishop19fc4f82017-08-04 23:38:54 -0400327
Brad Bishopde659382018-03-30 01:46:16 -0400328 # Create some links to help make the tar archive in the format
329 # expected by phosphor-bmc-code-mgmt.
Brad Bishop19fc4f82017-08-04 23:38:54 -0400330 ln -sf ${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} image-u-boot
331 ln -sf ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} image-kernel
332 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rofs image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700333 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rwfs image-rwfs
Brad Bishopde659382018-03-30 01:46:16 -0400334}
335
336make_tar_of_images() {
337 type=$1
338 shift
339 extra_files="$@"
Brad Bishop19fc4f82017-08-04 23:38:54 -0400340
341 # Create the tar archive
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500342 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.$type.tar \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400343 image-u-boot image-kernel image-rofs image-rwfs $extra_files
344
345 cd ${IMGDEPLOYDIR}
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500346 ln -sf ${IMAGE_NAME}.$type.tar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type.tar
Brad Bishop19fc4f82017-08-04 23:38:54 -0400347}
348
349do_generate_static_tar() {
Lei YUa4674942018-05-23 14:01:14 +0800350 ln -sf ${S}/MANIFEST MANIFEST
351 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400352 make_image_links ${OVERLAY_BASETYPE} ${IMAGE_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800353 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500354 make_tar_of_images static.mtd MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400355
356 # Maintain non-standard legacy link.
357 cd ${IMGDEPLOYDIR}
358 ln -sf ${IMAGE_NAME}.static.mtd.tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar
359}
360do_generate_static_tar[dirs] = " ${S}/static"
361do_generate_static_tar[depends] += " \
362 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
363 virtual/kernel:do_deploy \
364 u-boot:do_populate_sysroot \
Lei YUa4674942018-05-23 14:01:14 +0800365 openssl-native:do_populate_sysroot \
366 ${SIGNING_KEY_DEPENDS} \
367 ${PN}:do_copy_signing_pubkey \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400368 "
369do_generate_static_tar[vardepsexclude] = "DATETIME"
370
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400371do_generate_ubi_tar() {
372 ln -sf ${S}/MANIFEST MANIFEST
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600373 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400374 make_image_links ${FLASH_UBI_OVERLAY_BASETYPE} ${FLASH_UBI_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800375 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500376 make_tar_of_images ubi.mtd MANIFEST publickey ${signature_files}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400377}
378do_generate_ubi_tar[dirs] = " ${S}/ubi"
379do_generate_ubi_tar[depends] += " \
380 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
381 virtual/kernel:do_deploy \
382 u-boot:do_populate_sysroot \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600383 openssl-native:do_populate_sysroot \
384 ${SIGNING_KEY_DEPENDS} \
385 ${PN}:do_copy_signing_pubkey \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400386 "
387
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500388do_generate_ext4_tar() {
389 ln -sf ${S}/MANIFEST MANIFEST
390 ln -sf ${S}/publickey publickey
391 make_image_links rwfs.${FLASH_EXT4_OVERLAY_BASETYPE} ${FLASH_EXT4_BASETYPE}
392 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
393 make_tar_of_images ext4.mmc MANIFEST publickey ${signature_files}
394}
395do_generate_ext4_tar[dirs] = " ${S}/ext4"
396do_generate_ext4_tar[depends] += " \
397 ${PN}:do_image_${FLASH_EXT4_BASETYPE} \
398 virtual/kernel:do_deploy \
399 u-boot:do_populate_sysroot \
400 openssl-native:do_populate_sysroot \
401 ${SIGNING_KEY_DEPENDS} \
402 ${PN}:do_copy_signing_pubkey \
403 "
404
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600405def get_pubkey_basedir(d):
406 return os.path.join(
407 d.getVar('STAGING_DIR_TARGET', True),
408 d.getVar('sysconfdir', True).strip(os.sep),
409 'activationdata')
410
411def get_pubkey_type(d):
412 return os.listdir(get_pubkey_basedir(d))[0]
413
414def get_pubkey_path(d):
415 return os.path.join(
416 get_pubkey_basedir(d),
417 get_pubkey_type(d),
418 'publickey')
419
Brad Bishop19fc4f82017-08-04 23:38:54 -0400420python do_generate_phosphor_manifest() {
Saqib Khan41723472017-09-22 10:21:30 -0500421 version = do_get_version(d)
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700422 target_machine = d.getVar('MACHINE', True)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400423 with open('MANIFEST', 'w') as fd:
424 fd.write('purpose=xyz.openbmc_project.Software.Version.VersionPurpose.BMC\n')
425 fd.write('version={}\n'.format(version.strip('"')))
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600426 fd.write('KeyType={}\n'.format(get_pubkey_type(d)))
427 fd.write('HashType=RSA-SHA256\n')
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700428 fd.write('MachineName={}\n'.format(target_machine))
Brad Bishop19fc4f82017-08-04 23:38:54 -0400429}
430do_generate_phosphor_manifest[dirs] = "${S}"
431do_generate_phosphor_manifest[depends] += " \
432 os-release:do_populate_sysroot \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600433 phosphor-image-signing:do_populate_sysroot \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400434 "
435
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600436python do_copy_signing_pubkey() {
437 with open(get_pubkey_path(d), 'r') as read_fd:
438 with open('publickey', 'w') as write_fd:
439 write_fd.write(read_fd.read())
440}
441
442do_copy_signing_pubkey[dirs] = "${S}"
443do_copy_signing_pubkey[depends] += " \
444 phosphor-image-signing:do_populate_sysroot \
445 "
446
447addtask copy_signing_pubkey after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400448addtask generate_phosphor_manifest after do_rootfs
449addtask generate_rwfs_static after do_rootfs
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400450addtask generate_rwfs_ubi after do_rootfs
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500451addtask generate_rwfs_ext4 after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400452
453python() {
454 types = d.getVar('IMAGE_FSTYPES', True).split()
455
456 if any([x in types for x in ['mtd-static', 'mtd-static-alltar']]):
457 bb.build.addtask(
458 'do_generate_static',
459 'do_image_complete',
460 'do_generate_rwfs_static', d)
461 if 'mtd-static-alltar' in types:
462 bb.build.addtask(
463 'do_generate_static_alltar',
464 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800465 'do_generate_static do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400466 if 'mtd-static-tar' in types:
467 bb.build.addtask(
468 'do_generate_static_tar',
469 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800470 'do_generate_rwfs_static do_generate_phosphor_manifest', d)
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400471
472 if 'mtd-ubi' in types:
473 bb.build.addtask(
474 'do_generate_ubi',
475 'do_image_complete',
476 'do_generate_rwfs_ubi', d)
477 if 'mtd-ubi-tar' in types:
478 bb.build.addtask(
479 'do_generate_ubi_tar',
480 'do_image_complete',
481 'do_generate_rwfs_ubi do_generate_phosphor_manifest', d)
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500482
483 if 'mmc-ext4-tar' in types:
484 bb.build.addtask(
485 'do_generate_ext4_tar',
486 'do_image_complete',
487 'do_generate_rwfs_ext4 do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400488}