mirror of
https://github.com/openharmony/device_board_openvalley.git
synced 2026-07-01 00:47:54 -04:00
@@ -35,11 +35,6 @@
|
||||
void* __attribute__((weak)) OHOS_APP_FUNC_ENTRY = NULL;
|
||||
void* __attribute__((weak)) BEFORE_OHOS_RUN_FUNC_ENTRY = NULL;
|
||||
|
||||
void __attribute__((weak)) OHOS_SystemInit(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __attribute__((weak)) DeviceManagerStart(void)
|
||||
{
|
||||
return 0;
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
#include "los_compiler.h"
|
||||
#include "los_memory.h"
|
||||
#include "los_task.h"
|
||||
#include "los_fs.h"
|
||||
#include "ohos_init.h"
|
||||
#include "ohos_types.h"
|
||||
|
||||
static const char *LITTLEFS_MOUNT_POINT = "/Openvalley";
|
||||
static const char TAG[] = {"Littlefs"};
|
||||
#define LFS_LOG printf
|
||||
#define LSF_ERROR (-1)
|
||||
|
||||
#include "esp_partition.h"
|
||||
/* ESP32的分区类型, 0x00-0x3F系统保留分区类型,0x40-0xFE自定义分区 */
|
||||
@@ -57,84 +57,75 @@ const char *GetLittlefsMountPoint(void)
|
||||
}
|
||||
|
||||
/* lfs读接口 */
|
||||
static int LittlefsRead(const struct lfs_config *cfg, lfs_block_t block,
|
||||
int littlefs_block_read(const struct lfs_config *cfg, lfs_block_t block,
|
||||
lfs_off_t off, char *buffer, lfs_size_t size)
|
||||
{
|
||||
return spi_flash_read((size_t)cfg->context + cfg->block_size * block + off, buffer, size);
|
||||
}
|
||||
|
||||
/* lfs写接口 */
|
||||
static int LittlefsProg(const struct lfs_config *cfg, lfs_block_t block,
|
||||
lfs_off_t off, const char *buffer, lfs_size_t size)
|
||||
int littlefs_block_write(const struct lfs_config *cfg, lfs_block_t block,
|
||||
lfs_off_t off, const void *buffer, lfs_size_t size)
|
||||
{
|
||||
return spi_flash_write((size_t)cfg->context + cfg->block_size * block + off, buffer, size);
|
||||
}
|
||||
|
||||
/* lfs擦除接口 */
|
||||
static int LittlefsErase(const struct lfs_config *cfg, lfs_block_t block)
|
||||
int littlefs_block_erase(const struct lfs_config *cfg, lfs_block_t block)
|
||||
{
|
||||
return spi_flash_erase_range((size_t)cfg->context + cfg->block_size * block, cfg->block_size);
|
||||
}
|
||||
|
||||
/* lfs同步接口 */
|
||||
static int LittlefsSync(const struct lfs_config *cfg)
|
||||
int littlefs_block_sync(const struct lfs_config *cfg)
|
||||
{
|
||||
return LFS_ERR_OK;
|
||||
}
|
||||
|
||||
/* 接口兼容 */
|
||||
int __attribute__((weak)) SetDefaultMountPath(int pathNameIndex, const char *target)
|
||||
static int littlefs_config(struct PartitionCfg *pCfg)
|
||||
{
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
/* lfs初始化 */
|
||||
static INT32 LittlefsInit(void)
|
||||
{
|
||||
int err = 0;
|
||||
static struct lfs_config s_lfsConfig = {0}; /* lfs配置变量,必须是全局内存或静态内存 */
|
||||
s_lfsConfig.read = LittlefsRead; /* lfs 读接口 */
|
||||
s_lfsConfig.prog = LittlefsProg; /* lfs 写接口 */
|
||||
s_lfsConfig.erase = LittlefsErase; /* lfs 擦除接口 */
|
||||
s_lfsConfig.sync = LittlefsSync; /* lfs 同步接口 */
|
||||
#if defined(LITTLEFS_PHYS_ADDR) && defined(BLOCK_COUNT)
|
||||
s_lfsConfig.context = (void *)LITTLEFS_PHYS_ADDR;
|
||||
s_lfsConfig.block_count = BLOCK_COUNT,
|
||||
pCfg->partNo = (void *)LITTLEFS_PHYS_ADDR;
|
||||
pCfg->blockCount = BLOCK_COUNT,
|
||||
#else
|
||||
const esp_partition_t *part;
|
||||
part = esp_partition_find_first(LITTLEFS_PARTITION_TYPE, LITTLEFS_PARTITION_SUBTYPE, LITTLEFS_PARTITION_NAME);
|
||||
if (!part) {
|
||||
LFS_LOG("Error %s.esp_partition_find_first\n", TAG);
|
||||
return LSF_ERROR;
|
||||
return LOS_NOK;
|
||||
}
|
||||
s_lfsConfig.context = (void *)part->address;
|
||||
s_lfsConfig.block_count = part->size / BLOCK_SIZE;
|
||||
pCfg->partNo = (void *)part->address;
|
||||
pCfg->blockCount = part->size / BLOCK_SIZE;
|
||||
#endif
|
||||
s_lfsConfig.read_size = READ_SIZE;
|
||||
s_lfsConfig.prog_size = PROG_SIZE;
|
||||
s_lfsConfig.block_size = BLOCK_SIZE;
|
||||
s_lfsConfig.cache_size = CACHE_SIZE;
|
||||
s_lfsConfig.lookahead_size = LOOKAHEAD_SIZE;
|
||||
s_lfsConfig.block_cycles = BLOCK_CYCLES;
|
||||
s_lfsConfig.read_buffer = NULL;
|
||||
s_lfsConfig.prog_buffer = NULL;
|
||||
s_lfsConfig.lookahead_buffer = NULL;
|
||||
s_lfsConfig.name_max = 0;
|
||||
s_lfsConfig.file_max = 0;
|
||||
s_lfsConfig.attr_max = 0;
|
||||
err = SetDefaultMountPath(0, LITTLEFS_MOUNT_POINT); /* 设置缺省挂载点 */
|
||||
if (err != LOS_OK) {
|
||||
LFS_LOG("Error %s.SetDefaultMountPath=0x%X\n", TAG, err);
|
||||
return LSF_ERROR;
|
||||
}
|
||||
err = mount(NULL, LITTLEFS_MOUNT_POINT, "littlefs", 0, &s_lfsConfig); /* 设置挂载Littlefs */
|
||||
if (err != LOS_OK) {
|
||||
LFS_LOG("Error %s.mount=0x%X\n", TAG, err);
|
||||
return LSF_ERROR;
|
||||
}
|
||||
LFS_LOG("%s.mount=%s addr=0x%X size=%dK OK!!!\n", TAG, LITTLEFS_MOUNT_POINT, (size_t)s_lfsConfig.context,
|
||||
calc_lfs_size(s_lfsConfig.block_count, s_lfsConfig.block_size));
|
||||
return 0;
|
||||
pCfg->readSize = READ_SIZE;
|
||||
pCfg->writeSize = PROG_SIZE;
|
||||
pCfg->cacheSize = CACHE_SIZE;
|
||||
pCfg->blockCycles = BLOCK_CYCLES;
|
||||
pCfg->lookaheadSize = LOOKAHEAD_SIZE;
|
||||
pCfg->blockSize = BLOCK_SIZE;
|
||||
pCfg->readFunc = NULL;
|
||||
pCfg->writeFunc = NULL;
|
||||
pCfg->eraseFunc = NULL;
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
SYS_SERVICE_INIT(LittlefsInit);
|
||||
/* lfs初始化 */
|
||||
INT32 LittlefsInit(void)
|
||||
{
|
||||
int err = 0;
|
||||
struct PartitionCfg cfg = {0};
|
||||
if (littlefs_config(&cfg) == LOS_NOK) {
|
||||
return LOS_NOK;
|
||||
}
|
||||
/* 设置挂载Littlefs */
|
||||
err = mount(NULL, LITTLEFS_MOUNT_POINT, "littlefs", 0, &cfg);
|
||||
if (err != LOS_OK) {
|
||||
LFS_LOG("Error %s.mount=0x%X\n", TAG, err);
|
||||
return LOS_NOK;
|
||||
}
|
||||
LFS_LOG("%s.mount=%s addr=0x%X size=%dK OK!!!\n", TAG, LITTLEFS_MOUNT_POINT, (size_t)cfg.partNo,
|
||||
calc_lfs_size(cfg.blockCount, cfg.blockSize));
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
SYS_FEATURE_INIT(LittlefsInit);
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "los_memory.h"
|
||||
#include "los_task.h"
|
||||
#include "los_compiler.h"
|
||||
#include "los_fs.h"
|
||||
#include "ohos_init.h"
|
||||
#include "ohos_types.h"
|
||||
|
||||
@@ -32,7 +33,6 @@ static const char TAG[] = { "Littlefs" };
|
||||
|
||||
#define LFS_LOG printf
|
||||
#define RAM_BUF_SIZE (22*1024) /* 可以被擦除的块数量,实际大小=BLOCK_SIZE*BLOCK_COUNT字节 */
|
||||
#define LFS_FAIL (-1)
|
||||
#define READ_SIZE 32 /* 最小读取字节数,所有的读取操作字节数必须是它的倍数(影响内存消耗) */
|
||||
#define PROG_SIZE READ_SIZE /* 最小写入字节数,所有的写入操作字节数必须是它的倍数(影响内存消耗) */
|
||||
#define BLOCK_SIZE 128 /* 擦除块字节数,不会影响内存消耗,每个文件至少占用一个块,必须是READ_SIZE/PROG_SIZE的倍数 */
|
||||
@@ -42,61 +42,58 @@ static const char TAG[] = { "Littlefs" };
|
||||
|
||||
|
||||
/* lfs配置变量,必须是全局内存或静态内存 */
|
||||
static struct lfs_config s_lfsConfig = {0};
|
||||
static char LittlefsRamBuf[RAM_BUF_SIZE];
|
||||
|
||||
/* lfs读接口 */
|
||||
static int LittlefsRead(const struct lfs_config* cfg, lfs_block_t block,
|
||||
lfs_off_t off, char* buffer, lfs_size_t size)
|
||||
int littlefs_block_read(const struct lfs_config *cfg, lfs_block_t block,
|
||||
lfs_off_t off, char *buffer, lfs_size_t size)
|
||||
{
|
||||
int ret;
|
||||
off = cfg->block_size * block + off;
|
||||
if ((off + size) > RAM_BUF_SIZE) {
|
||||
return LFS_FAIL;
|
||||
return LOS_NOK;
|
||||
}
|
||||
ret = memcpy_s(buffer, size, (char*)cfg->context + off, size);
|
||||
if (ret != 0) {
|
||||
return LFS_FAIL;
|
||||
return LOS_NOK;
|
||||
}
|
||||
return 0;
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
/* lfs写接口 */
|
||||
static int LittlefsProg(const struct lfs_config* cfg, lfs_block_t block,
|
||||
lfs_off_t off, const char* buffer, lfs_size_t size)
|
||||
int littlefs_block_write(const struct lfs_config *cfg, lfs_block_t block,
|
||||
lfs_off_t off, const void *buffer, lfs_size_t size)
|
||||
{
|
||||
int ret;
|
||||
off = cfg->block_size * block + off;
|
||||
if ((off + size) > RAM_BUF_SIZE) {
|
||||
return LFS_FAIL;
|
||||
return LOS_NOK;
|
||||
}
|
||||
ret = memcpy_s((char*)cfg->context + off, size, buffer, size);
|
||||
if (ret != 0) {
|
||||
return LFS_FAIL;
|
||||
return LOS_NOK;
|
||||
}
|
||||
return 0;
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
/* lfs擦除接口 */
|
||||
static int LittlefsErase(const struct lfs_config* cfg, lfs_block_t block)
|
||||
int littlefs_block_erase(const struct lfs_config *cfg, lfs_block_t block)
|
||||
{
|
||||
lfs_off_t off = cfg->block_size * block;
|
||||
if ((off + cfg->block_size) > RAM_BUF_SIZE) {
|
||||
return LFS_FAIL;
|
||||
return LOS_NOK;
|
||||
}
|
||||
int ret = memset_s((char*)cfg->context + off, cfg->block_size, 0xFF, cfg->block_size);
|
||||
if (ret != 0) {
|
||||
return LFS_FAIL;
|
||||
return LOS_NOK;
|
||||
}
|
||||
return 0;
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
/* lfs同步接口 */
|
||||
static int LittlefsSync(const struct lfs_config* cfg)
|
||||
// /* lfs同步接口 */
|
||||
int littlefs_block_sync(const struct lfs_config *c)
|
||||
{
|
||||
if (!cfg) {
|
||||
return LFS_FAIL;
|
||||
}
|
||||
(void)c;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -105,49 +102,43 @@ const char *GetLittlefsMountPoint(void)
|
||||
return LITTLEFS_MOUNT_POINT;
|
||||
}
|
||||
|
||||
static int littlefs_config(void)
|
||||
static int littlefs_config(struct PartitionCfg *pCfg)
|
||||
{
|
||||
int ret;
|
||||
ret = memset_s(&s_lfsConfig, sizeof(s_lfsConfig), 0, sizeof(s_lfsConfig));
|
||||
pCfg->partNo = (void*)LittlefsRamBuf;
|
||||
ret = memset_s(LittlefsRamBuf, RAM_BUF_SIZE, 0xFF, RAM_BUF_SIZE);
|
||||
if (ret != 0) {
|
||||
return LFS_FAIL;
|
||||
return LOS_NOK;
|
||||
}
|
||||
s_lfsConfig.read = LittlefsRead; /* lfs 读接口 */
|
||||
s_lfsConfig.prog = LittlefsProg; /* lfs 写接口 */
|
||||
s_lfsConfig.erase = LittlefsErase; /* lfs 擦除接口 */
|
||||
s_lfsConfig.sync = LittlefsSync; /* lfs 同步接口 */
|
||||
s_lfsConfig.context = (void*)LittlefsRamBuf;
|
||||
ret = memset_s(s_lfsConfig.context, RAM_BUF_SIZE, 0xFF, RAM_BUF_SIZE);
|
||||
if (ret != 0) {
|
||||
return LFS_FAIL;
|
||||
}
|
||||
s_lfsConfig.block_count = RAM_BUF_SIZE / BLOCK_SIZE,
|
||||
s_lfsConfig.read_size = READ_SIZE;
|
||||
s_lfsConfig.prog_size = PROG_SIZE;
|
||||
s_lfsConfig.block_size = BLOCK_SIZE;
|
||||
s_lfsConfig.cache_size = CACHE_SIZE;
|
||||
s_lfsConfig.lookahead_size = LOOKAHEAD_SIZE;
|
||||
s_lfsConfig.block_cycles = BLOCK_CYCLES;
|
||||
return 0;
|
||||
pCfg->blockCount = RAM_BUF_SIZE / BLOCK_SIZE;
|
||||
pCfg->readSize = READ_SIZE;
|
||||
pCfg->writeSize = PROG_SIZE;
|
||||
pCfg->cacheSize = CACHE_SIZE;
|
||||
pCfg->blockCycles = BLOCK_CYCLES;
|
||||
pCfg->lookaheadSize = LOOKAHEAD_SIZE;
|
||||
pCfg->blockSize = BLOCK_SIZE;
|
||||
pCfg->readFunc = NULL;
|
||||
pCfg->writeFunc = NULL;
|
||||
pCfg->eraseFunc = NULL;
|
||||
return LOS_OK;
|
||||
}
|
||||
/* lfs初始化 */
|
||||
// /* lfs初始化 */
|
||||
static INT32 LittlefsInit(void)
|
||||
{
|
||||
int err, ret;
|
||||
DIR* dir;
|
||||
if (littlefs_config() == LFS_FAIL) {
|
||||
return LFS_FAIL;
|
||||
struct PartitionCfg cfg = {0};
|
||||
if (littlefs_config(&cfg) == LOS_NOK) {
|
||||
return LOS_NOK;
|
||||
}
|
||||
|
||||
/* 设置挂载Littlefs */
|
||||
err = mount(NULL, LITTLEFS_MOUNT_POINT, "littlefs", 0, &s_lfsConfig);
|
||||
err = mount(NULL, LITTLEFS_MOUNT_POINT, "littlefs", 0, &cfg);
|
||||
if (err != LOS_OK) {
|
||||
LFS_LOG("Error %s.mount=0x%X\n", TAG, err);
|
||||
return LFS_FAIL;
|
||||
return LOS_NOK;
|
||||
}
|
||||
|
||||
mkdir(LITTLEFS_MOUNT_POINT, S_IRUSR | S_IWUSR);
|
||||
return 0;
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
SYS_SERVICE_INIT(LittlefsInit);
|
||||
SYS_FEATURE_INIT(LittlefsInit);
|
||||
|
||||
Reference in New Issue
Block a user