博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
YAFFS2移植到AliOS Things指南
阅读量:5757 次
发布时间:2019-06-18

本文共 3086 字,大约阅读时间需要 10 分钟。

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

点此查看原文:

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具有如下特点:

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

YAFFS2移植

1. YAFFS2源码获取

官方网站:

代码分为如下几部分:

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

图片描述
图片描述

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

图片描述

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

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

详见官方文档:

2. 添加文件

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

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://phvkx.baihongyu.com/

你可能感兴趣的文章
递归调用 VS 循环调用
查看>>
通用词向量、句向量研究现状
查看>>
win10安装sdkman(posh-gvm)
查看>>
常用排序算法总结
查看>>
使用sstream读取字符串中的数字(c++)
查看>>
如何提高还在用window系统的编码硬效率
查看>>
树莓派下实现ngrok自启动
查看>>
javascript静态类型检测工具—Flow
查看>>
MachineLearning-Sklearn——环境搭建
查看>>
node学习之路(二)—— Node.js 连接 MongoDB
查看>>
Goroutine是如何工作的?
查看>>
《深入理解java虚拟机》学习笔记系列——垃圾收集器&内存分配策略
查看>>
用grunt搭建自动化的web前端开发环境-完整教程
查看>>
研究人员发现:基于文本的AI模型容易受到改述攻击
查看>>
TriggerMesh开源用于多云环境的Knative Event Sources
查看>>
GitLab联合DigitalOcean为开源社区提供GitLab CI免费托管
查看>>
通过XAML Islands使Windows桌面应用程序现代化
查看>>
区块链现状:从谨慎和批判性思维看待它(第二部分)
查看>>
苹果公司透露Siri新发音引擎的内部原理
查看>>
GCM 3.0采用类似方式向Android、iOS和Chrome发送消息
查看>>