YAFFS2移植到AliOS Things指南

摘要: YAFFS2介绍 YAFFS(Yet Another Flash File System)是第一个专门为NAND Flash存储器设计的嵌入式文件系统,适用于大容量的存储设备。YAFFS 是基于日志的文件系统,提供磨损平衡和掉电恢复的健壮性。

点此查看原文:http://click.aliyun.com/m/41950/

YAFFS2介绍

YAFFS(Yet Another Flash File System)是第一个专门为NAND Flash存储器设计的嵌入式文件系统,适用于大容量的存储设备。YAFFS 是基于日志的文件系统,提供磨损平衡和掉电恢复的健壮性。它还为大容量的Flash 芯片做了很好的调整,针对启动时间和RAM 的使用做了优化。它适用于大容量的存储设备,Yaffs代码已成功用于许多不同的32位和64位CPU,包括MIPS,68000,ARM,ColdFire,PowerPC和x86,甚至被用于各种DSP架构芯片。

目前有YAFFS和YAFFS2两个版本,YAFFS1和YAFFS2主要差异在于PAGE读写size的大小,YAFFS2可支持到2K Bytes page, 远高于YAFFS的512 Bytes, 因此对大容量NAND Flash更具优势。YAFFS2是目前NAND Flash的首选文件系统。

YAFFS2具有如下特点:

  1. 使用C代码编写,支持大端和小端处理器,易于移植。
  2. 提供nand flash坏块处理机制和ECC校验算法,可发现并纠正一定量的位翻转。
  3. 采用日志式文件系统设计,异常掉电不会造成文件系统破坏,掉电后恢复速度快。
  4. 拥有高度优化和可预测的垃圾收集策略,具有优异的性能和高度的确定性。
  5. 比大多数日志式文件系统具有更低的内存占用。
  6. 支持POSIX接口,易于使用。

YAFFS2移植

1. YAFFS2源码获取

官方网站:https://yaffs.net/get-yaffs

代码分为如下几部分:

A、核心文件系统代码,位于yaffs2目录下

文件说明
yaffs_allocator.c分配Yaffs对象和tnode结构
yaffs_bitmap.cblock和chunk相关处理
yaffs_ecc.cecc校验相关代码
yaffs_guts.cyaffs主要算法
affs_nameval.c用于处理扩展属性(xattr)的名称/值代码。
yaffs_nand.cnand flash抽象接口文件
yaffs_packedtags1.cyaffs1的tag相关定义代码
yaffs_packedtags2.cyaffs2的tag相关定义代码
yaffs_summary.c处理块信息相关代码
yaffs_tagscompat.c兼容yaffs1模式的tag相关代码
yaffs_tagsmarshall.c标记编组代码
yaffs_verify.c校验相关代码
yaffs_yaffs1.cyaffs1模式相关代码
yaffs_yaffs2.cyaffs2模式相关代码

B、直接接口文件,位于yaffs2/direct目录下

文件说明
yaffs_attribs.c属性处理代码
yaffs_error.c错误报告代码
yaffsfs.cYaffs直接接口封装代码
yaffs_hweight.c字节使用频率统计代码
yaffs_qsort.cyaffs2扫描使用到的qsort代码

C、flash驱动程序示例,以及用于测试的模拟器和配置,位于yaffs2/direct/ test-framework目录下

D、相关测试用例,位于其他目录下

详见官方文档:https://yaffs.net/documents/yaffs-direct-interface

2. 添加文件

将如下文件拷贝到AliOS-Things/kernel/modules/fs/yaffs2目录下,并编写相应makefile或者添加到相应的工程。
file

a) 这些文件在位于源码的yaffs2和yaffs2/direct目录下。
b) yportenv.h、yaffs_attribs.c文件有多个,前者使用direct目录下版本,后者使用yaffs2目录下版本。
c) yaffs_alios.c、yaffs_install_drv.c、yaffs_install_drv.h这三个文件用于适配AliOS-Things和驱动,见kernel/modules/fs/yaffs2目录。

3. 代码适配

3.1 增加相应数据和函数定义

a) yportenv.h
增加如下代码:

#define CONFIG_YAFFS_DIRECT
#define CONFIG_YAFFS_PROVIDE_DEFS
#define CONFIG_YAFFSFS_PROVIDE_VALUES
#define CONFIG_YAFFS_DEFINES_TYPES#define inline  RHINO_INLINEtypedef long off_t;
typedef unsigned long loff_t;
typedef long dev_t;
typedef int mode_t;

