Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 1 | # IMAGE_NAME is the base name for everything produced when building images. |
| 2 | # The actual image that contains the rootfs has an additional suffix (.rootfs |
| 3 | # by default) followed by additional suffices which describe the format (.ext4, |
| 4 | # .ext4.xz, etc.). |
| 5 | IMAGE_NAME_SUFFIX ??= ".rootfs" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 6 | |
| 7 | # The default aligment of the size of the rootfs is set to 1KiB. In case |
| 8 | # you're using the SD card emulation of a QEMU system simulator you may |
| 9 | # set this value to 2048 (2MiB alignment). |
| 10 | IMAGE_ROOTFS_ALIGNMENT ?= "1" |
| 11 | |
| 12 | def imagetypes_getdepends(d): |
| 13 | def adddep(depstr, deps): |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 14 | for d in (depstr or "").split(): |
| 15 | # Add task dependency if not already present |
| 16 | if ":" not in d: |
| 17 | d += ":do_populate_sysroot" |
| 18 | deps.add(d) |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 19 | |
Brad Bishop | 37a0e4d | 2017-12-04 01:01:44 -0500 | [diff] [blame] | 20 | # Take a type in the form of foo.bar.car and split it into the items |
| 21 | # needed for the image deps "foo", and the conversion deps ["bar", "car"] |
| 22 | def split_types(typestring): |
| 23 | types = typestring.split(".") |
| 24 | return types[0], types[1:] |
| 25 | |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 26 | fstypes = set((d.getVar('IMAGE_FSTYPES') or "").split()) |
| 27 | fstypes |= set((d.getVar('IMAGE_FSTYPES_DEBUGFS') or "").split()) |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 28 | |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 29 | deprecated = set() |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 30 | deps = set() |
| 31 | for typestring in fstypes: |
Brad Bishop | 37a0e4d | 2017-12-04 01:01:44 -0500 | [diff] [blame] | 32 | basetype, resttypes = split_types(typestring) |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 33 | |
| 34 | var = "IMAGE_DEPENDS_%s" % basetype |
| 35 | if d.getVar(var) is not None: |
| 36 | deprecated.add(var) |
Brad Bishop | 37a0e4d | 2017-12-04 01:01:44 -0500 | [diff] [blame] | 37 | |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 38 | for typedepends in (d.getVar("IMAGE_TYPEDEP_%s" % basetype) or "").split(): |
Brad Bishop | 37a0e4d | 2017-12-04 01:01:44 -0500 | [diff] [blame] | 39 | base, rest = split_types(typedepends) |
Brad Bishop | 37a0e4d | 2017-12-04 01:01:44 -0500 | [diff] [blame] | 40 | resttypes += rest |
| 41 | |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 42 | var = "IMAGE_DEPENDS_%s" % base |
| 43 | if d.getVar(var) is not None: |
| 44 | deprecated.add(var) |
| 45 | |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 46 | for ctype in resttypes: |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 47 | adddep(d.getVar("CONVERSION_DEPENDS_%s" % ctype), deps) |
| 48 | adddep(d.getVar("COMPRESS_DEPENDS_%s" % ctype), deps) |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 49 | |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 50 | if deprecated: |
| 51 | bb.fatal('Deprecated variable(s) found: "%s". ' |
| 52 | 'Use do_image_<type>[depends] += "<recipe>:<task>" instead' % ', '.join(deprecated)) |
| 53 | |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 54 | # Sort the set so that ordering is consistant |
| 55 | return " ".join(sorted(deps)) |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 56 | |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 57 | XZ_COMPRESSION_LEVEL ?= "-3" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 58 | XZ_INTEGRITY_CHECK ?= "crc32" |
| 59 | XZ_THREADS ?= "-T 0" |
| 60 | |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 61 | ZIP_COMPRESSION_LEVEL ?= "-9" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 62 | |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 63 | JFFS2_SUM_EXTRA_ARGS ?= "" |
| 64 | IMAGE_CMD_jffs2 = "mkfs.jffs2 --root=${IMAGE_ROOTFS} --faketime --output=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.jffs2 ${EXTRA_IMAGECMD}" |
| 65 | |
| 66 | IMAGE_CMD_cramfs = "mkfs.cramfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.cramfs ${EXTRA_IMAGECMD}" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 67 | |
| 68 | oe_mkext234fs () { |
| 69 | fstype=$1 |
| 70 | extra_imagecmd="" |
| 71 | |
| 72 | if [ $# -gt 1 ]; then |
| 73 | shift |
| 74 | extra_imagecmd=$@ |
| 75 | fi |
| 76 | |
| 77 | # If generating an empty image the size of the sparse block should be large |
| 78 | # enough to allocate an ext4 filesystem using 4096 bytes per inode, this is |
| 79 | # about 60K, so dd needs a minimum count of 60, with bs=1024 (bytes per IO) |
| 80 | eval local COUNT=\"0\" |
| 81 | eval local MIN_COUNT=\"60\" |
| 82 | if [ $ROOTFS_SIZE -lt $MIN_COUNT ]; then |
| 83 | eval COUNT=\"$MIN_COUNT\" |
| 84 | fi |
| 85 | # Create a sparse image block |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 86 | bbdebug 1 Executing "dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype seek=$ROOTFS_SIZE count=$COUNT bs=1024" |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 87 | dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype seek=$ROOTFS_SIZE count=$COUNT bs=1024 |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 88 | bbdebug 1 "Actual Rootfs size: `du -s ${IMAGE_ROOTFS}`" |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 89 | bbdebug 1 "Actual Partion size: `stat -c '%s' ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype`" |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 90 | bbdebug 1 Executing "mkfs.$fstype -F $extra_imagecmd ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype -d ${IMAGE_ROOTFS}" |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 91 | mkfs.$fstype -F $extra_imagecmd ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype -d ${IMAGE_ROOTFS} |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 92 | # Error codes 0-3 indicate successfull operation of fsck (no errors or errors corrected) |
| 93 | fsck.$fstype -pvfD ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.$fstype || [ $? -le 3 ] |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 94 | } |
| 95 | |
| 96 | IMAGE_CMD_ext2 = "oe_mkext234fs ext2 ${EXTRA_IMAGECMD}" |
| 97 | IMAGE_CMD_ext3 = "oe_mkext234fs ext3 ${EXTRA_IMAGECMD}" |
| 98 | IMAGE_CMD_ext4 = "oe_mkext234fs ext4 ${EXTRA_IMAGECMD}" |
| 99 | |
| 100 | MIN_BTRFS_SIZE ?= "16384" |
| 101 | IMAGE_CMD_btrfs () { |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 102 | size=${ROOTFS_SIZE} |
| 103 | if [ ${size} -lt ${MIN_BTRFS_SIZE} ] ; then |
| 104 | size=${MIN_BTRFS_SIZE} |
| 105 | bbwarn "Rootfs size is too small for BTRFS. Filesystem will be extended to ${size}K" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 106 | fi |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 107 | dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.btrfs seek=${size} count=0 bs=1024 |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 108 | mkfs.btrfs ${EXTRA_IMAGECMD} -r ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.btrfs |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 109 | } |
| 110 | |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 111 | IMAGE_CMD_squashfs = "mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.squashfs ${EXTRA_IMAGECMD} -noappend" |
| 112 | IMAGE_CMD_squashfs-xz = "mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.squashfs-xz ${EXTRA_IMAGECMD} -noappend -comp xz" |
| 113 | IMAGE_CMD_squashfs-lzo = "mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.squashfs-lzo ${EXTRA_IMAGECMD} -noappend -comp lzo" |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 114 | IMAGE_CMD_squashfs-lz4 = "mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.squashfs-lz4 ${EXTRA_IMAGECMD} -noappend -comp lz4" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 115 | |
| 116 | # By default, tar from the host is used, which can be quite old. If |
| 117 | # you need special parameters (like --xattrs) which are only supported |
| 118 | # by GNU tar upstream >= 1.27, then override that default: |
| 119 | # IMAGE_CMD_TAR = "tar --xattrs --xattrs-include=*" |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 120 | # do_image_tar[depends] += "tar-replacement-native:do_populate_sysroot" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 121 | # EXTRANATIVEPATH += "tar-native" |
| 122 | # |
| 123 | # The GNU documentation does not specify whether --xattrs-include is necessary. |
| 124 | # In practice, it turned out to be not needed when creating archives and |
| 125 | # required when extracting, but it seems prudent to use it in both cases. |
| 126 | IMAGE_CMD_TAR ?= "tar" |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 127 | # ignore return code 1 "file changed as we read it" as other tasks(e.g. do_image_wic) may be hardlinking rootfs |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 128 | IMAGE_CMD_tar = "${IMAGE_CMD_TAR} --numeric-owner -cf ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.tar -C ${IMAGE_ROOTFS} . || [ $? -eq 1 ]" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 129 | |
Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 130 | do_image_cpio[cleandirs] += "${WORKDIR}/cpio_append" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 131 | IMAGE_CMD_cpio () { |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 132 | (cd ${IMAGE_ROOTFS} && find . | cpio -o -H newc >${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.cpio) |
| 133 | # We only need the /init symlink if we're building the real |
| 134 | # image. The -dbg image doesn't need it! By being clever |
| 135 | # about this we also avoid 'touch' below failing, as it |
| 136 | # might be trying to touch /sbin/init on the host since both |
| 137 | # the normal and the -dbg image share the same WORKDIR |
| 138 | if [ "${IMAGE_BUILDING_DEBUGFS}" != "true" ]; then |
| 139 | if [ ! -L ${IMAGE_ROOTFS}/init ] && [ ! -e ${IMAGE_ROOTFS}/init ]; then |
| 140 | if [ -L ${IMAGE_ROOTFS}/sbin/init ] || [ -e ${IMAGE_ROOTFS}/sbin/init ]; then |
| 141 | ln -sf /sbin/init ${WORKDIR}/cpio_append/init |
| 142 | else |
| 143 | touch ${WORKDIR}/cpio_append/init |
| 144 | fi |
| 145 | (cd ${WORKDIR}/cpio_append && echo ./init | cpio -oA -H newc -F ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.cpio) |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 146 | fi |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 147 | fi |
| 148 | } |
| 149 | |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 150 | UBI_VOLNAME ?= "${MACHINE}-rootfs" |
| 151 | |
| 152 | multiubi_mkfs() { |
| 153 | local mkubifs_args="$1" |
| 154 | local ubinize_args="$2" |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 155 | |
| 156 | # Added prompt error message for ubi and ubifs image creation. |
| 157 | if [ -z "$mkubifs_args"] || [ -z "$ubinize_args" ]; then |
| 158 | bbfatal "MKUBIFS_ARGS and UBINIZE_ARGS have to be set, see http://www.linux-mtd.infradead.org/faq/ubifs.html for details" |
| 159 | fi |
| 160 | |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 161 | if [ -z "$3" ]; then |
| 162 | local vname="" |
| 163 | else |
| 164 | local vname="_$3" |
| 165 | fi |
| 166 | |
Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 167 | echo \[ubifs\] > ubinize${vname}-${IMAGE_NAME}.cfg |
| 168 | echo mode=ubi >> ubinize${vname}-${IMAGE_NAME}.cfg |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 169 | echo image=${IMGDEPLOYDIR}/${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubifs >> ubinize${vname}-${IMAGE_NAME}.cfg |
Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 170 | echo vol_id=0 >> ubinize${vname}-${IMAGE_NAME}.cfg |
| 171 | echo vol_type=dynamic >> ubinize${vname}-${IMAGE_NAME}.cfg |
| 172 | echo vol_name=${UBI_VOLNAME} >> ubinize${vname}-${IMAGE_NAME}.cfg |
| 173 | echo vol_flags=autoresize >> ubinize${vname}-${IMAGE_NAME}.cfg |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 174 | mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${IMGDEPLOYDIR}/${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubifs ${mkubifs_args} |
| 175 | ubinize -o ${IMGDEPLOYDIR}/${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubi ${ubinize_args} ubinize${vname}-${IMAGE_NAME}.cfg |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 176 | |
| 177 | # Cleanup cfg file |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 178 | mv ubinize${vname}-${IMAGE_NAME}.cfg ${IMGDEPLOYDIR}/ |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 179 | |
Patrick Williams | f1e5d69 | 2016-03-30 15:21:19 -0500 | [diff] [blame] | 180 | # Create own symlinks for 'named' volumes |
| 181 | if [ -n "$vname" ]; then |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 182 | cd ${IMGDEPLOYDIR} |
Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 183 | if [ -e ${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubifs ]; then |
| 184 | ln -sf ${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubifs \ |
Patrick Williams | f1e5d69 | 2016-03-30 15:21:19 -0500 | [diff] [blame] | 185 | ${IMAGE_LINK_NAME}${vname}.ubifs |
| 186 | fi |
Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 187 | if [ -e ${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubi ]; then |
| 188 | ln -sf ${IMAGE_NAME}${vname}${IMAGE_NAME_SUFFIX}.ubi \ |
Patrick Williams | f1e5d69 | 2016-03-30 15:21:19 -0500 | [diff] [blame] | 189 | ${IMAGE_LINK_NAME}${vname}.ubi |
| 190 | fi |
| 191 | cd - |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 192 | fi |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 193 | } |
| 194 | |
| 195 | IMAGE_CMD_multiubi () { |
| 196 | # Split MKUBIFS_ARGS_<name> and UBINIZE_ARGS_<name> |
| 197 | for name in ${MULTIUBI_BUILD}; do |
| 198 | eval local mkubifs_args=\"\$MKUBIFS_ARGS_${name}\" |
| 199 | eval local ubinize_args=\"\$UBINIZE_ARGS_${name}\" |
| 200 | |
| 201 | multiubi_mkfs "${mkubifs_args}" "${ubinize_args}" "${name}" |
| 202 | done |
| 203 | } |
| 204 | |
| 205 | IMAGE_CMD_ubi () { |
| 206 | multiubi_mkfs "${MKUBIFS_ARGS}" "${UBINIZE_ARGS}" |
| 207 | } |
| 208 | |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 209 | IMAGE_CMD_ubifs = "mkfs.ubifs -r ${IMAGE_ROOTFS} -o ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.ubifs ${MKUBIFS_ARGS}" |
Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 210 | |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 211 | MIN_F2FS_SIZE ?= "524288" |
| 212 | IMAGE_CMD_f2fs () { |
| 213 | # We need to add additional smarts here form devices smaller than 1.5G |
| 214 | # Need to scale appropriately between 40M -> 1.5G as the "overprovision |
| 215 | # ratio" goes down as the device gets bigger (70% -> 4.5%), below about |
| 216 | # 500M the standard IMAGE_OVERHEAD_FACTOR does not work, so add additional |
| 217 | # space here when under 500M |
| 218 | size=${ROOTFS_SIZE} |
| 219 | if [ ${size} -lt ${MIN_F2FS_SIZE} ] ; then |
| 220 | size=${MIN_F2FS_SIZE} |
| 221 | bbwarn "Rootfs size is too small for F2FS. Filesystem will be extended to ${size}K" |
| 222 | fi |
| 223 | dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.f2fs seek=${size} count=0 bs=1024 |
| 224 | mkfs.f2fs ${EXTRA_IMAGECMD} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.f2fs |
| 225 | sload.f2fs -f ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.f2fs |
| 226 | } |
| 227 | |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 228 | EXTRA_IMAGECMD = "" |
| 229 | |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 230 | inherit siteinfo kernel-arch |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 231 | JFFS2_ENDIANNESS ?= "${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', '-l', '-b', d)}" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 232 | JFFS2_ERASEBLOCK ?= "0x40000" |
| 233 | EXTRA_IMAGECMD_jffs2 ?= "--pad ${JFFS2_ENDIANNESS} --eraseblock=${JFFS2_ERASEBLOCK} --no-cleanmarkers" |
| 234 | |
| 235 | # Change these if you want default mkfs behavior (i.e. create minimal inode number) |
| 236 | EXTRA_IMAGECMD_ext2 ?= "-i 4096" |
| 237 | EXTRA_IMAGECMD_ext3 ?= "-i 4096" |
| 238 | EXTRA_IMAGECMD_ext4 ?= "-i 4096" |
Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 239 | EXTRA_IMAGECMD_btrfs ?= "-n 4096" |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 240 | EXTRA_IMAGECMD_f2fs ?= "" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 241 | |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 242 | do_image_jffs2[depends] += "mtd-utils-native:do_populate_sysroot" |
| 243 | do_image_cramfs[depends] += "util-linux-native:do_populate_sysroot" |
| 244 | do_image_ext2[depends] += "e2fsprogs-native:do_populate_sysroot" |
| 245 | do_image_ext3[depends] += "e2fsprogs-native:do_populate_sysroot" |
| 246 | do_image_ext4[depends] += "e2fsprogs-native:do_populate_sysroot" |
| 247 | do_image_btrfs[depends] += "btrfs-tools-native:do_populate_sysroot" |
| 248 | do_image_squashfs[depends] += "squashfs-tools-native:do_populate_sysroot" |
| 249 | do_image_squashfs_xz[depends] += "squashfs-tools-native:do_populate_sysroot" |
| 250 | do_image_squashfs_lzo[depends] += "squashfs-tools-native:do_populate_sysroot" |
| 251 | do_image_squashfs_lz4[depends] += "squashfs-tools-native:do_populate_sysroot" |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 252 | do_image_ubi[depends] += "mtd-utils-native:do_populate_sysroot" |
| 253 | do_image_ubifs[depends] += "mtd-utils-native:do_populate_sysroot" |
| 254 | do_image_multiubi[depends] += "mtd-utils-native:do_populate_sysroot" |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 255 | do_image_f2fs[depends] += "f2fs-tools-native:do_populate_sysroot" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 256 | |
| 257 | # This variable is available to request which values are suitable for IMAGE_FSTYPES |
| 258 | IMAGE_TYPES = " \ |
| 259 | jffs2 jffs2.sum \ |
| 260 | cramfs \ |
| 261 | ext2 ext2.gz ext2.bz2 ext2.lzma \ |
| 262 | ext3 ext3.gz \ |
| 263 | ext4 ext4.gz \ |
| 264 | btrfs \ |
| 265 | iso \ |
| 266 | hddimg \ |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 267 | squashfs squashfs-xz squashfs-lzo squashfs-lz4 \ |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 268 | ubi ubifs multiubi \ |
| 269 | tar tar.gz tar.bz2 tar.xz tar.lz4 \ |
| 270 | cpio cpio.gz cpio.xz cpio.lzma cpio.lz4 \ |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 271 | wic wic.gz wic.bz2 wic.lzma \ |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 272 | container \ |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 273 | f2fs \ |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 274 | " |
| 275 | |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 276 | # Compression is a special case of conversion. The old variable |
| 277 | # names are still supported for backward-compatibility. When defining |
| 278 | # new compression or conversion commands, use CONVERSIONTYPES and |
| 279 | # CONVERSION_CMD/DEPENDS. |
| 280 | COMPRESSIONTYPES ?= "" |
| 281 | |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 282 | CONVERSIONTYPES = "gz bz2 lzma xz lz4 lzo zip sum md5sum sha1sum sha224sum sha256sum sha384sum sha512sum bmap u-boot vmdk vdi qcow2 ${COMPRESSIONTYPES}" |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 283 | CONVERSION_CMD_lzma = "lzma -k -f -7 ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}" |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 284 | CONVERSION_CMD_gz = "pigz -f -9 -n -c ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.gz" |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 285 | CONVERSION_CMD_bz2 = "pbzip2 -f -k ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}" |
| 286 | CONVERSION_CMD_xz = "xz -f -k -c ${XZ_COMPRESSION_LEVEL} ${XZ_THREADS} --check=${XZ_INTEGRITY_CHECK} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.xz" |
Brad Bishop | 316dfdd | 2018-06-25 12:45:53 -0400 | [diff] [blame] | 287 | CONVERSION_CMD_lz4 = "lz4 -9 -z -l ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.lz4" |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 288 | CONVERSION_CMD_lzo = "lzop -9 ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}" |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 289 | CONVERSION_CMD_zip = "zip ${ZIP_COMPRESSION_LEVEL} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.zip ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}" |
| 290 | CONVERSION_CMD_sum = "sumtool -i ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} -o ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sum ${JFFS2_SUM_EXTRA_ARGS}" |
| 291 | CONVERSION_CMD_md5sum = "md5sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.md5sum" |
| 292 | CONVERSION_CMD_sha1sum = "sha1sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sha1sum" |
| 293 | CONVERSION_CMD_sha224sum = "sha224sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sha224sum" |
| 294 | CONVERSION_CMD_sha256sum = "sha256sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sha256sum" |
| 295 | CONVERSION_CMD_sha384sum = "sha384sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sha384sum" |
| 296 | CONVERSION_CMD_sha512sum = "sha512sum ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} > ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.sha512sum" |
| 297 | CONVERSION_CMD_bmap = "bmaptool create ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} -o ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.bmap" |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 298 | CONVERSION_CMD_u-boot = "mkimage -A ${UBOOT_ARCH} -O linux -T ramdisk -C none -n ${IMAGE_NAME} -d ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.u-boot" |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 299 | CONVERSION_CMD_vmdk = "qemu-img convert -O vmdk ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.vmdk" |
| 300 | CONVERSION_CMD_vdi = "qemu-img convert -O vdi ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.vdi" |
| 301 | CONVERSION_CMD_qcow2 = "qemu-img convert -O qcow2 ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type} ${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${type}.qcow2" |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 302 | CONVERSION_DEPENDS_lzma = "xz-native" |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 303 | CONVERSION_DEPENDS_gz = "pigz-native" |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 304 | CONVERSION_DEPENDS_bz2 = "pbzip2-native" |
| 305 | CONVERSION_DEPENDS_xz = "xz-native" |
| 306 | CONVERSION_DEPENDS_lz4 = "lz4-native" |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 307 | CONVERSION_DEPENDS_lzo = "lzop-native" |
Patrick Williams | c0f7c04 | 2017-02-23 20:41:17 -0600 | [diff] [blame] | 308 | CONVERSION_DEPENDS_zip = "zip-native" |
| 309 | CONVERSION_DEPENDS_sum = "mtd-utils-native" |
| 310 | CONVERSION_DEPENDS_bmap = "bmap-tools-native" |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 311 | CONVERSION_DEPENDS_u-boot = "u-boot-mkimage-native" |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 312 | CONVERSION_DEPENDS_vmdk = "qemu-native" |
| 313 | CONVERSION_DEPENDS_vdi = "qemu-native" |
| 314 | CONVERSION_DEPENDS_qcow2 = "qemu-native" |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 315 | |
| 316 | RUNNABLE_IMAGE_TYPES ?= "ext2 ext3 ext4" |
| 317 | RUNNABLE_MACHINE_PATTERNS ?= "qemu" |
| 318 | |
| 319 | DEPLOYABLE_IMAGE_TYPES ?= "hddimg iso" |
| 320 | |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 321 | # The IMAGE_TYPES_MASKED variable will be used to mask out from the IMAGE_FSTYPES, |
Patrick Williams | f1e5d69 | 2016-03-30 15:21:19 -0500 | [diff] [blame] | 322 | # images that will not be built at do_rootfs time: vmdk, vdi, qcow2, hdddirect, hddimg, iso, etc. |
Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 323 | IMAGE_TYPES_MASKED ?= "" |
Brad Bishop | d7bf8c1 | 2018-02-25 22:55:05 -0500 | [diff] [blame] | 324 | |
| 325 | # bmap requires python3 to be in the PATH |
| 326 | EXTRANATIVEPATH += "${@'python3-native' if d.getVar('IMAGE_FSTYPES').find('.bmap') else ''}" |