blob: fa5d3191c9afa3bc566fd014fb988cf1d1ca83fe [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.
Adriana Kobylak55681e42020-11-11 15:06:50 -060058MMC_UBOOT_SIZE ?= "1024"
Adriana Kobylak45a57952020-07-01 16:23:11 -050059MMC_BOOT_PARTITION_SIZE ?= "65536"
60
Eddie Jamesb2b7ff62018-02-09 11:59:18 -060061SIGNING_KEY ?= "${STAGING_DIR_NATIVE}${datadir}/OpenBMC.priv"
62INSECURE_KEY = "${@'${SIGNING_KEY}' == '${STAGING_DIR_NATIVE}${datadir}/OpenBMC.priv'}"
63SIGNING_KEY_DEPENDS = "${@oe.utils.conditional('INSECURE_KEY', 'True', 'phosphor-insecure-signing-key-native:do_populate_sysroot', '', d)}"
64
Adriana Kobylakfb62a682019-10-28 16:03:12 -050065VERSION_PURPOSE ?= "xyz.openbmc_project.Software.Version.VersionPurpose.BMC"
66
Brad Bishop3e37d382018-03-31 12:17:28 -040067UBOOT_SUFFIX ?= "bin"
68
Brad Bishop3aa1ef62017-08-04 23:48:12 -040069python() {
70 # Compute rwfs LEB count and LEB size.
71 page_size = d.getVar('FLASH_PAGE_SIZE', True)
72 nor_overhead_size = d.getVar('FLASH_NOR_UBI_OVERHEAD', True)
73 overhead_size = max(int(page_size), int(nor_overhead_size))
74 peb_size = d.getVar('FLASH_PEB_SIZE', True)
75 leb_size = (int(peb_size) * 1024) - (2 * overhead_size)
76 d.setVar('FLASH_LEB_SIZE', str(leb_size)) # In bytes
77
78 rwfs_size = d.getVar('FLASH_UBI_RWFS_SIZE', True)
79 rwfs_size = int(rwfs_size) * 1024
80 lebs = int((rwfs_size + leb_size - 1) / leb_size) # Rounding up
81 d.setVar('FLASH_UBI_RWFS_LEBS', str(lebs))
82}
83
Brad Bishop19fc4f82017-08-04 23:38:54 -040084# Allow rwfs mkfs configuration through OVERLAY_MKFS_OPTS and OVERRIDES. However,
85# avoid setting 'ext4' or 'jffs2' in OVERRIDES as such raw filesystem types are
86# reserved for the primary image (and setting them currently breaks the build).
87# Instead, prefix the overlay override value with 'rwfs-' to avoid collisions.
88DISTROOVERRIDES .= ":static-rwfs-${OVERLAY_BASETYPE}"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040089DISTROOVERRIDES .= ":ubi-rwfs-${FLASH_UBI_OVERLAY_BASETYPE}"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050090DISTROOVERRIDES .= ":mmc-rwfs-${FLASH_EXT4_OVERLAY_BASETYPE}"
Brad Bishop19fc4f82017-08-04 23:38:54 -040091
William A. Kennington IIIc230ab32019-09-16 17:44:48 -070092JFFS2_RWFS_CMD = "mkfs.jffs2 --root=jffs2 --faketime --output=${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.jffs2"
93UBIFS_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 -050094EXT4_RWFS_CMD = "mkfs.ext4 -F ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4"
Brad Bishop19fc4f82017-08-04 23:38:54 -040095
96FLASH_STATIC_RWFS_CMD_static-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
Brad Bishop3aa1ef62017-08-04 23:48:12 -040097FLASH_UBI_RWFS_CMD_ubi-rwfs-jffs2 = "${JFFS2_RWFS_CMD}"
98FLASH_UBI_RWFS_CMD_ubi-rwfs-ubifs = "${UBIFS_RWFS_CMD}"
Adriana Kobylak5a5753a2019-07-30 11:27:46 -050099FLASH_EXT4_RWFS_CMD_mmc-rwfs-ext4 = "${EXT4_RWFS_CMD}"
Brad Bishop19fc4f82017-08-04 23:38:54 -0400100
Adriana Kobylak661cf392019-07-29 14:39:00 -0500101mk_empty_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400102 image_dst="$1"
103 image_size_kb=$2
104 dd if=/dev/zero bs=1k count=$image_size_kb \
105 | tr '\000' '\377' > $image_dst
106}
107
Adriana Kobylak55681e42020-11-11 15:06:50 -0600108mk_empty_image_zeros() {
109 image_dst="$1"
110 image_size_kb=$2
111 dd if=/dev/zero of=$image_dst bs=1k count=$image_size_kb
112}
113
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500114clean_rwfs() {
115 type=$1
116 shift
117
118 rm -f ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type
119 rm -rf $type
120 mkdir $type
121}
122
Brad Bishop19fc4f82017-08-04 23:38:54 -0400123make_rwfs() {
124 type=$1
125 cmd=$2
126 shift
127 shift
128 opts="$@"
129
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500130 mkdir -p $type
Brad Bishop19fc4f82017-08-04 23:38:54 -0400131
132 $cmd $opts
133}
134
135do_generate_rwfs_static() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500136 clean_rwfs ${OVERLAY_BASETYPE}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400137 make_rwfs ${OVERLAY_BASETYPE} "${FLASH_STATIC_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
138}
139do_generate_rwfs_static[dirs] = " ${S}/static"
140do_generate_rwfs_static[depends] += " \
141 mtd-utils-native:do_populate_sysroot \
142 "
143
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400144do_generate_rwfs_ubi() {
Adriana Kobylakf494bb52019-07-29 16:14:11 -0500145 clean_rwfs ${FLASH_UBI_OVERLAY_BASETYPE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400146 make_rwfs ${FLASH_UBI_OVERLAY_BASETYPE} "${FLASH_UBI_RWFS_CMD}"
147}
148do_generate_rwfs_ubi[dirs] = " ${S}/ubi"
149do_generate_rwfs_ubi[depends] += " \
150 mtd-utils-native:do_populate_sysroot \
151 "
152
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500153do_generate_rwfs_ext4() {
154 clean_rwfs rwfs.${FLASH_EXT4_OVERLAY_BASETYPE}
155 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.ext4 1024
156 make_rwfs ${FLASH_EXT4_OVERLAY_BASETYPE} "${FLASH_EXT4_RWFS_CMD}" ${OVERLAY_MKFS_OPTS}
157}
158do_generate_rwfs_ext4[dirs] = " ${S}/ext4"
159do_generate_rwfs_ext4[depends] += " \
160 e2fsprogs-native:do_populate_sysroot \
161 "
162
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400163add_volume() {
164 config_file=$1
165 vol_id=$2
166 vol_type=$3
167 vol_name=$4
168 image=$5
169 vol_size=$6
170
171 echo \[$vol_name\] >> $config_file
172 echo mode=ubi >> $config_file
173 echo image=$image >> $config_file
174 echo vol_type=$vol_type >> $config_file
175 echo vol_name=$vol_name >> $config_file
176 echo vol_id=$vol_id >> $config_file
177 if [ ! -z $vol_size ]; then
178 echo vol_size=$vol_size >> $config_file
179 fi
180}
181
Saqib Khan41723472017-09-22 10:21:30 -0500182python do_generate_ubi() {
183 version_id = do_get_versionID(d)
184 d.setVar('VERSION_ID', version_id)
185 bb.build.exec_func("do_make_ubi", d)
186}
187do_generate_ubi[dirs] = "${S}/ubi"
188do_generate_ubi[depends] += " \
189 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
190 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500191 u-boot:do_deploy \
Saqib Khan41723472017-09-22 10:21:30 -0500192 mtd-utils-native:do_populate_sysroot \
193 "
194
195do_make_ubi() {
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400196 cfg=ubinize-${IMAGE_NAME}.cfg
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400197 rm -f $cfg ubi-img
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400198 # Construct the ubinize config file
Saqib Khan41723472017-09-22 10:21:30 -0500199 add_volume $cfg 0 static kernel-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400200 ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE}
201
Saqib Khan41723472017-09-22 10:21:30 -0500202 add_volume $cfg 1 static rofs-${VERSION_ID} \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400203 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${FLASH_UBI_BASETYPE}
204
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700205 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 -0400206
207 # Build the ubi partition image
208 ubinize -p ${FLASH_PEB_SIZE}KiB -m ${FLASH_PAGE_SIZE} -o ubi-img $cfg
209
210 # Concatenate the uboot and ubi partitions
Adriana Kobylak661cf392019-07-29 14:39:00 -0500211 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd ${FLASH_SIZE}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400212 dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
213 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
214 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
215 dd bs=1k conv=notrunc seek=${FLASH_UBI_OFFSET} \
216 if=ubi-img \
217 of=${IMGDEPLOYDIR}/${IMAGE_NAME}.ubi.mtd
218
219 cd ${IMGDEPLOYDIR}
220 ln -sf ${IMAGE_NAME}.ubi.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.ubi.mtd
221}
Saqib Khan41723472017-09-22 10:21:30 -0500222do_make_ubi[dirs] = "${S}/ubi"
223do_make_ubi[depends] += " \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400224 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
225 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500226 u-boot:do_deploy \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400227 mtd-utils-native:do_populate_sysroot \
228 "
229
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300230do_mk_static_nor_image() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400231 # Assemble the flash image
Adriana Kobylak661cf392019-07-29 14:39:00 -0500232 mk_empty_image ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd ${FLASH_SIZE}
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300233}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400234
Adriana Kobylakf1954f02020-04-27 15:20:35 -0500235do_generate_image_uboot_file() {
236 image_dst="$1"
237 uboot_offset=${FLASH_UBOOT_OFFSET}
238
239 if [ ! -z ${SPL_BINARY} ]; then
240 dd bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET} \
241 if=${DEPLOY_DIR_IMAGE}/u-boot-spl.${UBOOT_SUFFIX} \
242 of=${image_dst}
243 uboot_offset=${FLASH_UBOOT_SPL_SIZE}
244 fi
245
246 dd bs=1k conv=notrunc seek=${uboot_offset} \
247 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
248 of=${image_dst}
249}
250
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300251python do_generate_static() {
252 import subprocess
Brad Bishop19fc4f82017-08-04 23:38:54 -0400253
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300254 bb.build.exec_func("do_mk_static_nor_image", d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400255
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300256 nor_image = os.path.join(d.getVar('IMGDEPLOYDIR', True),
257 '%s.static.mtd' % d.getVar('IMAGE_NAME', True))
258
259 def _append_image(imgpath, start_kb, finish_kb):
260 imgsize = os.path.getsize(imgpath)
Josh Lehan0a5ef2a2020-02-26 12:11:33 -0800261 maxsize = (finish_kb - start_kb) * 1024
262 bb.debug(1, 'Considering file size=' + str(imgsize) + ' name=' + imgpath)
263 bb.debug(1, 'Spanning start=' + str(start_kb) + 'K end=' + str(finish_kb) + 'K')
264 bb.debug(1, 'Compare needed=' + str(imgsize) + ' available=' + str(maxsize) + ' margin=' + str(maxsize - imgsize))
265 if imgsize > maxsize:
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300266 bb.fatal("Image '%s' is too large!" % imgpath)
267
268 subprocess.check_call(['dd', 'bs=1k', 'conv=notrunc',
269 'seek=%d' % start_kb,
270 'if=%s' % imgpath,
271 'of=%s' % nor_image])
272
Adriana Kobylake913dd82020-04-13 13:56:41 -0500273 uboot_offset = int(d.getVar('FLASH_UBOOT_OFFSET', True))
274
275 spl_binary = d.getVar('SPL_BINARY', True)
276 if spl_binary:
277 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
278 'u-boot-spl.%s' % d.getVar('UBOOT_SUFFIX',True)),
279 int(d.getVar('FLASH_UBOOT_OFFSET', True)),
280 int(d.getVar('FLASH_UBOOT_SPL_SIZE', True)))
281 uboot_offset += int(d.getVar('FLASH_UBOOT_SPL_SIZE', True))
282
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300283 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
284 'u-boot.%s' % d.getVar('UBOOT_SUFFIX',True)),
Adriana Kobylake913dd82020-04-13 13:56:41 -0500285 uboot_offset,
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300286 int(d.getVar('FLASH_KERNEL_OFFSET', True)))
287
288 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
289 d.getVar('FLASH_KERNEL_IMAGE', True)),
290 int(d.getVar('FLASH_KERNEL_OFFSET', True)),
291 int(d.getVar('FLASH_ROFS_OFFSET', True)))
292
293 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
294 '%s.%s' % (
295 d.getVar('IMAGE_LINK_NAME', True),
296 d.getVar('IMAGE_BASETYPE', True))),
297 int(d.getVar('FLASH_ROFS_OFFSET', True)),
298 int(d.getVar('FLASH_RWFS_OFFSET', True)))
299
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700300 _append_image(os.path.join(d.getVar('IMGDEPLOYDIR', True),
301 '%s.%s' % (
302 d.getVar('IMAGE_LINK_NAME', True),
303 d.getVar('OVERLAY_BASETYPE', True))),
Alexander Filippov3dcf6f92018-07-17 16:41:37 +0300304 int(d.getVar('FLASH_RWFS_OFFSET', True)),
305 int(d.getVar('FLASH_SIZE', True)))
306
307 bb.build.exec_func("do_mk_static_symlinks", d)
308}
309
310do_mk_static_symlinks() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400311 cd ${IMGDEPLOYDIR}
312 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd
313
314 # Maintain non-standard legacy links
Adriana Kobylakf1954f02020-04-27 15:20:35 -0500315 do_generate_image_uboot_file ${IMGDEPLOYDIR}/image-u-boot
Brad Bishop19fc4f82017-08-04 23:38:54 -0400316 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/flash-${MACHINE}
317 ln -sf ${IMAGE_NAME}.static.mtd ${IMGDEPLOYDIR}/image-bmc
Brad Bishop19fc4f82017-08-04 23:38:54 -0400318 ln -sf ${FLASH_KERNEL_IMAGE} ${IMGDEPLOYDIR}/image-kernel
319 ln -sf ${IMAGE_LINK_NAME}.${IMAGE_BASETYPE} ${IMGDEPLOYDIR}/image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700320 ln -sf ${IMAGE_LINK_NAME}.${OVERLAY_BASETYPE} ${IMGDEPLOYDIR}/image-rwfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400321}
322do_generate_static[dirs] = "${S}/static"
323do_generate_static[depends] += " \
324 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
325 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500326 u-boot:do_deploy \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400327 "
328
Lei YUf2072212018-06-20 13:27:34 +0800329make_signatures() {
330 signature_files=""
331 for file in "$@"; do
332 openssl dgst -sha256 -sign ${SIGNING_KEY} -out "${file}.sig" $file
333 signature_files="${signature_files} ${file}.sig"
334 done
George Liuf0afcf82020-12-15 09:46:10 +0800335
336 if [ -n "$signature_files" ]; then
337 sort_signature_files=`echo "$signature_files" | tr ' ' '\n' | sort | tr '\n' ' '`
338 cat $sort_signature_files > image-full
339 openssl dgst -sha256 -sign ${SIGNING_KEY} -out image-full.sig image-full
340 signature_files="${signature_files} image-full.sig"
341 rm -rf image-full
342 fi
Lei YUf2072212018-06-20 13:27:34 +0800343}
344
Brad Bishop19fc4f82017-08-04 23:38:54 -0400345do_generate_static_alltar() {
Lei YUa4674942018-05-23 14:01:14 +0800346 ln -sf ${S}/MANIFEST MANIFEST
347 ln -sf ${S}/publickey publickey
Brad Bishop19fc4f82017-08-04 23:38:54 -0400348 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd image-bmc
Lei YUa4674942018-05-23 14:01:14 +0800349
Lei YUf2072212018-06-20 13:27:34 +0800350 make_signatures image-bmc MANIFEST publickey
Lei YUa4674942018-05-23 14:01:14 +0800351
352 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.static.mtd.all.tar \
353 image-bmc MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400354
355 cd ${IMGDEPLOYDIR}
356
357 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
358 ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.static.mtd.all.tar
359
360 # Maintain non-standard legacy link.
361 ln -sf ${IMAGE_NAME}.static.mtd.all.tar \
362 ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.all.tar
Lei YUa4674942018-05-23 14:01:14 +0800363
Brad Bishop19fc4f82017-08-04 23:38:54 -0400364}
365do_generate_static_alltar[vardepsexclude] = "DATETIME"
366do_generate_static_alltar[dirs] = "${S}/static"
Lei YUa4674942018-05-23 14:01:14 +0800367do_generate_static_alltar[depends] += " \
368 openssl-native:do_populate_sysroot \
369 ${SIGNING_KEY_DEPENDS} \
370 ${PN}:do_copy_signing_pubkey \
371 "
Brad Bishop19fc4f82017-08-04 23:38:54 -0400372
Brad Bishopde659382018-03-30 01:46:16 -0400373make_image_links() {
Brad Bishop19fc4f82017-08-04 23:38:54 -0400374 rwfs=$1
375 rofs=$2
Brad Bishop19fc4f82017-08-04 23:38:54 -0400376 shift
377 shift
Brad Bishop19fc4f82017-08-04 23:38:54 -0400378
Brad Bishopde659382018-03-30 01:46:16 -0400379 # Create some links to help make the tar archive in the format
380 # expected by phosphor-bmc-code-mgmt.
Adriana Kobylakf1954f02020-04-27 15:20:35 -0500381 do_generate_image_uboot_file image-u-boot
Brad Bishop19fc4f82017-08-04 23:38:54 -0400382 ln -sf ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} image-kernel
383 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rofs image-rofs
William A. Kennington IIIc230ab32019-09-16 17:44:48 -0700384 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$rwfs image-rwfs
Brad Bishopde659382018-03-30 01:46:16 -0400385}
386
387make_tar_of_images() {
388 type=$1
389 shift
390 extra_files="$@"
Brad Bishop19fc4f82017-08-04 23:38:54 -0400391
392 # Create the tar archive
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500393 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.$type.tar \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400394 image-u-boot image-kernel image-rofs image-rwfs $extra_files
395
396 cd ${IMGDEPLOYDIR}
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500397 ln -sf ${IMAGE_NAME}.$type.tar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type.tar
Brad Bishop19fc4f82017-08-04 23:38:54 -0400398}
399
400do_generate_static_tar() {
Lei YUa4674942018-05-23 14:01:14 +0800401 ln -sf ${S}/MANIFEST MANIFEST
402 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400403 make_image_links ${OVERLAY_BASETYPE} ${IMAGE_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800404 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500405 make_tar_of_images static.mtd MANIFEST publickey ${signature_files}
Brad Bishop19fc4f82017-08-04 23:38:54 -0400406
407 # Maintain non-standard legacy link.
408 cd ${IMGDEPLOYDIR}
409 ln -sf ${IMAGE_NAME}.static.mtd.tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar
410}
411do_generate_static_tar[dirs] = " ${S}/static"
412do_generate_static_tar[depends] += " \
413 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
414 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500415 u-boot:do_deploy \
Lei YUa4674942018-05-23 14:01:14 +0800416 openssl-native:do_populate_sysroot \
417 ${SIGNING_KEY_DEPENDS} \
418 ${PN}:do_copy_signing_pubkey \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400419 "
420do_generate_static_tar[vardepsexclude] = "DATETIME"
421
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400422do_generate_ubi_tar() {
423 ln -sf ${S}/MANIFEST MANIFEST
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600424 ln -sf ${S}/publickey publickey
Brad Bishopde659382018-03-30 01:46:16 -0400425 make_image_links ${FLASH_UBI_OVERLAY_BASETYPE} ${FLASH_UBI_BASETYPE}
Lei YUf2072212018-06-20 13:27:34 +0800426 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
Adriana Kobylake67e9db2019-07-30 11:31:50 -0500427 make_tar_of_images ubi.mtd MANIFEST publickey ${signature_files}
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400428}
429do_generate_ubi_tar[dirs] = " ${S}/ubi"
430do_generate_ubi_tar[depends] += " \
431 ${PN}:do_image_${@d.getVar('FLASH_UBI_BASETYPE', True).replace('-', '_')} \
432 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500433 u-boot:do_deploy \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600434 openssl-native:do_populate_sysroot \
435 ${SIGNING_KEY_DEPENDS} \
436 ${PN}:do_copy_signing_pubkey \
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400437 "
438
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500439do_generate_ext4_tar() {
Adriana Kobylak45a57952020-07-01 16:23:11 -0500440 # Generate the U-Boot image
Adriana Kobylak55681e42020-11-11 15:06:50 -0600441 mk_empty_image_zeros image-u-boot ${MMC_UBOOT_SIZE}
Adriana Kobylak45a57952020-07-01 16:23:11 -0500442 do_generate_image_uboot_file image-u-boot
443
444 # Generate a compressed ext4 filesystem with the fitImage file in it to be
445 # flashed to the boot partition of the eMMC
446 install -d boot-image
447 install -m 644 ${DEPLOY_DIR_IMAGE}/${FLASH_KERNEL_IMAGE} boot-image/fitImage
Adriana Kobylak55681e42020-11-11 15:06:50 -0600448 mk_empty_image_zeros boot-image.${FLASH_EXT4_BASETYPE} ${MMC_BOOT_PARTITION_SIZE}
Adriana Kobylak45a57952020-07-01 16:23:11 -0500449 mkfs.ext4 -F -i 4096 -d boot-image boot-image.${FLASH_EXT4_BASETYPE}
450 # Error codes 0-3 indicate successfull operation of fsck
451 fsck.ext4 -pvfD boot-image.${FLASH_EXT4_BASETYPE} || [ $? -le 3 ]
452 zstd -f -k -T0 -c ${ZSTD_COMPRESSION_LEVEL} boot-image.${FLASH_EXT4_BASETYPE} > boot-image.${FLASH_EXT4_BASETYPE}.zst
453
454 # Generate the compressed ext4 rootfs
455 zstd -f -k -T0 -c ${ZSTD_COMPRESSION_LEVEL} ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.${FLASH_EXT4_BASETYPE} > ${IMAGE_LINK_NAME}.${FLASH_EXT4_BASETYPE}.zst
456
457 ln -sf boot-image.${FLASH_EXT4_BASETYPE}.zst image-kernel
458 ln -sf ${IMAGE_LINK_NAME}.${FLASH_EXT4_BASETYPE}.zst image-rofs
459 ln -sf ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.rwfs.${FLASH_EXT4_OVERLAY_BASETYPE} image-rwfs
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500460 ln -sf ${S}/MANIFEST MANIFEST
461 ln -sf ${S}/publickey publickey
Adriana Kobylak81846a22020-07-12 15:12:36 -0500462
463 hostfw_update_file="${DEPLOY_DIR_IMAGE}/hostfw/update/image-hostfw"
464 if [ -e "${hostfw_update_file}" ]; then
465 ln -sf "${hostfw_update_file}" image-hostfw
466 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey image-hostfw
467 make_tar_of_images ext4.mmc MANIFEST publickey ${signature_files} image-hostfw
468 else
469 make_signatures image-u-boot image-kernel image-rofs image-rwfs MANIFEST publickey
470 make_tar_of_images ext4.mmc MANIFEST publickey ${signature_files}
471 fi
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500472}
473do_generate_ext4_tar[dirs] = " ${S}/ext4"
474do_generate_ext4_tar[depends] += " \
Adriana Kobylak4cc866b2020-03-28 13:43:33 -0500475 zstd-native:do_populate_sysroot \
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500476 ${PN}:do_image_${FLASH_EXT4_BASETYPE} \
477 virtual/kernel:do_deploy \
Brad Bishop209ed522020-11-02 12:36:04 -0500478 u-boot:do_deploy \
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500479 openssl-native:do_populate_sysroot \
480 ${SIGNING_KEY_DEPENDS} \
481 ${PN}:do_copy_signing_pubkey \
Brad Bishop209ed522020-11-02 12:36:04 -0500482 phosphor-hostfw-image:do_deploy \
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500483 "
484
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600485def get_pubkey_basedir(d):
486 return os.path.join(
487 d.getVar('STAGING_DIR_TARGET', True),
488 d.getVar('sysconfdir', True).strip(os.sep),
489 'activationdata')
490
491def get_pubkey_type(d):
492 return os.listdir(get_pubkey_basedir(d))[0]
493
494def get_pubkey_path(d):
495 return os.path.join(
496 get_pubkey_basedir(d),
497 get_pubkey_type(d),
498 'publickey')
499
Brad Bishop19fc4f82017-08-04 23:38:54 -0400500python do_generate_phosphor_manifest() {
Adriana Kobylakfb62a682019-10-28 16:03:12 -0500501 purpose = d.getVar('VERSION_PURPOSE', True)
Saqib Khan41723472017-09-22 10:21:30 -0500502 version = do_get_version(d)
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700503 target_machine = d.getVar('MACHINE', True)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400504 with open('MANIFEST', 'w') as fd:
Adriana Kobylakfb62a682019-10-28 16:03:12 -0500505 fd.write('purpose={}\n'.format(purpose))
Brad Bishop19fc4f82017-08-04 23:38:54 -0400506 fd.write('version={}\n'.format(version.strip('"')))
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600507 fd.write('KeyType={}\n'.format(get_pubkey_type(d)))
508 fd.write('HashType=RSA-SHA256\n')
Vijay Khemkaae614bd2019-09-18 12:28:46 -0700509 fd.write('MachineName={}\n'.format(target_machine))
Brad Bishop19fc4f82017-08-04 23:38:54 -0400510}
511do_generate_phosphor_manifest[dirs] = "${S}"
512do_generate_phosphor_manifest[depends] += " \
513 os-release:do_populate_sysroot \
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600514 phosphor-image-signing:do_populate_sysroot \
Brad Bishop19fc4f82017-08-04 23:38:54 -0400515 "
516
Eddie Jamesb2b7ff62018-02-09 11:59:18 -0600517python do_copy_signing_pubkey() {
518 with open(get_pubkey_path(d), 'r') as read_fd:
519 with open('publickey', 'w') as write_fd:
520 write_fd.write(read_fd.read())
521}
522
523do_copy_signing_pubkey[dirs] = "${S}"
524do_copy_signing_pubkey[depends] += " \
525 phosphor-image-signing:do_populate_sysroot \
526 "
527
528addtask copy_signing_pubkey after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400529addtask generate_phosphor_manifest after do_rootfs
530addtask generate_rwfs_static after do_rootfs
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400531addtask generate_rwfs_ubi after do_rootfs
Adriana Kobylak5a5753a2019-07-30 11:27:46 -0500532addtask generate_rwfs_ext4 after do_rootfs
Brad Bishop19fc4f82017-08-04 23:38:54 -0400533
534python() {
535 types = d.getVar('IMAGE_FSTYPES', True).split()
536
537 if any([x in types for x in ['mtd-static', 'mtd-static-alltar']]):
538 bb.build.addtask(
539 'do_generate_static',
540 'do_image_complete',
541 'do_generate_rwfs_static', d)
542 if 'mtd-static-alltar' in types:
543 bb.build.addtask(
544 'do_generate_static_alltar',
545 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800546 'do_generate_static do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400547 if 'mtd-static-tar' in types:
548 bb.build.addtask(
549 'do_generate_static_tar',
550 'do_image_complete',
Lei YUa4674942018-05-23 14:01:14 +0800551 'do_generate_rwfs_static do_generate_phosphor_manifest', d)
Brad Bishop3aa1ef62017-08-04 23:48:12 -0400552
553 if 'mtd-ubi' in types:
554 bb.build.addtask(
555 'do_generate_ubi',
556 'do_image_complete',
557 'do_generate_rwfs_ubi', d)
558 if 'mtd-ubi-tar' in types:
559 bb.build.addtask(
560 'do_generate_ubi_tar',
561 'do_image_complete',
562 'do_generate_rwfs_ubi do_generate_phosphor_manifest', d)
Adriana Kobylak9b7197e2019-07-29 15:25:33 -0500563
564 if 'mmc-ext4-tar' in types:
565 bb.build.addtask(
566 'do_generate_ext4_tar',
567 'do_image_complete',
568 'do_generate_rwfs_ext4 do_generate_phosphor_manifest', d)
Brad Bishop19fc4f82017-08-04 23:38:54 -0400569}