zoukankan      html  css  js  c++  java
  • S3C6410嵌入式应用平台构建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件系统移植)

    我个人觉得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文件系统。

  • 相关阅读:
    Oracle 11g学习笔记(3)
    模式识别,图像处理工程师的要求
    vc++17 进程间的通信
    vc++学习笔记16 线程同步,异步套接字
    类型转换 float与int ,(int&)a,(int)&a
    vc++学习笔记16 线程同步,异步套接字
    vc++学习之15 多线程与聊天室程序的创建
    testl指令的问题
    C语言的几种位运算
    C语言的几种位运算
  • 原文地址:https://www.cnblogs.com/lixiaoming90/p/3776292.html
Copyright © 2011-2022 走看看