b) yaffsfs.c
增加如下代码:

unsigned int yaffs_trace_mask = 0;unsigned int strnlen(const char *s, unsigned int max) {register const char *p;for(p = s; *p && max--; ++p);return(p - s);}

c) yaffs_list.h
增加如下代码:

#define inline  RHINO_INLINE

3.2 对接操作系统

与AliOS-Things适配的操作系统接口已经实现好,直接包含yaffs_alios.c即可。

该文件中实现了yaffsfs_Lock、yaffsfs_Unlock、yaffsfs_CurrentTime、yaffsfs_malloc、yaffsfs_free等函数的对接,另外还创建了一个用于yaffs的后台任务。

yaffsfs_CheckMemRegion函数用于检查内存地址是否有效,需用户自己根据具体硬件补充实现。

操作系统接口函数列表如下:

void yaffsfs_Lock(void)void yaffsfs_Unlock(void);
u32 yaffsfs_CurrentTime(void)int yaffsfs_GetLastError(void)void yaffsfs_SetError(int err)void *yaffsfs_malloc(size_t size)void yaffsfs_free(void *ptr)void yaffsfs_OSInitialisation(void)void yaffs_bug_fn(const char *file_name, int line_no)int yaffsfs_CheckMemRegion(const void *addr, size_t size, int write_request)

3.3 对接nand flash驱动

yaffs_install_drv.c用于yaffs对接nand flash驱动,用户需根据硬件配置param中的参数,并实现如下驱动函数:

static int nand_WriteChunk(struct yaffs_dev *dev, int nand_chunk,const u8 *data, int data_len,const u8 *oob, int oob_len);
static int nand_ReadChunk(struct yaffs_dev *dev, int nand_chunk,u8 *data, int data_len,u8 *oob, int oob_len,enum yaffs_ecc_result *ecc_result);
static int nand_EraseBlock(struct yaffs_dev *dev, int block_no);
static int nand_MarkBad(struct yaffs_dev *dev, int block_no);
static int nand_CheckBad(struct yaffs_dev *dev, int block_no);
static int nand_Initialise(struct yaffs_dev *dev);

完成以上步骤即完成YAFFS2的移植。

扫码获取更多资讯:



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

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

相关文章

阿里云十年,从去“IOE”到引领云原生浪潮

戳蓝字“CSDN云计算”关注我们哦!作者 | 孙浩峰出品 | CSDN云计算(ID:CSDNcloud)2008年,王坚从微软亚洲技术研究院空降阿里,担任首席架构师。这个在阿里内部尊称为“博士”的首席架构师所学却是一个心理学博…

linux下mtr命令,如何使用Linux mtr命令

对于经常和Linux打交道的技术人员来说,mtr命令是一个非常实用的Linux命令。它可以进行实时网络诊断。本篇文章分享了linux mtr命令的详细使用示例。以下描述来自mtr命令的软件包信息。Mtr是一种网络诊断工具,将ping和traceroute组合到一个程序中。Mtr提供…

IntelliJ IDEA 单行注释调整

部分人并不习惯这种风格,所以一般会设置为单行注释的两个斜杠跟随在代码的头部,在File -> Setting -> Editor -> Code Style -> Java -> Code Generation 下如图设置即可

高速通道-冗余物理专线接入-健康检查配置

摘要: 组建混合云,用户的IDC需要通过物理专线与阿里云VPC互通,多线冗余是基本配置需求。阿里云提供的冗余冗余切换方案是在VPC中,用户掌握切换原理,即可自主在控制台完成冗余负载配置。 一 VPC健康检查IP机制1 健康检查…

OpenStack精华问答 | OpenStack的目标是什么?

关于OpenStack的争议,从未停止,每每关于它的消息,都会一石激起千层浪。今天就让我们看看关于OpenStack的问答吧。1Q : 什么是OpenStack?A : OpenStack,是目前最为流行的开源云操作系统框架。深入理解OpenStack需要围绕…

linux创建定时任务命令,linux设置定时任务的方法步骤

一,首先登录二,找到文件夹三,查看定时任务crontab -l四,vi root 编辑定时任务 编辑完成后,点ESC,然后:wq时间格式分钟 小时 日期 月份 周 命令数字范围 0-59 0-23 1-31 1-12 0-7 echo "hello" &g…

