aboutsummaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorGravatar Robert J. Heywood <robert.heywood@codethink.co.uk>2018-08-23 23:01:56 +0100
committerGravatar Thomas Petazzoni <thomas.petazzoni@bootlin.com>2018-08-25 14:30:51 +0200
commit0aade4df1f80d7bff58da2b5d3dfd9d8d6ec4b7d (patch)
treef9514a1af4ffb40136b9078c56f1fca8c749a166 /fs
parent3991499b3f9f4e9263866a31dba7f95d423e0d32 (diff)
downloadbuildroot-0aade4df1f80d7bff58da2b5d3dfd9d8d6ec4b7d.tar.gz
buildroot-0aade4df1f80d7bff58da2b5d3dfd9d8d6ec4b7d.tar.bz2
fs/btrfs: add support for generating a btrfs image
This patch makes it possible to format the rootfs using btrfs. It introduces the option; BR2_TARGET_ROOTFS_BTRFS. When selected, the user is able to specify the filesystem size, label, options, and node and sector sizes. The new files are based on fs/ext2/{Config.in,ext2.mk} Signed-off-by: Robert J. Heywood <robert.heywood@codethink.co.uk> Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Tested-by: "Yann E. MORIN" <yann.morin.1998@free.fr> [Thomas: - fix issues pointed by Yann (duplicated empty line, missing quotes around default values for string options) - use -f option so that we don't have to remove the image file before creating it again - use the --byte-count option to set the filesystem size, which avoids the need for doing a "truncate -s" - remove the possible explanation of a mkfs.btrfs error. Indeed, mkfs.btrfs automatically extends the size of the image as needed, so the size passed can never be "too small". - fix check-package warnings in Config.in file.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/Config.in1
-rw-r--r--fs/btrfs/Config.in50
-rw-r--r--fs/btrfs/btrfs.mk35
3 files changed, 86 insertions, 0 deletions
diff --git a/fs/Config.in b/fs/Config.in
index c25b01c3de..24f22fd7e3 100644
--- a/fs/Config.in
+++ b/fs/Config.in
@@ -1,6 +1,7 @@
menu "Filesystem images"
source "fs/axfs/Config.in"
+source "fs/btrfs/Config.in"
source "fs/cloop/Config.in"
source "fs/cpio/Config.in"
source "fs/cramfs/Config.in"
diff --git a/fs/btrfs/Config.in b/fs/btrfs/Config.in
new file mode 100644
index 0000000000..85be68e7e9
--- /dev/null
+++ b/fs/btrfs/Config.in
@@ -0,0 +1,50 @@
+config BR2_TARGET_ROOTFS_BTRFS
+ bool "btrfs root filesystem"
+ select BR2_PACKAGE_HOST_BTRFS_PROGS
+ help
+ Build a btrfs root filesystem. If you enable this option, you
+ probably want to enable the btrfs-progs package too.
+
+if BR2_TARGET_ROOTFS_BTRFS
+
+config BR2_TARGET_ROOTFS_BTRFS_LABEL
+ string "filesystem label"
+
+config BR2_TARGET_ROOTFS_BTRFS_SIZE
+ string "filesystem size"
+ default "100m"
+ help
+ The size of the filesystem image in bytes.
+ Suffix with k, m, g or t for power-of-two kilo-, mega-, giga-
+ or terabytes.
+
+config BR2_TARGET_ROOTFS_BTRFS_SIZE_SECTOR
+ string "sector size"
+ default "4096"
+ help
+ This value should be set to the page size in bytes. The
+ default value of 4096 is the the most common page size for
+ most systems. If the sectorsize differs from the page size,
+ the created filesystem may not be mountable by the kernel.
+ Therefore it is recommended to leave this value at
+ 4096. Unless you know that your kernel uses a different page
+ size. Suffix with k for power-of-two kilobytes.
+
+config BR2_TARGET_ROOTFS_BTRFS_SIZE_NODE
+ string "btree node size"
+ default "16384"
+ help
+ The tree block size in which btrfs stores metadata in bytes.
+ This must be a multiple of the sectorsize, but not larger
+ than 64KiB (65536).
+ Suffix with k for power-of-two kilobytes.
+
+config BR2_TARGET_ROOTFS_BTRFS_FEATURES
+ string "Filesystem Features"
+ help
+ A comma separated string of features that can be enabled
+ during creation time.
+ For a list of available options, use:
+ `.../host/bin/mkfs.btrfs -O list-all`
+
+endif # BR2_TARGET_ROOTFS_BTRFS
diff --git a/fs/btrfs/btrfs.mk b/fs/btrfs/btrfs.mk
new file mode 100644
index 0000000000..ad00153c26
--- /dev/null
+++ b/fs/btrfs/btrfs.mk
@@ -0,0 +1,35 @@
+################################################################################
+#
+# Build the btrfs root filesystem image
+#
+################################################################################
+
+BTRFS_SIZE = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE))
+ifeq ($(BR2_TARGET_ROOTFS_BTRFS)-$(BTRFS_SIZE),y-)
+$(error BR2_TARGET_ROOTFS_BTRFS_SIZE cannot be empty)
+endif
+
+BTRFS_SIZE_NODE = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE_NODE))
+BTRFS_SIZE_SECTOR = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_SIZE_SECTOR))
+BTRFS_FEATURES = $(call qstrip,$(BR2_TARGET_ROOTFS_BTRFS_FEATURES))
+# 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.
+BTRFS_LABEL := $(subst ",,$(BR2_TARGET_ROOTFS_BTRFS_LABEL))
+# ")
+
+BTRFS_OPTS = \
+ -f \
+ -r '$(TARGET_DIR)' \
+ -L '$(BTRFS_LABEL)' \
+ --byte-count '$(BTRFS_SIZE)' \
+ $(if $(BTRFS_SIZE_NODE),--nodesize '$(BTRFS_SIZE_NODE)') \
+ $(if $(BTRFS_SIZE_SECTOR),--sectorsize '$(BTRFS_SIZE_SECTOR)') \
+ $(if $(BTRFS_FEATURES),--features '$(BTRFS_FEATURES)')
+
+ROOTFS_BTRFS_DEPENDENCIES = host-btrfs-progs
+
+define ROOTFS_BTRFS_CMD
+ $(HOST_DIR)/bin/mkfs.btrfs $(BTRFS_OPTS) $@
+endef
+
+$(eval $(rootfs))