我个人觉得nandflash上用yaffs2文件系统是很好的方案,但是最新的Linux并不支持yaffs2文件系统,需要你自己给内核打补丁,不过话说在前面,由于内核间差异及兼容问题,在编译时肯定会出现各种编译问题,需要你一一的去解决。

   一、准备工作

  1. 下载源码

    使用git工具下载:$ git clone git://www.aleph1.co.uk/yaffs2

   2. 给内核打补丁

    下载完成后,在该执行目录下会有yaffs2文件夹,进入该文件夹。

   $  ./patch-ker.sh c m ../../kernel/test/linux-3.14.4

Updating ../../kernel/test/linux-3.14.4/fs/Kconfig
Updating ../../kernel/test/linux-3.14.4/fs/Makefile

   有以上两个信息,说明已经打好补丁,并且在fs/目录下,多了yaffs2文件夹,其实这是从yaffs2文件夹中复制过来的。

   二、内核配置

   下面配置内核,在linux目录下make menuconfig

   我们发现在File system—>Miscellaneous filesystems—>下面并找不到yaffs2选项。原来是这样的

    查看YAFFS2的Kconfig文件,需要先选择MTD_BLOCK才会有显示YAFFS2

      也就说需要先选择Device Drivers-->MTD-->Caching block device access to MTD devices,然后才能够在File Systems--->Miscellaneous filesystem下面找到YAFFS2。

image
    image

好的 ,配置完后,这下要执行make clean;make uImage了。剩下的工作就是解决一大堆编译错误了!!!!

下面看看编译的错误:

1. 出现error: incompatible types when initializing type 'uid_t' using type 'kuid_t' ,应该是不兼容问题导致,修改:

uid_t改为kuid_t和gid_t 改为kgid_t

剩下的关于这个变量的问题很多,但是都是关于兼容性的,大家在修改时只需要知道只要不兼容,那我们就把所有用到的改到兼容的kuid_t为止。

这里修改的地方和文件有点多,我就不一一列出来了

2. error: implicit declaration of function 'create_proc_entry'

由于最新的内核不支持这个函数,需要注释掉并改为my_proc_entry = proc_create("yaffs",S_IRUGO | S_IFREG, YPROC_ROOT, &yaffs_fops);

最终修改如下:


3. error: unknown field 'readdir' specified in initializer

在init_yaffs_fs函数前添加以下代码

修改了以上,我们就能编译通过了。目前,内核就支持yaffs2文件系统了。

下一篇文件我们来用busybox制作yaffs2文件系统。

posted on 2014-06-08 15:27  程序马  阅读(1729)  评论(0编辑  收藏  举报