原文地址:yaffs第一篇――yaffs direct综述 作者:myleeming
最近做了一件事情,就是把yaffs从linux中拨出来移植到了实地址模式下(yaffs direct),既然是实地址,所以可以直接用在不跑操作系统的程序中,或者运行ucos, nucleus等实地址的操作系统。网上盛行的将yaffs移植到c51下就是这种方式。yaffs 为这种方式起了个名字叫yaffs dircet,其实这部分的移植只要理解了yaffs的基本框架,读一下yaffs中documents,个人觉得难度不大,这里就不把移植过程贴出来了,如果各位有需要,可以发邮件告诉我,leeming1203@gmail.com,可以提供代码。
好像有点跑题了,为什么之前讲了这么一大堆关于yaffs directory的话,因为如果要真正的理解yaffs,看yaffs directory是最方便,也是最容易理解yaffs核心的方法。因为yaffs direct直接是文件系统和nandflash之间的交互,少了在linux mtd的概念,能更清晰的理解,当然核心代码是不变的。而且阅读yaffs direct还有一个好处,少去了linux下vfs的转换,可以清楚的看到怎么样来构建一个文件系统,怎么对一个文件进行读写,特别是yaffs direct可以直接用ice单步,感觉棒极了!
先贴一段基于yaffs direct的应用代码:
int file_rw_test(void)
{
int a;
int i;
char buffer1[1000];
memset(buffer1,0,sizeof(buffer1));
yaffs_StartUp();
yaffs_mount("/flash");
a = yaffs_open("/flash/j",O_CREAT | O_RDWR , S_IREAD | S_IWRITE);
yaffs_lseek(a,0,SEEK_SET);
yaffs_write(a,"abcdefghijklmnopqrstuvwxyz",20);
yaffs_lseek(a,0,SEEK_SET);
yaffs_read(a,buffer1,20);