From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 2/2] fs/btrfs: Introducing btrfs rootfs support.
Date: Thu, 23 Aug 2018 23:27:39 +0200 [thread overview]
Message-ID: <20180823212739.GJ9365@scaer> (raw)
In-Reply-To: <20180823202651.3108-1-robert.heywood@codethink.co.uk>
Robert, All,
On 2018-08-23 21:26 +0100, Robert J. Heywood spake thusly:
> 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>
[--SNIP--]
> diff --git a/fs/btrfs/Config.in b/fs/btrfs/Config.in
> new file mode 100644
> index 0000000000..6537c85fdb
> --- /dev/null
> +++ b/fs/btrfs/Config.in
> @@ -0,0 +1,54 @@
> +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. If it does not have a
> + suffix, it is interpreted as power-of-two kilobytes. If it is
This is now wrong, as 'truncate' uses bytes if there is no prefix.
> + suffixed by 'k', 'm', 'g', 't' (either upper-case or
> + lower-case), then it is interpreted in power-of-two kilobytes,
> + megabytes, gigabytes, terabytes, etc.
So, maybe just:
The size of the filesystem image, in bytes. Suffix with k, m, g,
or t for power-of-two kilo-, mega-, giga-, or terrabytes.
> +config BR2_TARGET_ROOTFS_BTRFS_SIZE_NODE
> + string "btree node size"
> + default 16384
> + help
> + The tree block size in which btrfs stores metadata. This must
> + be a multiple of the sectorsize, but not larger than 64KiB.
> + (65536).
> + If it is suffixed by 'k' (either upper-case or lower-case),
> + then it is interpreted in power-of-two kilobytes.
> +
> +config BR2_TARGET_ROOTFS_BTRFS_SIZE_SECTOR
> + string "sector size"
> + default 4096
> + help
> + This value should be set to the page size. 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.
> + If it is suffixed by 'k' (either upper-case or lower-case),
> + then it is interpreted in power-of-two kilobytes.
I failed to note that in the previous iteration, but: the 'sector size'
option is referenced from the 'btree node size' option. So the order
should be inversed.
> +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;
Change the trailing semi-colon ';' by a colon ':'.
Otherwise, that's nice. :-)
Regards,
Yann E. MORIN.
> + `.../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..37b2937825
> --- /dev/null
> +++ b/fs/btrfs/btrfs.mk
> @@ -0,0 +1,39 @@
> +################################################################################
> +#
> +# 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 = \
> + -r '$(TARGET_DIR)' \
> + -L '$(BTRFS_LABEL)' \
> + $(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
> + rm -f $@
> + truncate -s $(BTRFS_SIZE) $@
> + $(HOST_DIR)/bin/mkfs.btrfs $(BTRFS_OPTS) $@ \
> + || { ret=$$?; \
> + echo "*** Maybe you need to increase the filesystem size (BR2_TARGET_ROOTFS_BTRFS_SIZE)" 1>&2; \
> + exit $$ret; \
> + }
> +endef
> +
> +$(eval $(rootfs))
> --
> 2.11.0
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
next prev parent reply other threads:[~2018-08-23 21:27 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-23 20:26 [Buildroot] [PATCH 2/2] fs/btrfs: Introducing btrfs rootfs support Robert J. Heywood
2018-08-23 21:27 ` Yann E. MORIN [this message]
-- strict thread matches above, loose matches on Subject: below --
2018-08-23 22:01 Robert J. Heywood
2018-08-24 21:53 ` Yann E. MORIN
2018-08-25 12:39 ` Thomas Petazzoni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180823212739.GJ9365@scaer \
--to=yann.morin.1998@free.fr \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.