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.mfbz.cn/a/583338.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年,新手做抖音小店想要赚钱,必须明白三件事!

大家好,我是电商糖果 有不少小店的商家都说过,现在的抖音小店比三四年前复杂了。 三四年前抖音小店刚刚出现,平台规则还没有那么多,很多机制也不太成熟。 那个时期的抖店说是捡钱的,一点儿都不假。 但是如果说你现…

Linux详解:进程等待

文章目录 进程等待等待的必要性进程等待的方法waitwaitpid获取子进程status阻塞等待 与 非阻塞等待 进程等待 等待的必要性 子进程退出,父进程不进行回收的话,就可能造成僵尸进程,进而造成内存泄露 如果进程进入了僵尸状态,kill…

机器学习:驱动现代交通运输革命的AI智慧引擎

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

玄子Share-引导过程与服务控制

玄子Share-引导过程与服务控制 Linux操作系统引导过程 系统初始化进程 init 进程 由 Linux 内核加载运行 /sbin/init 程序init 进程是系统中第一个进程init 进程的 PID(进程标记)号永远为 1 Systemd Systemd是Linux操作系统的一种init软件CentOS7中采用…

【Linux开发 第十二篇】搭建JavaEE环境

搭建开发环境 搭建javaEE环境 搭建javaEE环境 在Linux下开发JavaEE需要安装软件包: 安装jdk 安装步骤: 在opt目录下创建jdk目录通过xftp上床到jdk目录中进入到jdk目录中,解压jdk压缩包在/usr/local下创建java目录将解压完成的jdk文件移动…

SpringBoot框架学习笔记(一):依赖管理和自动配置

本文为个人笔记,仅供学习参考之用,如有不当之处请指出。 本文基于springboot2.5.3版本,开发环境需要是 jdk 8 或以上,maven 在 3.5 1 SpringBoot 基本介绍 1.1 官方文档 (1) 官网 : https://spring.io/pr…

张朝阳对话华为Fellow陈海波:万物智联时代,鸿蒙如何实现“换道超车”?

随着智能终端设备的普及和万物智联时代的加速到来,鸿蒙生态的高速发展正引发全行业的关注。 搜狐创始人、董事局主席兼CEO、物理学博士张朝阳与华为Fellow、基础软件首席科学家陈海波带来了一场关于鸿蒙生态的公开课。鸿蒙技术架构有哪些领先性?HarmonyOS发布5年来…

compose调用系统分享功能分享图片文件

compose调用系统分享功能图片文件 简介UI界面提供给外部程序的文件访问权限创建FileProvider设置共享文件夹 通用分享工具虚拟机验证结果参考 本系列用于新人安卓基础入门学习笔记,有任何不同的见解欢迎留言 运行环境 jdk17 andriod 34 compose material3 简介 本案…

Hadoop3:集群搭建及常用命令与shell脚本整理(入门篇,从零开始搭建)

一、集群环境说明 1、用VMware安装3台Centos7.9虚拟机 2、虚拟机配置:2C,2G内存,50G存储 3、集群架构 从表格中,可以看出,Hadoop集群,主要有2部分,一个是HDFS服务,一个是YARN服务 …

[系统安全] 六十.威胁狩猎 (1)APT攻击检测及防御与常见APT组织的攻击案例分析

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系…

四、管道与重定向

四、管道与重定向 1 重定向 0,标准输入(键盘) 1,标准输出 2,标准错误, 3,进程在执行过程中打开的其他文件。 &:表示正确错误混合输出1.1 输出重定向 (覆盖,追加) > ----覆盖 >> ----追加 正确输出: 1> 1>> 等价…

Git 仓库内容操作

Git 仓库内容操作 | CoderMast编程桅杆Git 仓库内容操作 添加文件到暂存区 使用如下指令将工作区的文件添加到暂存区,告诉 Git 在下次 commit 时哪些文件做出了修改。 commit 指令详看后续 添加一个或多个文件到暂存区: 添加指定目录到暂存区 添加当前目…

ffmpeg与sdl的个人笔记

说明 这里的ffmpeg基础知识和sdl基础知识仅提及与示例代码相关的知识点, 进阶可学习雷神的博客。 https://blog.csdn.net/leixiaohua1020 当然,如代码写的有问题或有更好的见解,欢迎指正! 音视频基础知识 在学习音视频理论知识时&#xff…

CSS中设置透明度的2个属性:opacity,RGBA以及它们的区别

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合…

试用了三个Ai音乐工具,我的偶像河图要完蛋了

试了三个生成音乐的ai工具,分别是爆火的suno,后期新秀udio,还有我们国内的天工。 先说感受,suno和天工我觉得稍微靠前,udio可能我的配置风格有问题,啪啪啪连选了好几个风格,生成的东西有点怪。 我随手写了…

【机器学习基础1】什么是机器学习、预测模型解决问题的步骤、机器学习的Python生态圈

文章目录 一. 什么是机器学习1. 概念2. 机器学习算法分类 二. 利用预测模型解决问题的步骤三. 机器学习的Python生态圈 一. 什么是机器学习 1. 概念 机器学习(Machine Learning,ML)是一门多领域的交叉学科,涉及概率论、统计学、…

深度学习 --- stanford cs231学习笔记(一)

stanford cs231学习笔记(一) 1,先是讲到了机器学习中的kNN算法,然后因为kNN分类器的一些弊端,引入了线性分类器。 kNN算法的三大弊端: (1),计算量大,当特征比较多时表示性差 (2),训练时耗时少…

01 - 安装Kettle

下载安装包 我这边提供的安装包是绿色版的,开箱即用 Kettle.exe 阿里云盘分享 提取码: 8sd5 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。 启动步骤 解压 双击Spo…

注意力机制(四)(多头注意力机制)

​🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀《深度学习基础知识》 相关专栏: ⚽《机器学习基础知识》 🏐《机器学习项目实战》 🥎《深度学习项目实…

Python | Leetcode Python题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; class Solution:def canJump(self, nums: List[int]) -> bool:n, rightmost len(nums), 0for i in range(n):if i < rightmost:rightmost max(rightmost, i nums[i])if rightmost > n - 1:return Truereturn False
最新文章