fs/xfs: add support for generating a xfs image

mkfs.xfs is able to populate a filesystem from a directory since
upstream commit [1], included since v6.17.

With this option, it is now possible to create XFS rootfs in
Buildroot. This commit adds this new feature.

[1] https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/commit/?id=8a4ea72724930cfe262ccda03028264e1a81b145

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Romain Naour <romain.naour@smile.fr>
This commit is contained in:
Julien Olivain
2026-03-13 22:50:42 +01:00
committed by Romain Naour
parent 45a74068df
commit ffaccc4ccc
3 changed files with 68 additions and 0 deletions

View File

@@ -15,6 +15,7 @@ source "fs/squashfs/Config.in"
source "fs/tar/Config.in"
source "fs/ubi/Config.in"
source "fs/ubifs/Config.in"
source "fs/xfs/Config.in"
source "fs/yaffs2/Config.in"
endmenu

34
fs/xfs/Config.in Normal file
View File

@@ -0,0 +1,34 @@
config BR2_TARGET_ROOTFS_XFS
bool "xfs root filesystem"
select BR2_PACKAGE_HOST_XFSPROGS
help
Build a xfs root filesystem. If you enable this option, you
probably want to enable the xfsprogs package too.
if BR2_TARGET_ROOTFS_XFS
config BR2_TARGET_ROOTFS_XFS_LABEL
string "filesystem label"
default "rootfs"
config BR2_TARGET_ROOTFS_XFS_SIZE
string "exact size"
default "300M"
help
The size of the filesystem image. This size is passed to the
"truncate -s", so this option recognizes unit suffixes such
as K,M,G (see the manual page truncate(1)). Note the XFS
minimal filesystem size is 300M.
config BR2_TARGET_ROOTFS_XFS_MKFS_OPTIONS
string "additional mkfs.xfs options"
help
Specify a space-separated list of mkfs.xfs options.
For more information about the mke2fs options, see the
manual page mkfs.xfs(8).
For more information about the XFS features which can be
set, see also the manual page xfs(5).
endif # BR2_TARGET_ROOTFS_XFS

33
fs/xfs/xfs.mk Normal file
View File

@@ -0,0 +1,33 @@
################################################################################
#
# Build the xfs root filesystem image
#
################################################################################
ROOTFS_XFS_SIZE = $(call qstrip,$(BR2_TARGET_ROOTFS_XFS_SIZE))
ifeq ($(BR2_TARGET_ROOTFS_XFS)-$(ROOTFS_XFS_SIZE),y-)
$(error BR2_TARGET_ROOTFS_XFS_SIZE cannot be empty)
endif
ROOTFS_XFS_MKFS_OPTS = $(call qstrip,$(BR2_TARGET_ROOTFS_XFS_MKFS_OPTIONS))
# qstrip results in stripping consecutive spaces into a single one. So the
# variable is not qstrip-ed to preserve the integrity of the string value.
ROOTFS_XFS_LABEL = $(subst ",,$(BR2_TARGET_ROOTFS_XFS_LABEL))
#" comment to balance quotes/parenthesis for syntax highlighting)
ROOTFS_XFS_OPTS = \
-f \
-p '$(TARGET_DIR)' \
-L '$(ROOTFS_XFS_LABEL)' \
$(ROOTFS_XFS_MKFS_OPTS)
ROOTFS_XFS_DEPENDENCIES = host-xfsprogs
define ROOTFS_XFS_CMD
$(RM) -f $@
truncate -s $(ROOTFS_XFS_SIZE) $@
$(HOST_DIR)/sbin/mkfs.xfs $(ROOTFS_XFS_OPTS) $@
endef
$(eval $(rootfs))