您的位置:首页 > 编程语言 > PHP开发

在dsp DM642上移植YAFFS2之一:概况与方案

2008-12-10 11:03 267 查看
                Yaffs2 之一:Yaffs2的选择与考虑
由于项目里面用到大容量的NAND-flash,所以考虑采用 yaffs2的文件系统来做,因为用来管理NAND的一般用yaffs 与 Jffs ,但由于jffs需要更多内存空间,及代码量大,所以一般会选择Yaffs来做。 FAT也可用,但需要做大量修改工作,而且Yaffs在linux 上用得成熟,大其系统上也很成功。
因为Yaffs是直接挂在linux 系统上的,而我的是处理器是DSP 或 nios, 所以剥去与linux 相关的部分。如何下面先查找相关的信息,
1,  下载源码:可以下面网站下到Yaffs 与 Yaffs2 。
http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/ #dirlist  
 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

2,  解压后有如下内容:
一堆C源码,四个文件夹: direct, mtdemul, patches , utils
 其中各文件夹与文件的功能与意义参见http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/yaffs2/
 

3,读guide可得到:
  Yaffs原来是为linux设计的,但是它是按模块化方式设计的,file-system-specific 也与主filesystem分开了,这样通过os moudle可以很方便地植入到其它操作系统,也可以不用RTOS,这个性化模块就是YAFFS Direct Interface (YDI),

 Yaffs支持32位的处理器,对16bit以下的需要做较多修改.

 Yaffs 有三部接口供程序员做移植与应用:1- 应用程序接口,2- RTOS集成接口, .

1-     应用程序接口:

是定义在yaffsfs.h文件里面,是带有yaffs_前缀的c标准库函数,如下(部分)

    int  yaffs_open(,,);

    int  yaffs_close(int fd);

    int  yaffs_flush(int fd);

    int  yaffs_access(,,);

    int  yaffs_read(,,);

    int  yaffs_write(,,);

    int  yaffs_lseek(,,);

    int  yaffs_rename(,,,)

    int  yaffs_mount(path)

    int  yaffs_unmount(path);

    int  yaffs_freespace(,,);

    int  yaffs_totalspace(,,);

    int  yaffs_startup();

应用例子如下:

    int maint(…)

    {  //initialsation

       f= yaffs_open(…);

       yaffs_read(f,…);

       yaffs_close(f);

     }  

 

 

2-     RTOS集成接口:

  为了能集成到操作系统里面,必顺针对RTOS的特点来修改配置文件yaffscfg.c,在yaffscfg.c文件里面定义了系统的接口,如void yaffsfs_SetErro(int err);

a726

void yaffsfs_Lock(void);

void yaffsfs_Unlock(void);

void yaffsfs_LocalInitialsation(void);

如果yaffs 用在多线程环境,这个void yaffsfs_LocalInitialsation(void)将初始化适应RTOS的信号与旗语,并用yaffs_Lock,yaffs_Unlock来lock 和 release 旗语.

   另外,yaffs 也需要申请内存与释放内存的函数,默认为 malloc()和 free();其它函数在ydirectenv.h 里面。 在用yaffs文件系统时候,首先要调用 yaffs_StartUp(),和yasffs_mount(),如下例子:

          yaffs_StarUp();

          yaffs_mount(“/boot”);

 

 

3 – NAND 配置与访问接口

  这一部分包括配置与访问函数,在yasffscfg.c文件里面的yaffs_StartUp();

yaffs_DeviceConfiguration 是一个入口它分成两部分:mount 点名字和yaffs_Device.

yaffs_Device是一个逻辑实体,对应下面几个情况:整个flash芯片,一部flash芯片,或其它非flash设备。也就说多个yaffs_Device可以放在一块芯片里面。

 

总体查到这里,下面工作就是针对 YAFFS Direct Interface的读解与移植.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息