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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/830330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django框架之请求生命周期流程图

一、引言 WSGI、wsgiref、uwsgi三者是什么关系? WSGI是协议,小写的wsgiref和uwsgi是实现该协议的功能模块 缓存数据库 提前已经将你想要的数据准备好了,需要的时候直接拿就可以,提高了效率和响应时间。 eg:当你在修改你的数据的时候&…

vscode查看变量小技巧

vscode查看变量有3种方法 print()输出要查看的变量,此方法适用于所有编程软件安装jupyter,右键run in interactive window—在交互窗口运行,之后点击变量即可查看 通过调试查看,使用于大多编程软件。打断点,调试后会…

【SZU计算机网络实验】从rdt到GBN,这实验居然实现了TCP的可靠数据传输机制?

前言 一个实验六个任务,实验文档一划划不到底。。看来老师们是真下功夫了啊 本文主要展示了作者在完成SZU计算机网络实验3的思路及过程,实验主要包括: 理解rdt2.1实现rdt2.2实现rdt3.0实现回退N步(GBN)机制实现面向…

2000.1-2023.8中国经济政策不确定性指数数据(日度、月度)

2000.1-2023.8中国经济政策不确定性指数数据(日度、月度) 1、时间:日度:2001.1.1-2022.06.17,月度2000.1-2023.8 2、指标:CNEPU(经济政策不确定性指数) 3、来源:China…

Linux网络-文件传输协议之FTP服务(附带命令及截图)

目录 一.FTP简介 二.FTP的数据模式 1.主动模式 2.被动模式 3.两种模式比较 三.安装配置vsftpd 1.安装vsftpd 1.1.安装前关闭防火墙 1.2.安装vsftpd 1.3.查看 1.4.备份 2.配置 3.重启后生效 四.相关实验 1.以win为例 1.1.设置并测试测试连通性 1.2.在终端里创建…

Redis基本數據結構 ― List

Redis基本數據結構 ― List 介紹常用命令範例1. 將元素推入List中2. 取得List內容3. 彈出元素 介紹 Redis中的List結構是一個雙向鏈表。 LPUSH LPOP StackLPUSH RPOP QueueLPUSH BRPOP Queue(消息隊列) 常用命令 命令功能LPUSH將元素推入列表左端RPUSH將元素推入列表右…

ubuntu20.04安装RabbitMQ 3.11.19+Erlang 25.3.1

1、检查RabbitMQ、Erlang版本 Erlang Version Requirements | RabbitMQ 2、ubuntu20.04对应的是 focal 3、下载安装Erlang 下载地址:http://packages.erlang-solutions.com/erlang/debian/pool/ sudo dpkg -i esl-erlang_25.3-1~ubuntu~focal_amd64.deb sudo apt…

C++ 如何实现原子性

1.操作系统如何实现原子性 在单处理器,单核,运行多线程的情况下,我们不使用线程同步工具, 我们会出现,线程之间会互相抢夺,临界区的资源,造成数据不符合我们预期的结果, 后面再说解决办法,那么我们怎么帮助实现原子性 1 屏蔽中断,不让线程之间切换,让它完成再切换 2 底层硬…

栈与递归的关系

定义 特点 函数调用过程 具体实现过程与状态 小结 拓展 递归的分解 典型案例

第三弹:JavaScript 学习记录

目录 1.1. 了解 1.1.1. 为什么学习JavaScript 1.1.2. JavaScript简介 1.1.3. JavaScript / ECMAScript 1.1.4. JavaScript使用方式 1.1.5. JavaScript输出 1.1.6. JavaScript语句 1.1.7. JavaScript注释 1.1.8. JavaScript变量及常量 1.1.9. JavaScript数据类型 1.1.…

C++实战演练---负载均衡在线oj项目预热

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 前言 学习准备了快一年时间,心心念念的实战演练终于可以开始了,话不多说,直接进入主题…

React、React Router 和 Redux 常用Hooks 总结,提升您的开发效率!

Hooks 是 React 16.8 中引入的一种新特性,它使得函数组件可以使用 state 和其他 React 特性,从而大大提高了函数组件的灵活性和功能性。下面分别总结React、React Router 、Redux中常用的Hooks。 常用Hooks速记 React Hooks useState:用于…

ssm088基于JAVA的汽车售票网站abo+vue

汽车售票网站的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对汽车售票信息管理混乱,出错率…

基于stm32的USB模拟UART的尝试F429

目录 基于stm32的USB模拟UART的尝试F429实验目的场景使用原理图USBX 组件移植USBX实现虚拟串口配置USB移植USBX源码工程中添加对应源码修改usb_otg.c创建 USBX 任务添加使用串口的代码上机现象本文中使用的测试工程 基于stm32的USB模拟UART的尝试F429 本文目标:基于…

uniapp-vue3-wechat:基于uniapp+vue3仿微信app聊天实例(H5+小程序+App端)

uni-vue3-wchat:基于uni-appvue3pinia2高仿微信app聊天模板。 原创基于最新跨端技术uni-appvue3.xpinia2vite4uv-ui构建三端仿微信app界面聊天实例。实现编辑框多行消息/emoj混合、长按触摸式仿微信语音面板、图片/视频预览、红包/朋友圈等功能。支持编译到H5小程序…

数据结构与算法-抽象数据类型ADT系列

以前在学习数据结构的时候做实验,老师要求用ADT抽象数据类型来写这些实现代码。后面也要复习数据结构,在这里就先放下链接。不过以前学习的时候使用的编程语言是C,里面会用到很多指针。现在编代码过程大多数时候都是用Java。不过思路应该还是…

keytool,openssl的使用

写在前面 在生成公钥私钥,配置https时经常需要用到keytool,openssl工具,本文就一起看下其是如何使用的。 keytool是jdk自带的工具,不需要额外下载,但openssl需要额外下载 。 1:使用keytool生成jks私钥文件…

WEB攻防-IIS中间件PUT漏洞

IIS6.0 server在web服务扩展中开启了WebDAV(Web-based Distributed Authoring and Versioning)。WebDAV是一种HTTP1.1的扩展协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,如PUT&#xff0c…

自动驾驶横向控制算法

本文内容来源是B站——忠厚老实的老王,侵删。 三个坐标系和一些有关的物理量 使用 frenet坐标系可以实现将车辆纵向控制和横向控制解耦,将其分开控制。使用右手系来进行学习。 一些有关物理量的基本概念: 运动学方程 建立微分方程 主要是弄…

Linux进程——进程的概念(PCB的理解)

前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux的下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”才能更好的理解进程的含义。 Linux进程学习基…