From 610c72ccd0a03f896eb537af81a2df478a4cd654 Mon Sep 17 00:00:00 2001 From: YAMAMOTO Takashi Date: Tue, 26 Nov 2024 16:41:02 +0900 Subject: [PATCH] fs/littlefs: add LFS_MULTIVERSION support --- fs/littlefs/CMakeLists.txt | 3 ++- fs/littlefs/Kconfig | 17 +++++++++++++++++ fs/littlefs/Make.defs | 3 +++ fs/littlefs/lfs_vfs.c | 4 ++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/fs/littlefs/CMakeLists.txt b/fs/littlefs/CMakeLists.txt index 03f1821d5e..236dde4673 100644 --- a/fs/littlefs/CMakeLists.txt +++ b/fs/littlefs/CMakeLists.txt @@ -59,7 +59,8 @@ if(CONFIG_FS_LITTLEFS) -DLFS_CONFIG=${CMAKE_CURRENT_LIST_DIR}/lfs_vfs.h -DLFS_NAME_MAX=${CONFIG_FS_LITTLEFS_NAME_MAX} -DLFS_FILE_MAX=${CONFIG_FS_LITTLEFS_FILE_MAX} - -DLFS_ATTR_MAX=${CONFIG_FS_LITTLEFS_ATTR_MAX}) + -DLFS_ATTR_MAX=${CONFIG_FS_LITTLEFS_ATTR_MAX} + $<$:-DLFS_MULTIVERSION>) # Note: the littlefs upstream doesn't seems to care -Wshadow cf. # https://github.com/littlefs-project/littlefs/pull/873 diff --git a/fs/littlefs/Kconfig b/fs/littlefs/Kconfig index af8af03fe3..adefd7fbfa 100644 --- a/fs/littlefs/Kconfig +++ b/fs/littlefs/Kconfig @@ -158,4 +158,21 @@ config FS_LITTLEFS_VERSION ---help--- The LITTLEFS version to use. +config FS_LITTLEFS_MULTI_VERSION + bool "Support multiple on-disk versions" + default n + ---help--- + Enable LFS_MULTIVERSION for LITTLEFS file system + +config FS_LITTLEFS_DISK_VERSION + hex "LITTLEFS on-disk version" + default 0x0 + depends on FS_LITTLEFS_MULTI_VERSION + ---help--- + The LITTLEFS disk version to use. + + 0 means to leave it to the default from the LITTLEFS. + 0x00020000 means 2.0. + 0x00020001 means 2.1. + endif diff --git a/fs/littlefs/Make.defs b/fs/littlefs/Make.defs index 9a55eabf0f..57109d5755 100644 --- a/fs/littlefs/Make.defs +++ b/fs/littlefs/Make.defs @@ -50,6 +50,9 @@ CFLAGS += -DLFS_CONFIG=../lfs_vfs.h CFLAGS += -DLFS_NAME_MAX=$(CONFIG_FS_LITTLEFS_NAME_MAX) CFLAGS += -DLFS_FILE_MAX=$(CONFIG_FS_LITTLEFS_FILE_MAX) CFLAGS += -DLFS_ATTR_MAX=$(CONFIG_FS_LITTLEFS_ATTR_MAX) +ifeq ($(CONFIG_FS_LITTLEFS_MULTI_VERSION),y) +CFLAGS += -DLFS_MULTIVERSION +endif LITTLEFS_TARBALL = $(CONFIG_FS_LITTLEFS_VERSION).tar.gz diff --git a/fs/littlefs/lfs_vfs.c b/fs/littlefs/lfs_vfs.c index 0960142134..01f28464a0 100644 --- a/fs/littlefs/lfs_vfs.c +++ b/fs/littlefs/lfs_vfs.c @@ -1323,6 +1323,10 @@ static int littlefs_bind(FAR struct inode *driver, FAR const void *data, fs->cfg.lookahead_size = CONFIG_FS_LITTLEFS_LOOKAHEAD_SIZE; #endif +#ifdef CONFIG_FS_LITTLEFS_MULTI_VERSION + fs->cfg.disk_version = CONFIG_FS_LITTLEFS_DISK_VERSION; +#endif + /* Then get information about the littlefs filesystem on the devices * managed by this driver. */