mirror of
https://github.com/apache/nuttx.git
synced 2026-05-28 20:08:15 +08:00
drivers/mtd:init commit of power-loss resilient cfg
Signed-off-by: 田昕 <tianxin7@xiaomi.com>
This commit is contained in:
@@ -109,6 +109,9 @@ choice ESP32C3_SPIFLASH_FS
|
|||||||
bool "LittleFS"
|
bool "LittleFS"
|
||||||
select FS_LITTLEFS
|
select FS_LITTLEFS
|
||||||
|
|
||||||
|
config ESP32C3_SPIFLASH_MTD_CONFIG
|
||||||
|
bool "Non-volatile storage"
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
config ESP32C3_SPIFLASH_FS_MOUNT_PT
|
config ESP32C3_SPIFLASH_FS_MOUNT_PT
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
#
|
||||||
|
# This file is autogenerated: PLEASE DO NOT EDIT IT.
|
||||||
|
#
|
||||||
|
# You can use "make menuconfig" to make any modifications to the installed .config file.
|
||||||
|
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
|
||||||
|
# modifications.
|
||||||
|
#
|
||||||
|
# CONFIG_NSH_ARGCAT is not set
|
||||||
|
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
|
||||||
|
# CONFIG_NSH_CMDPARMS is not set
|
||||||
|
CONFIG_ARCH="risc-v"
|
||||||
|
CONFIG_ARCH_BOARD="esp32c3-devkit"
|
||||||
|
CONFIG_ARCH_BOARD_ESP32C3_DEVKIT=y
|
||||||
|
CONFIG_ARCH_CHIP="esp32c3"
|
||||||
|
CONFIG_ARCH_CHIP_ESP32C3=y
|
||||||
|
CONFIG_ARCH_CHIP_ESP32C3WROOM02=y
|
||||||
|
CONFIG_ARCH_INTERRUPTSTACK=1536
|
||||||
|
CONFIG_ARCH_RISCV=y
|
||||||
|
CONFIG_ARCH_STACKDUMP=y
|
||||||
|
CONFIG_BCH=y
|
||||||
|
CONFIG_BOARD_LOOPSPERMSEC=15000
|
||||||
|
CONFIG_BUILTIN=y
|
||||||
|
CONFIG_DEV_ZERO=y
|
||||||
|
CONFIG_ESP32C3_SPIFLASH=y
|
||||||
|
CONFIG_ESP32C3_SPIFLASH_MTD_CONFIG=y
|
||||||
|
CONFIG_ESP32C3_STORAGE_MTD_OFFSET=0x3e6000
|
||||||
|
CONFIG_ESP32C3_STORAGE_MTD_SIZE=0x3000
|
||||||
|
CONFIG_FS_PROCFS=y
|
||||||
|
CONFIG_IDLETHREAD_STACKSIZE=2048
|
||||||
|
CONFIG_INIT_ENTRYPOINT="nsh_main"
|
||||||
|
CONFIG_INTELHEX_BINARY=y
|
||||||
|
CONFIG_LIBC_PERROR_STDOUT=y
|
||||||
|
CONFIG_LIBC_STRERROR=y
|
||||||
|
CONFIG_MTD_CONFIG=y
|
||||||
|
CONFIG_MTD_CONFIG_FAIL_SAFE=y
|
||||||
|
CONFIG_MTD_CONFIG_NAMED=y
|
||||||
|
CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
|
||||||
|
CONFIG_NSH_ARCHINIT=y
|
||||||
|
CONFIG_NSH_BUILTIN_APPS=y
|
||||||
|
CONFIG_NSH_FILEIOSIZE=512
|
||||||
|
CONFIG_NSH_READLINE=y
|
||||||
|
CONFIG_NSH_STRERROR=y
|
||||||
|
CONFIG_PREALLOC_TIMERS=0
|
||||||
|
CONFIG_RR_INTERVAL=200
|
||||||
|
CONFIG_SCHED_WAITPID=y
|
||||||
|
CONFIG_START_DAY=29
|
||||||
|
CONFIG_START_MONTH=11
|
||||||
|
CONFIG_START_YEAR=2019
|
||||||
|
CONFIG_SYSTEM_CFGDATA=y
|
||||||
|
CONFIG_SYSTEM_NSH=y
|
||||||
|
CONFIG_TESTING_MTD_CONFIG_FAIL_SAFE=y
|
||||||
|
CONFIG_UART0_SERIAL_CONSOLE=y
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
#include <nuttx/kmalloc.h>
|
#include <nuttx/kmalloc.h>
|
||||||
#include <nuttx/spi/spi.h>
|
#include <nuttx/spi/spi.h>
|
||||||
#include <nuttx/mtd/mtd.h>
|
#include <nuttx/mtd/mtd.h>
|
||||||
|
#include <nuttx/mtd/configdata.h>
|
||||||
#include <nuttx/fs/nxffs.h>
|
#include <nuttx/fs/nxffs.h>
|
||||||
#ifdef CONFIG_BCH
|
#ifdef CONFIG_BCH
|
||||||
#include <nuttx/drivers/drivers.h>
|
#include <nuttx/drivers/drivers.h>
|
||||||
@@ -500,6 +501,36 @@ static int init_storage_partition(void)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined (CONFIG_ESP32C3_SPIFLASH_MTD_CONFIG)
|
||||||
|
|
||||||
|
#if defined (CONFIG_TESTING_MTD_CONFIG_FAIL_SAFE)
|
||||||
|
|
||||||
|
/* To test power-loss resilient kv system,
|
||||||
|
* we write possible power-loss flash layout into flash
|
||||||
|
* then start kv system to see if it recovers.
|
||||||
|
* To do so, we need a mtd driver so that test code can
|
||||||
|
* write into flash.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const char *path = CONFIG_TESTING_MTD_CONFIG_FAIL_SAFE_MOUNTPT_NAME;
|
||||||
|
ret = register_mtddriver(path, mtd, 0777, NULL);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
ferr("ERROR: Failed to register MTD: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
ret = mtdconfig_register(mtd);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
ferr("ERROR: Failed to setup mtd config\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
ret = register_mtddriver("/dev/esp32c3flash", mtd, 0755, NULL);
|
ret = register_mtddriver("/dev/esp32c3flash", mtd, 0755, NULL);
|
||||||
|
|||||||
@@ -184,6 +184,15 @@ config MTD_CONFIG_NAME_LEN
|
|||||||
---help---
|
---help---
|
||||||
Sets the maximum length of config item names.
|
Sets the maximum length of config item names.
|
||||||
|
|
||||||
|
config MTD_CONFIG_FAIL_SAFE
|
||||||
|
bool "Enable Fail Safe MTD Config"
|
||||||
|
default n
|
||||||
|
depends on MTD_BYTE_WRITE
|
||||||
|
---help---
|
||||||
|
Enable the new storage layout to support the resilient to power loss.
|
||||||
|
This replaces the drivers/mtd/mtd_config, which
|
||||||
|
is resilient to power loss.
|
||||||
|
|
||||||
endif # MTD_CONFIG
|
endif # MTD_CONFIG
|
||||||
|
|
||||||
comment "MTD Device Drivers"
|
comment "MTD Device Drivers"
|
||||||
|
|||||||
@@ -27,7 +27,13 @@
|
|||||||
|
|
||||||
ifeq ($(CONFIG_MTD),y)
|
ifeq ($(CONFIG_MTD),y)
|
||||||
|
|
||||||
CSRCS += ftl.c mtd_config.c
|
CSRCS += ftl.c
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_MTD_CONFIG_FAIL_SAFE),y)
|
||||||
|
CSRCS += mtd_config_fs.c
|
||||||
|
else ifeq ($(CONFIG_MTD_CONFIG),y)
|
||||||
|
CSRCS += mtd_config.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_MTD_PARTITION),y)
|
ifeq ($(CONFIG_MTD_PARTITION),y)
|
||||||
CSRCS += mtd_partition.c
|
CSRCS += mtd_partition.c
|
||||||
|
|||||||
@@ -1786,4 +1786,39 @@ int mtdconfig_register(FAR struct mtd_dev_s *mtd)
|
|||||||
errout:
|
errout:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: mtdconfig_unregister
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Unregister a /dev/config device backed by a MTD.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int mtdconfig_unregister(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct file file;
|
||||||
|
FAR struct inode *inode;
|
||||||
|
FAR struct mtdconfig_struct_s *dev;
|
||||||
|
|
||||||
|
ret = file_open(&file, "/dev/config", 0);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
ferr("ERROR: open /dev/config failed: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
inode = file.f_inode;
|
||||||
|
dev = (FAR struct mtdconfig_struct_s *)inode->i_private;
|
||||||
|
nxmutex_destroy(&dev->exclsem);
|
||||||
|
kmm_free(dev);
|
||||||
|
|
||||||
|
file_close(&file);
|
||||||
|
|
||||||
|
unregister_driver("/dev/config");
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_MTD_CONFIG */
|
#endif /* CONFIG_MTD_CONFIG */
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -120,6 +120,21 @@ extern "C"
|
|||||||
struct mtd_dev_s;
|
struct mtd_dev_s;
|
||||||
int mtdconfig_register(FAR struct mtd_dev_s *mtd);
|
int mtdconfig_register(FAR struct mtd_dev_s *mtd);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: mtdconfig_unregister
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* This function unregisters /dev/config device.
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Zero on success; a negated errno value on failure.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int mtdconfig_unregister(void);
|
||||||
|
|
||||||
#undef EXTERN
|
#undef EXTERN
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user