Zephyr storage存储子系统系统学习记录

一、Zephyr storage 存储子系统能做什么?

统一管理磁盘操作方便应用层使用存储,如格式化、读数据、写数据。

二、应用层操作

官方给的demo:

https://github.com/zephyrproject-rtos/zephyr/blob/main/samples/subsys/nvs/src/main.c

 

序号

介质

访问方式

功能

API接口

备注

1

Non-Volatile Storage(EEPROM)

binary blobs, strings, integers, longs

计算文件系统中的可用空间

ssize_t nvs_calc_free_spacestruct nvs_fs *fs)

从文件系统中读取历史记录条目

ssize_t nvs_read_hist(struct nvs_fs *fs, uint16_t id, void *data, size_t Len, uint16_t CNT)

从文件系统中读取条目

ssize_t nvs_read(struct nvs_fs *fs, uint16_t id, void *data, size_t len)

从文件系统中删除条目

int nvs_delete(struct nvs_fs *fs, uint16_t id)

将条目写入文件系统

ssize_t nvs_write(struct nvs_fs *fs, uint16_t id, const void *data, size_t len)

从闪存中清除 NVS 文件系统

int nvs_clear(struct nvs_fs *fs)

2

EMMC/SD

sector

uint8_t

初始化

int disk_access_init(const char *pdrv)

获取磁盘的状态

int disk_access_status(const char *pdrv)

从磁盘读取数据

int disk_access_read(const char *pdrv, uint8_t *data_buf, uint32_t start_sector, uint32_t num_sector)

将数据写入磁盘

int disk_access_write(const char *pdrv, const uint8_t *data_buf, uint32_t start_sector, uint32_t num_sector)

获取/配置磁盘参数

int disk_access_ioctl(const char *pdrv, uint8_t cmd, void *buff)

注册磁盘

int disk_access_register(struct disk_info *disk)

3

Stream Flash(Nand&Nor)

page

初始化流写入闪存所需的上下文,把读写状态回调函数传入

int stream_flash_init(struct stream_flash_ctx *ctx, const struct device *fdev, uint8_t *buf, size_t buf_len, size_t offset, size_t size, stream_flash_callback_t cb)

按字节写入存储

size_t stream_flash_bytes_written(struct stream_flash_ctx *ctx)

按缓冲区写入flash

int stream_flash_buffered_write(struct stream_flash_ctx *ctx, const uint8_t *data, size_t len, bool flush)

擦除给定偏移所属的闪存页面

int stream_flash_erase_page(struct stream_flash_ctx *ctx, off_t off)

使用键值加载

int stream_flash_progress_load(struct stream_flash_ctx *ctx, const char *settings_key)

使用键值保存

int stream_flash_progress_save(struct stream_flash_ctx *ctx, const char *settings_key)

使用键值擦除

int stream_flash_progress_clear(struct stream_flash_ctx *ctx, const char *settings_key)

4

分区读写

分区

打开分区

int flash_area_open(uint8_t id, const struct flash_area **fa)

关闭分区

void flash_area_close(const struct flash_area *fa)

写入分区

int flash_area_write(const struct flash_area *fa, off_t off, const void *src, size_t len)

擦除分区

int flash_area_erase(const struct flash_area *fa, off_t off, size_t len)

获取分区

uint32_t flash_area_align(const struct flash_area *fa)

通过分区获取扇区

int flash_area_get_sectors(int fa_id, uint32_t *count, struct flash_sector *sectors)

遍历分区

void flash_area_foreach(flash_area_cb_t user_cb, void *user_data)

通过分区获取设备

const struct device *flash_area_get_device(const struct flash_area *fa)

擦除分区

uint8_t flash_area_erased_val(const struct flash_area *fa)

查询分区有没有支持的驱动

int flash_area_has_driver(const struct flash_area *fa)

5

Flash Circular Buffer

entrie

初始化

int fcb_init(int f_area_id, struct fcb *fcb)

追加数据

int fcb_append(struct fcb *fcb, uint16_t len, struct fcb_entry *loc)

是否是空的

int fcb_is_empty(struct fcb *fcb)

清空数据

int fcb_clear(struct fcb *fcb)

追加完成

int fcb_append_finish(struct fcb *fcb, struct fcb_entry *append_loc)

获取下一个值

int fcb_getnext(struct fcb *fcb, struct fcb_entry *loc)

翻转存储数据的顺序

int fcb_rotate(struct fcb *fcb)

获取空闲扇区数量

int fcb_free_sector_cnt(struct fcb *fcb)

浏览所有entries

int fcb_walk(struct fcb *fcb, struct flash_sector *sector, fcb_walk_cb cb, void *cb_arg)

相关推荐

  1. Zephyr storage存储子系统系统学习记录

    2024-04-30 09:24:04       35 阅读
  2. 分布式存储系统学习(1)

    2024-04-30 09:24:04       32 阅读
  3. MIT 6.5840-分布式系统学习记录

    2024-04-30 09:24:04       39 阅读
  4. 推荐系统学习记录——BERT、SBERT

    2024-04-30 09:24:04       32 阅读
  5. 学生管理系统本地化存储

    2024-04-30 09:24:04       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 09:24:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 09:24:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 09:24:04       82 阅读
  4. Python语言-面向对象

    2024-04-30 09:24:04       91 阅读

热门阅读

  1. AnolisOS8.8基于yum安装mariadb并配置远程访问

    2024-04-30 09:24:04       28 阅读
  2. js执行顺序

    2024-04-30 09:24:04       25 阅读
  3. Visual Studio Installer 运行python 汉字

    2024-04-30 09:24:04       27 阅读
  4. 使用WSGI服务器在生产环境中运行Flask应用程序

    2024-04-30 09:24:04       30 阅读
  5. Jenkins下拉取gitlab的branches和tags的字段说明

    2024-04-30 09:24:04       30 阅读