mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 12:59:02 +02:00
Add support for erofs filesystems
Since Linux 5.4 a new read-only filesystem is available, erofs. Compared to squashfs it offers much better read performance with and without compression enabled. It suppports two optional compressors, lz4 and lz4hc. >From the mkfs.erofs man page: EROFS is a new enhanced lightweight linux read-only filesystem with modern designs (eg. no buffer head, reduced metadata, inline xattrs/data, etc.) for scenarios which need high-performance read-only requirements, e.g. Android OS for smartphones and LIVECDs. It also provides fixed-sized output compression support, which improves storage density, keeps relatively higher compression ratios, which is more useful to achieve high performance for embedded devices with limited memory since it has unnoticable memory overhead and page cache thrashing. This commit adds support for three new filesystem targets: erofs: erofs without compression erofs-lz4: erofs with lz4 compresssion enabled erofs-lz4hc: erofs with lz4hc compression enabled (From OE-Core rev: 41dead1ff8ccc49e6cd6e6f5d41a59d164693e0d) Signed-off-by: Richard Weinberger <richard@nod.at> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
40d3366bea
commit
63b3c44d27
|
@ -108,6 +108,11 @@ IMAGE_CMD_squashfs-xz = "mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME
|
|||
IMAGE_CMD_squashfs-lzo = "mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.squashfs-lzo ${EXTRA_IMAGECMD} -noappend -comp lzo"
|
||||
IMAGE_CMD_squashfs-lz4 = "mksquashfs ${IMAGE_ROOTFS} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.squashfs-lz4 ${EXTRA_IMAGECMD} -noappend -comp lz4"
|
||||
|
||||
IMAGE_CMD_erofs = "mkfs.erofs ${EXTRA_IMAGECMD} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.erofs ${IMAGE_ROOTFS}"
|
||||
IMAGE_CMD_erofs-lz4 = "mkfs.erofs -zlz4 ${EXTRA_IMAGECMD} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.erofs-lz4 ${IMAGE_ROOTFS}"
|
||||
IMAGE_CMD_erofs-lz4hc = "mkfs.erofs -zlz4hc ${EXTRA_IMAGECMD} ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.erofs-lz4hc ${IMAGE_ROOTFS}"
|
||||
|
||||
|
||||
IMAGE_CMD_TAR ?= "tar"
|
||||
# ignore return code 1 "file changed as we read it" as other tasks(e.g. do_image_wic) may be hardlinking rootfs
|
||||
IMAGE_CMD_tar = "${IMAGE_CMD_TAR} --sort=name --format=posix --numeric-owner -cf ${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.tar -C ${IMAGE_ROOTFS} . || [ $? -eq 1 ]"
|
||||
|
@ -243,6 +248,9 @@ do_image_ubi[depends] += "mtd-utils-native:do_populate_sysroot"
|
|||
do_image_ubifs[depends] += "mtd-utils-native:do_populate_sysroot"
|
||||
do_image_multiubi[depends] += "mtd-utils-native:do_populate_sysroot"
|
||||
do_image_f2fs[depends] += "f2fs-tools-native:do_populate_sysroot"
|
||||
do_image_erofs[depends] += "erofs-utils-native:do_populate_sysroot"
|
||||
do_image_erofs_lz4[depends] += "erofs-utils-native:do_populate_sysroot"
|
||||
do_image_erofs_lz4hc[depends] += "erofs-utils-native:do_populate_sysroot"
|
||||
|
||||
# This variable is available to request which values are suitable for IMAGE_FSTYPES
|
||||
IMAGE_TYPES = " \
|
||||
|
@ -261,6 +269,7 @@ IMAGE_TYPES = " \
|
|||
wic wic.gz wic.bz2 wic.lzma wic.zst \
|
||||
container \
|
||||
f2fs \
|
||||
erofs erofs-lz4 erofs-lz4hc \
|
||||
"
|
||||
|
||||
# Compression is a special case of conversion. The old variable
|
||||
|
|
|
@ -169,6 +169,7 @@ RECIPE_MAINTAINER_pn-ell = "Zang Ruochen <zangrc.fnst@fujitsu.com>"
|
|||
RECIPE_MAINTAINER_pn-enchant2 = "Anuj Mittal <anuj.mittal@intel.com>"
|
||||
RECIPE_MAINTAINER_pn-encodings = "Armin Kuster <akuster808@gmail.com>"
|
||||
RECIPE_MAINTAINER_pn-epiphany = "Alexander Kanavin <alex.kanavin@gmail.com>"
|
||||
RECIPE_MAINTAINER_pn-erofs-utils = "Richard Weinberger <richard@nod.at>"
|
||||
RECIPE_MAINTAINER_pn-ethtool = "Changhyeok Bae <changhyeok.bae@gmail.com>"
|
||||
RECIPE_MAINTAINER_pn-eudev = "Anuj Mittal <anuj.mittal@intel.com>"
|
||||
RECIPE_MAINTAINER_pn-expat = "Yi Zhao <yi.zhao@windriver.com>"
|
||||
|
|
21
meta/recipes-devtools/erofs-utils/erofs-utils_1.2.1.bb
Normal file
21
meta/recipes-devtools/erofs-utils/erofs-utils_1.2.1.bb
Normal file
|
@ -0,0 +1,21 @@
|
|||
SUMMARY = "Tools for erofs filesystems"
|
||||
LICENSE = "GPLv2+"
|
||||
SECTION = "base"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=94fa01670a2a8f2d3ab2de15004e0848"
|
||||
HOMEPAGE = "https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/tree/README"
|
||||
|
||||
SRCREV = "d1f4953edfcf4f51c71ba91586e21fc6ce9f6db9"
|
||||
SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
DEPENDS = "util-linux-libuuid"
|
||||
|
||||
inherit pkgconfig autotools
|
||||
|
||||
PACKAGECONFIG ??= "lz4"
|
||||
PACKAGECONFIG[lz4] = "--enable-lz4,--disable-lz4,lz4"
|
||||
|
||||
EXTRA_OECONF = "${PACKAGECONFIG_CONFARGS} --disable-fuse"
|
||||
|
||||
BBCLASSEXTEND = "native nativesdk"
|
|
@ -930,6 +930,7 @@ DESCRIPTION
|
|||
ext4
|
||||
btrfs
|
||||
squashfs
|
||||
erofs
|
||||
swap
|
||||
|
||||
--fsoptions: Specifies a free-form string of options to be
|
||||
|
|
|
@ -157,7 +157,8 @@ class KickStart():
|
|||
part.add_argument('--fsoptions', dest='fsopts')
|
||||
part.add_argument('--fstype', default='vfat',
|
||||
choices=('ext2', 'ext3', 'ext4', 'btrfs',
|
||||
'squashfs', 'vfat', 'msdos', 'swap'))
|
||||
'squashfs', 'vfat', 'msdos', 'erofs',
|
||||
'swap'))
|
||||
part.add_argument('--mkfs-extraopts', default='')
|
||||
part.add_argument('--label')
|
||||
part.add_argument('--use-label', action='store_true')
|
||||
|
@ -229,6 +230,10 @@ class KickStart():
|
|||
err = "%s:%d: SquashFS does not support LABEL" \
|
||||
% (confpath, lineno)
|
||||
raise KickStartError(err)
|
||||
# erofs does not support filesystem labels
|
||||
if parsed.fstype == 'erofs' and parsed.label:
|
||||
err = "%s:%d: erofs does not support LABEL" % (confpath, lineno)
|
||||
raise KickStartError(err)
|
||||
if parsed.fstype == 'msdos' or parsed.fstype == 'vfat':
|
||||
if parsed.fsuuid:
|
||||
if parsed.fsuuid.upper().startswith('0X'):
|
||||
|
|
|
@ -141,9 +141,9 @@ class Partition():
|
|||
native_sysroot)
|
||||
self.source_file = "%s/fs.%s" % (cr_workdir, self.fstype)
|
||||
else:
|
||||
if self.fstype == 'squashfs':
|
||||
raise WicError("It's not possible to create empty squashfs "
|
||||
"partition '%s'" % (self.mountpoint))
|
||||
if self.fstype in ('squashfs', 'erofs'):
|
||||
raise WicError("It's not possible to create empty %s "
|
||||
"partition '%s'" % (self.fstype, self.mountpoint))
|
||||
|
||||
rootfs = "%s/fs_%s.%s.%s" % (cr_workdir, self.label,
|
||||
self.lineno, self.fstype)
|
||||
|
@ -369,6 +369,16 @@ class Partition():
|
|||
(rootfs_dir, rootfs, extraopts)
|
||||
exec_native_cmd(squashfs_cmd, native_sysroot, pseudo=pseudo)
|
||||
|
||||
def prepare_rootfs_erofs(self, rootfs, cr_workdir, oe_builddir, rootfs_dir,
|
||||
native_sysroot, pseudo):
|
||||
"""
|
||||
Prepare content for a erofs rootfs partition.
|
||||
"""
|
||||
extraopts = self.mkfs_extraopts or ''
|
||||
erofs_cmd = "mkfs.erofs %s -U %s %s %s" % \
|
||||
(extraopts, self.fsuuid, rootfs, rootfs_dir)
|
||||
exec_native_cmd(erofs_cmd, native_sysroot, pseudo=pseudo)
|
||||
|
||||
def prepare_empty_partition_ext(self, rootfs, oe_builddir,
|
||||
native_sysroot):
|
||||
"""
|
||||
|
|
|
@ -29,9 +29,9 @@ class RawCopyPlugin(SourcePlugin):
|
|||
cmd = 'btrfs filesystem label %s %s' % (dst, label)
|
||||
elif fstype == 'swap':
|
||||
cmd = 'mkswap -L %s %s' % (label, dst)
|
||||
elif fstype == 'squashfs':
|
||||
raise WicError("It's not possible to update a squashfs "
|
||||
"filesystem label '%s'" % (label))
|
||||
elif fstype in ('squashfs', 'erofs'):
|
||||
raise WicError("It's not possible to update a %s "
|
||||
"filesystem label '%s'" % (fstype, label))
|
||||
else:
|
||||
raise WicError("Cannot update filesystem label: "
|
||||
"Unknown fstype: '%s'" % (fstype))
|
||||
|
|
Loading…
Reference in New Issue
Block a user