blob: 5cc1192f97089ddbeb8f009e8c219726a1e682a5 [file] [log] [blame]
Jorge Cisneros8a445a02020-09-03 21:09:03 +00001inherit image_version
2unset do_get_version[noexec]
3do_get_version[depends] = "os-release"
4
5# do_get_version() is copied from meta-phosphor/classes/image_version.bbclass and
6# modified to append the date and time to the version if a file named "developer"
7# exists in the openbmc/build directory
8def do_get_version(d):
9 import configparser
10 import io
11 path = d.getVar('STAGING_DIR_TARGET', True) + d.getVar('sysconfdir', True)
12 path = os.path.join(path, 'os-release')
Patrick Williamsd44abb32021-10-14 21:28:20 -050013 parser = configparser.ConfigParser(strict=False)
Jorge Cisneros8a445a02020-09-03 21:09:03 +000014 parser.optionxform = str
15 version = ''
16 try:
17 with open(path, 'r') as fd:
18 buf = '[root]\n' + fd.read()
19 fd = io.StringIO(buf)
20 parser.readfp(fd)
21 version = parser['root']['VERSION_ID']
22 dev_path = d.getVar('PWD', True)
23 dev_path = os.path.join(dev_path, 'developer')
24 if os.path.isfile(dev_path):
25 version = version[:-1] + str(d.getVar('IMAGE_VERSION_SUFFIX', True)).strip()
26 except:
27 pass
28 return version
29
30HPE_GXP_BOOTBLOCK_IMAGE ?= "gxp-bootblock.bin"
31HPE_UBOOT_SIGNING_HEADER ?= "hpe-uboot-header.section"
32HPE_UBOOT_SIGNING_KEY ?= "hpe-uboot-signing-key.pem"
33
34FLASH_SIZE = "31552"
35FLASH_UBOOT_OFFSET = "0"
36FLASH_KERNEL_OFFSET = "512"
37FLASH_ROFS_OFFSET = "5376"
38FLASH_RWFS_OFFSET = "29184"
39FLASH_SECTION_OFFSET = "31552"
40FLASH_SECTION_END = "32768"
41
42UBOOT_IMG_SIZE = "393216"
43
44do_generate_static[depends] += " \
45 gxp-bootblock:do_deploy \
46 gxp-bootblock:do_populate_sysroot \
47 "
48
49
Mike Garrettab6de742021-08-24 17:56:32 -050050make_image_links:append() {
Jorge Cisneros8a445a02020-09-03 21:09:03 +000051 ln -sf ${DEPLOY_DIR_IMAGE}/hpe-section image-section
52}
53
Mike Garrettab6de742021-08-24 17:56:32 -050054do_mk_static_symlinks:append() {
Jorge Cisneros8a445a02020-09-03 21:09:03 +000055 ln -sf hpe-section image-section
56}
57
Mike Garrettab6de742021-08-24 17:56:32 -050058do_generate_static:prepend() {
Jorge Cisneros8a445a02020-09-03 21:09:03 +000059 bb.build.exec_func("do_generate_hpe_image", d)
60}
61
Mike Garrettab6de742021-08-24 17:56:32 -050062do_generate_static:append() {
Jorge Cisneros8a445a02020-09-03 21:09:03 +000063 _append_image(os.path.join(d.getVar('DEPLOY_DIR_IMAGE', True),
64 'hpe-section'),
65 int(d.getVar('FLASH_SECTION_OFFSET', True)),
66 int(d.getVar('FLASH_SECTION_END', True)))
67}
68
69do_generate_hpe_image() {
70 # Extract uboot 256K
71 dd if=/dev/zero bs=1k count=256 > ${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX}
72 dd bs=1k conv=notrunc seek=0 count=256\
73 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
74 of=${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX}
75
76 # Sign uboot 256K
77 openssl sha256 -sign ${DEPLOY_DIR_IMAGE}/${HPE_UBOOT_SIGNING_KEY} -out ${DEPLOY_DIR_IMAGE}/gxp_tmp.sig \
78 ${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX}
79
80 # Expand (header+signature) to 4K
81 cat ${DEPLOY_DIR_IMAGE}/${HPE_UBOOT_SIGNING_HEADER} ${DEPLOY_DIR_IMAGE}/gxp_tmp.sig \
82 > ${DEPLOY_DIR_IMAGE}/gxp.sig
83
84 # Add Header and Signature to hpe-section (from 60K)
85 dd bs=1k conv=notrunc seek=60 \
86 if=${DEPLOY_DIR_IMAGE}/gxp.sig \
87 of=${DEPLOY_DIR_IMAGE}/hpe-section
88
89 # Add ubb to hpe-section
90 dd bs=1k conv=notrunc seek=64 \
91 if=${DEPLOY_DIR_IMAGE}/${HPE_GXP_BOOTBLOCK_IMAGE} \
92 of=${DEPLOY_DIR_IMAGE}/hpe-section
93
94 # Expand uboot to 384K
95 dd if=/dev/zero bs=1k count=384 > ${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX}
96 dd bs=1k conv=notrunc seek=0 count=384\
97 if=${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
98 of=${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX}
99
100 # Remove unnecessary files
101 rm ${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX} \
102 ${DEPLOY_DIR_IMAGE}/gxp_tmp.sig \
103 ${DEPLOY_DIR_IMAGE}/gxp.sig
104
105 mv ${DEPLOY_DIR_IMAGE}/u-boot-tmp.${UBOOT_SUFFIX} ${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX}
106
107 # Check uboot image size equals to 384K
108 size="$(wc -c < "${DEPLOY_DIR_IMAGE}/u-boot.${UBOOT_SUFFIX}")"
109 if [ ${size} -ne ${UBOOT_IMG_SIZE} ]
110 then
111 echo "ERROR: STATIC - uBoot image size ${size} incorrect. Please try it again."
112 exit 1
113 fi
114}
115
116make_tar_of_images() {
117 type=$1
118 shift
119 extra_files="$@"
120
121 # Create the tar archive
122 tar -h -cvf ${IMGDEPLOYDIR}/${IMAGE_NAME}.$type.mtd.tar \
123 image-u-boot image-kernel image-rofs image-rwfs image-section $extra_files
124
125 cd ${IMGDEPLOYDIR}
126 ln -sf ${IMAGE_NAME}.$type.mtd.tar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.$type.mtd.tar
127}
128
129do_generate_static_tar[depends] += " obmc-phosphor-image:do_generate_static"
130
131do_generate_static_tar() {
132
133 ln -sf ${S}/MANIFEST MANIFEST
134 ln -sf ${S}/publickey publickey
135 make_image_links ${OVERLAY_BASETYPE} ${IMAGE_BASETYPE}
136
137 # Check uboot image size equals to 384K
138 size="$(wc -c < "image-u-boot")"
139 if [ ${size} != ${UBOOT_IMG_SIZE} ]
140 then
141 echo "ERROR: TAR - uBoot image size ${size} incorrect. Please try it again."
142 exit 1
143 fi
144
145 make_signatures image-u-boot image-kernel image-rofs image-rwfs image-section MANIFEST publickey
146 make_tar_of_images static MANIFEST publickey ${signature_files}
147
148 # Maintain non-standard legacy link.
149 cd ${IMGDEPLOYDIR}
150 ln -sf ${IMAGE_NAME}.static.mtd.tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar
151}