idea terminal终端修改为git bash设置

idea terminal终端修改为git bash设置: 修改前: 修改后:

iOS KVO crash 自修复技术实现与原理解析

摘要: 【前言】KVO API设计非常不合理,于是有很多的KVO三方库,比如 KVOController 用更优的API来规避这些crash,但是侵入性比较大,必须编码规范来约束所有人都要使用该方式。有没有什么更优雅,无感知的接入…

数据中心网络架构的问题与演进 — 传统路由交换技术与三层网络架构

戳蓝字“CSDN云计算”关注我们哦!文章目录目录传统路由交换技术路由和交换交换技术传统的 2 层交换技术具有路由功能的 3 层交换技术具有网络服务功能的 7 层交换技术路由技术三层网络架构核心层(Core Layer)汇聚层(Aggregation L…

10分钟上线 - 利用函数计算构建微信小程序的Server端

摘要: 阿里云函数计算是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。微信小程序是一种不需要下载安装即可使用的应用,它可以在微信内被便捷地获取和传播。 当微信小程序遇见serv…

'cross-env' 不是内部或外部命令,也不是可运行的程序

解决方案: 运行: cnpm i cross-env --save-dev

监控linux内存,linux 监控系统资源-内存

监控内存使用量:思路:使用free -m 提取相关数据,算出使用内存量输入到文件,并且每一次计算都与当前文件中的数据对比,大于文件中的数据则替换。保留当天最大内存使用量,每天发送邮件(可以单独写个发邮件的脚本)。脚本可…

AI+DevOps正当时

戳蓝字“CSDN云计算”关注我们哦!随着业务复杂化和人员的增加,开发人员和运维人员逐渐演化成两个独立的部门,他们工作地点分离,工具链不同,业务目标也有差异,这使得他们之间出现一条鸿沟。而发布软件就是将…

SpringBoot集成Flowable_Jsite待办任务菜单报500

JSite 快速开发框架,内置Flowable工作流引擎 五大基础模块 前后端基础代码自动生成 权限精确控制。 说明:此版本我已经调通,最新版本正在更新,页面未处理好,因此采用历史版本。 文章目录一、克隆/打开项目1.1. 搜索…

阿里云SDK再升级,宣布支持C++语言

摘要: 日前,阿里云官方SDK发布支持新语言——C 语言SDK,意味着90%以上产品可以随时生成并发布C SDK,给C 语言的开发者使用。 此次阿里云发布支持C SDK的新功能,可以让C 语言开发者更加便捷地使用SDK调用产品API来操作产…

网络存储 linux 访问,Linux基础教程学习笔记28——使用Samba访问网络存储

Linux基础教程学习笔记28——使用Samba访问网络存储SMB用于Windows和类Linux系统直接的文件共享安装samba client包:[rootlinuxidc~]# yum install samba-client\* -y使用smbclinet命令查看和访问windows共享的文件夹资源:12345678910111213 [rootlinuxi…

IDC Q1中国云服务报告:公有云IaaS市场增速持续高于全球

2019年8月2日,市场研究机构IDC发布了《2019Q1中国公有云服务市场跟踪报告》。报告显示,中国公有云市场发展强劲,2019年Q1公有云IaaS市场同比增长74%,头部效应明显,市场集中度较去年持续提升。头部厂商中,阿…

SpringBoot集成Flowable_Jsite已办任务菜单报500

JSite 快速开发框架,内置Flowable工作流引擎 五大基础模块 前后端基础代码自动生成 权限精确控制。 说明:此版本我已经调通,最新版本正在更新,页面未处理好,因此采用历史版本。 文章目录一、克隆/打开项目1.1. 搜索…

《阿里巴巴Java开发手册》发布一周年!你不知道的背后故事!

摘要: 今天是2月9日,也是《阿里巴巴Java开发手册》(下称《手册》)对外正式发布一周年的日子。在过去的300多个日子里,这本小小的手册在业界产生了巨大的影响力。值此一周年之际,我们不妨一道围炉煮酒&#…

谁不喜欢《长安十二时辰》? | Alfred数据室

戳蓝字“CSDN云计算”关注我们哦!作者 | AlfredWu来源 | Alfred数据室最近,悄悄上线的《长安十二时辰》在朋友圈被吹爆了:年度最佳古装剧、服道化精致、电影质感、良心剧等赞美的声音不绝于耳。该剧首播时在豆瓣拿到了8.8的高分,但…