blob: 443c27131c1af68ff3cef2d89db00dacb296695f [file] [log] [blame]
Brad Bishopaf6768d2017-07-24 15:05:05 -04001# Constructs a bootable, fixed-offset mtd image with u-boot
2# bootloader, kernel fitimage, read only root filesystem,
3# and writeable overlay filesystem.
4
Milton D. Miller II270cbb82016-01-20 15:36:27 -06005IMAGE_BASETYPE ?= "squashfs-xz"
Andrew Jeffery9fa01292016-02-23 23:46:58 +10306OVERLAY_BASETYPE ?= "jffs2"
Milton D. Miller II270cbb82016-01-20 15:36:27 -06007
Brad Bishopc5361472016-02-29 10:21:51 -05008IMAGE_TYPES += "overlay"
Milton D. Miller II270cbb82016-01-20 15:36:27 -06009
Brad Bishopc5361472016-02-29 10:21:51 -050010IMAGE_TYPEDEP_overlay = "${IMAGE_BASETYPE}"
Milton D. Miller II270cbb82016-01-20 15:36:27 -060011IMAGE_TYPES_MASKED += "overlay"
12
Rick Altherrc919f532017-01-11 17:33:47 -080013FLASH_KERNEL_IMAGE ?= "fitImage-${INITRAMFS_IMAGE}-${MACHINE}.bin"
Rick Altherr0e7e7092017-01-04 17:25:18 -080014
15FLASH_UBOOT_OFFSET ?= "0"
16FLASH_KERNEL_OFFSET ?= "512"
Rick Altherr0e7e7092017-01-04 17:25:18 -080017FLASH_ROFS_OFFSET ?= "4864"
18FLASH_RWFS_OFFSET ?= "28672"
19RWFS_SIZE ?= "4096"
20
21# Allow rwfs mkfs configuration through OVERLAY_MKFS_OPTS and OVERRIDES. However,
22# avoid setting 'ext4' or 'jffs2' in OVERRIDES as such raw filesystem types are
23# reserved for the primary image (and setting them currently breaks the build).
24# Instead, prefix the overlay override value with 'rwfs-' to avoid collisions.
25DISTROOVERRIDES .= ":rwfs-${OVERLAY_BASETYPE}"
26
27OVERLAY_MKFS_OPTS_rwfs-ext4 = "-b 4096 -F -O^huge_file"
28
29# $(( ${FLASH_SIZE} - ${FLASH_RWFS_OFFSET} ))
30
31mk_nor_image() {
Brad Bishop30304a52017-07-22 14:20:20 -040032 image_dst="$1"
33 image_size_kb=$2
34 dd if=/dev/zero bs=1k count=$image_size_kb \
35 | tr '\000' '\377' > $image_dst
Rick Altherr0e7e7092017-01-04 17:25:18 -080036}
37
38do_generate_flash() {
Brad Bishopaf6768d2017-07-24 15:05:05 -040039 ddir="${IMGDEPLOYDIR}"
Brad Bishop30304a52017-07-22 14:20:20 -040040 kernel="${FLASH_KERNEL_IMAGE}"
41 uboot="u-boot.${UBOOT_SUFFIX}"
42 rootfs="${IMAGE_LINK_NAME}.${IMAGE_BASETYPE}"
43 rwfs="rwfs.${OVERLAY_BASETYPE}"
Rick Altherr0e7e7092017-01-04 17:25:18 -080044
Brad Bishopaf6768d2017-07-24 15:05:05 -040045 flash="${IMAGE_NAME}.overlay"
Rick Altherr0e7e7092017-01-04 17:25:18 -080046
Brad Bishopaf6768d2017-07-24 15:05:05 -040047 mk_nor_image ${S}/$rwfs ${RWFS_SIZE}
Brad Bishop30304a52017-07-22 14:20:20 -040048 if [ "${OVERLAY_BASETYPE}" != jffs2 ]; then
Brad Bishopaf6768d2017-07-24 15:05:05 -040049 mkfs.${OVERLAY_BASETYPE} ${OVERLAY_MKFS_OPTS} ${S}/$rwfs || \
Brad Bishop30304a52017-07-22 14:20:20 -040050 bbfatal "mkfs rwfs"
51 fi
Rick Altherr0e7e7092017-01-04 17:25:18 -080052
Brad Bishopaf6768d2017-07-24 15:05:05 -040053 # Assemble the flash image
54 dst="$ddir/$flash"
Brad Bishop30304a52017-07-22 14:20:20 -040055 mk_nor_image $dst ${FLASH_SIZE}
Brad Bishopaf6768d2017-07-24 15:05:05 -040056 dd if=${DEPLOY_DIR_IMAGE}/$uboot of=$dst bs=1k conv=notrunc seek=${FLASH_UBOOT_OFFSET}
57 dd if=${DEPLOY_DIR_IMAGE}/$kernel of=$dst bs=1k conv=notrunc seek=${FLASH_KERNEL_OFFSET}
Brad Bishop30304a52017-07-22 14:20:20 -040058 dd if=$ddir/$rootfs of=$dst bs=1k conv=notrunc seek=${FLASH_ROFS_OFFSET}
Brad Bishopaf6768d2017-07-24 15:05:05 -040059 dd if=${S}/$rwfs of=$dst bs=1k conv=notrunc seek=${FLASH_RWFS_OFFSET}
Rick Altherr0e7e7092017-01-04 17:25:18 -080060
Brad Bishopaf6768d2017-07-24 15:05:05 -040061 cd ${IMGDEPLOYDIR}
62 ln -sf $flash ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.overlay
Rick Altherr0e7e7092017-01-04 17:25:18 -080063
Brad Bishopaf6768d2017-07-24 15:05:05 -040064 # Maintain a number of non-standard name legacy links.
65 ln -sf $flash ${IMGDEPLOYDIR}/flash-${MACHINE}
Adriana Kobylak59d3ea22017-08-08 11:44:16 -050066 ln -sf $flash ${IMGDEPLOYDIR}/image-bmc
67 ln -sf $uboot ${IMGDEPLOYDIR}/image-u-boot
68 ln -sf $kernel ${IMGDEPLOYDIR}/image-kernel
69 ln -sf $rootfs ${IMGDEPLOYDIR}/image-rofs
70 cp ${S}/$rwfs ${IMGDEPLOYDIR}/$rwfs
71 ln -sf $rwfs ${IMGDEPLOYDIR}/image-rwfs
Rick Altherr0e7e7092017-01-04 17:25:18 -080072}
Rick Altherr0e7e7092017-01-04 17:25:18 -080073
Brad Bishop027f16b2017-07-24 20:51:51 -040074make_overlay_tars() {
Brad Bishopaf6768d2017-07-24 15:05:05 -040075 ddir="${IMGDEPLOYDIR}"
76 kernel="${FLASH_KERNEL_IMAGE}"
77 uboot="u-boot.${UBOOT_SUFFIX}"
78 rootfs="${IMAGE_LINK_NAME}.${IMAGE_BASETYPE}"
79 rwfs="rwfs.${OVERLAY_BASETYPE}"
Milton D. Miller II270cbb82016-01-20 15:36:27 -060080
Brad Bishopaf6768d2017-07-24 15:05:05 -040081 flash="${IMAGE_NAME}.overlay"
82 alltar="${IMAGE_NAME}.all.tar"
83 tar="${IMAGE_NAME}.tar"
84
85 # Create some links to help make the tar archives
86 ln -sf $ddir/${IMAGE_LINK_NAME}.overlay ${S}/image-bmc
87 ln -sf ${DEPLOY_DIR_IMAGE}/$uboot ${S}/image-u-boot
88 ln -sf ${DEPLOY_DIR_IMAGE}/$kernel ${S}/image-kernel
89 ln -sf $ddir/$rootfs ${S}/image-rofs
90 ln -sf $rwfs ${S}/image-rwfs
91
92 # Create the tar archives
Brad Bishop027f16b2017-07-24 20:51:51 -040093 tar -h -cvf $ddir/$alltar -C ${S} image-bmc MANIFEST
94 tar -h -cvf $ddir/$tar -C ${S} image-u-boot image-kernel image-rofs image-rwfs MANIFEST
Brad Bishopaf6768d2017-07-24 15:05:05 -040095
96 cd ${IMGDEPLOYDIR}
97 ln -sf $alltar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.all.tar
98 ln -sf $tar ${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.tar
99
100 # Maintain a number of non-standard name legacy links.
101 ln -sf $tar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.tar
102 ln -sf $alltar ${IMGDEPLOYDIR}/${MACHINE}-${DATETIME}.all.tar
103}
104
Brad Bishop027f16b2017-07-24 20:51:51 -0400105make_overlay_tars[vardepsexclude] = "DATETIME"
106
107def generate_manifest(d):
108 import configparser
109 import io
110 path = d.getVar('STAGING_DIR_HOST', True) + d.getVar('sysconfdir', True)
111 path = os.path.join(path, 'os-release')
112 parser = configparser.SafeConfigParser(strict=False)
113 parser.optionxform = str
114 version = ''
115 with open(path, 'r') as fd:
116 buf = '[root]\n' + fd.read()
117 fd = io.StringIO(buf)
118 parser.readfp(fd)
119 version = parser['root']['VERSION_ID']
120
121 with open(os.path.join(d.getVar('S', True), 'MANIFEST'), 'w') as fd:
122 fd.write('purpose=xyz.openbmc_project.Software.Version.VersionPurpose.BMC\n')
123 fd.write('version={}\n'.format(version.strip('"')))
124
125
126python do_generate_tars() {
127 generate_manifest(d)
128 bb.build.exec_func('make_overlay_tars', d)
129}
130
Brad Bishopaf6768d2017-07-24 15:05:05 -0400131
132do_generate_flash[depends] += " \
133 ${PN}:do_image_${@d.getVar('IMAGE_BASETYPE', True).replace('-', '_')} \
134 virtual/kernel:do_deploy \
135 u-boot:do_populate_sysroot \
136 "
137
138do_generate_tars[depends] += " \
139 ${PN}:do_generate_flash \
Brad Bishop027f16b2017-07-24 20:51:51 -0400140 os-release:do_populate_sysroot \
Brad Bishopaf6768d2017-07-24 15:05:05 -0400141 "
142
143addtask generate_flash before do_image_complete
144addtask generate_tars before do_image_complete