YAFFS2移植到AliOS Things指南

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

  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.c block和chunk相关处理
yaffs_ecc.c ecc校验相关代码
yaffs_guts.c yaffs主要算法
affs_nameval.c 用于处理扩展属性(xattr)的名称/值代码。
yaffs_nand.c nand flash抽象接口文件
yaffs_packedtags1.c yaffs1的tag相关定义代码
yaffs_packedtags2.c yaffs2的tag相关定义代码
yaffs_summary.c 处理块信息相关代码
yaffs_tagscompat.c 兼容yaffs1模式的tag相关代码
yaffs_tagsmarshall.c 标记编组代码
yaffs_verify.c 校验相关代码
yaffs_yaffs1.c yaffs1模式相关代码
yaffs_yaffs2.c yaffs2模式相关代码

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

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

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

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

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_INLINE

typedef 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的移植。

相关文章
|
物联网
移植Alios Things 到STM32F103C8
移植Alios Things 到STM32F103C8
4903 0
|
安全 小程序 物联网
阿里云物联网操作系统AliOS Things,获国内顶级开源组织颁发大奖
12月30日,由阿里云AIoT推出的物联网操作系统AliOS Things再度拿下重要荣誉,由中国开源云联盟举办的《第十届中国云计算标准和应用大会》上,AliOS Things 入选中国优秀开源项目。
395 2
阿里云物联网操作系统AliOS Things,获国内顶级开源组织颁发大奖
|
开发框架 IDE JavaScript
开发者新宠上线 阿里云物联网操作系统AliOS Things3.3.0发布
近日,阿里云物联网操作系统AliOS Things时隔一年,新版本AliOS Things 3.3.0正式开源发布。作为广大开发者的新宠,AliOS Things 3.3.0推出轻应用开发模式,为碎片化的物联网提供统一的操作系统解决方案。
672 1
开发者新宠上线 阿里云物联网操作系统AliOS Things3.3.0发布
|
人工智能 小程序 安全
阿里云物联网操作系统AliOS Things获国家重点研发计划立项
近日,阿里云物联网操作系统AliOS Things正式通过了国家重点研发计划重点专项2020年度立项,国家重点研发计划是我国最高级别的研发项目,意味着国家层面对AliOS Things的高度认可,该操作系统也将获得一系列的后续政策扶持。
503 1
阿里云物联网操作系统AliOS Things获国家重点研发计划立项
|
安全 小程序 物联网
阿里云物联网操作系统AliOS Things,获国内顶级开源组织颁发大奖
12月30日,由阿里云AIoT推出的物联网操作系统AliOS Things再度拿下重要荣誉,由中国开源云联盟举办的《第十届中国云计算标准和应用大会》上,AliOS Things 入选中国优秀开源项目。
阿里云物联网操作系统AliOS Things,获国内顶级开源组织颁发大奖
|
人工智能 小程序 安全
阿里云物联网操作系统AliOS Things获国家重点研发计划立项
近日,阿里云物联网操作系统AliOS Things正式通过了国家重点研发计划重点专项2020年度立项,国家重点研发计划是我国最高级别的研发项目,意味着国家层面对AliOS Things的高度认可,该操作系统也将获得一系列的后续政策扶持。
阿里云物联网操作系统AliOS Things获国家重点研发计划立项
|
开发框架 运维 监控
阿里云联合模组厂商发布内嵌AliOS Things的4G Cat 1模组
阿里云联合移远通信发布内嵌AliOS Things的4G Cat 1模组
阿里云联合模组厂商发布内嵌AliOS Things的4G Cat 1模组
|
传感器 数据可视化 NoSQL
AliOS Things+阿里云 10分钟搭建智慧农业解决方案
AliOS Things+阿里云 10分钟搭建智慧农业解决方案 1.1 样品介绍 在工业、农业物联网布线场景中以MODBUS类型为主,样品提供MODBUS类型传感器硬件和软件快速接入方案,并将传感器数据上传到阿里云物联网平台,在云端table store数据库存储,在datav数据大屏上可视化展示。
10336 4
|
数据可视化 IDE 物联网
阿里云物联网积累解读(一):AliOS Things
嵌入式工程师灵魂三问:环境搭建好了吗?调试完了吗?Emmm……可以换个板子吗?
阿里云物联网积累解读(一):AliOS Things