zoukankan      html  css  js  c++  java
  • S3C2440移植linux3.4.2内核之支持YAFFS文件系统

    上一节S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统我们构建了根文件系统,这节我们修改内核支持yaffs2文件系统

    移植Linux3.4.2内核其他文章链接:

    S3C2440移植linux3.4.2内核之内核框架介绍及简单修改

    S3C2440移植linux3.4.2内核之修改分区以及制作根文件系统

    S3C2440移植linux3.4.2内核之支持YAFFS文件系统

    S3C2440移植linux3.4.2内核之内核裁剪

    获取yaffs2源码并给内核打补丁

      首先获取yaffs2源码(参考git命令使用详解)

    cd /work/nfs_root
    
    git clone git@github.com:lifeyx/yaffs2.git
    //若下载出现error:403,可以试试vi /etc/resolv.conf,将nameserver地址改为: 114.114.114.114
    

      将yaffs2源码来配置到内核里(使内核支持yaffs2)

    vi /work/nfs_root/yaffs2/README-linux
    

    在这里插入图片描述
      参考上图:

    /*给内核打补丁*/
    cd /work/nfs_root/yaffs2/
    ./patch-ker.sh  c m /work/system/linux-3.4.2//c:将yffs2文件夹copy到linux-3.4.2/fs里, m:指定多版本
    
    
    /*通过menuconfig,来使内核支持yaffs2*/
    cd /work/system/linux-3.4.2/
    make menuconfig
    

      搜索yaffs,找到位于:

    -> File systems
          -> Miscellaneous filesystems (MISC_FILESYSTEMS [=y])
                 <*>   yaffs2 file system support                      //按Y键,使内核支持yaffs2
    

    编译内核make uImage

      如下图所示,出现很多错误:
    在这里插入图片描述
      如上图,问题都是出在fs/yaffs2/下,很多error都讲述:调用的成员名,在struct mtd_info结构体里没有定义.

    修改yaffs2源码

      接下来我们便将fs/yaffs2文件夹添加到内核3.4的si工程中.
      然后进入yaffs2/yaffs_vfs.c,第1958行:
    (linux下显示的是yaffs_vfs.c,vi可以打开yaffs_vfs.c。但是在si工程中没有找到yaffs_vfs.c,所以从ubuntu中拷贝一份yaffs_vfs.c添加到si中。)
    在这里插入图片描述

       然而发现struct mtd_info *mtd的结构体mtd_info定义的是_sync成员,如下图所示:
    在这里插入图片描述
      所以接下来只有遇到与struct mtd_info有关的error,都在成员前加上: _

      比如:
      将yaffs_vfs.c文件2514~2515行的mtd->sync 改为: mtd->_sync
      将yaffs_vfs.c文件2702行的mtd->erase改为: mtd->_erase
      将yaffs_vfs.c文件2703行的mtd->read改为: mtd->_read
      ... ...
      并将yaffs_vfs.c的第2967行的 root = d_alloc_root(inode);改为: root = d_make_root(inode);
    在这里插入图片描述
      全部修改后,将yaffs_vfs.c上传到ubuntu,再次make uImage,
      报错如下
    在这里插入图片描述

      内核没有定义 d_alloc_root
    加粗样式

      我们在内核搜索下s_root看下别的文件系统怎么使用的。
    在这里插入图片描述在这里插入图片描述

      全部修改后,将yaffs_vfs.c上传到ubuntu,再次make uImage,报错如下
    在这里插入图片描述

      估计是缺少下划线
    在这里插入图片描述
      修改完后重新编译
      报错
    在这里插入图片描述
      同样,没有在SI工程中找到yaffs_mtdif1.c,从ubuntu中拷贝下来,添加到si工程中
      上图报错的各个文件内的函数都要添加下划线
    在这里插入图片描述

      编译报错
    在这里插入图片描述
      把ubuntu上的yaffs_mtdif2.c文件拷贝到本地假如si工程,继续上述文件中的下划线
    在这里插入图片描述

      最终编译成功
    在这里插入图片描述

    拷贝

    cp arch/arm/boot/uIamge /work/nfs_root/uImage_yaffs
    

      由于上章-我们制作了文件系统,名为fs_mini_mdev_new,所以直接使用mkyaffs2image工具制作:

    mkyaffs2image  fs_mini_mdev_new  fs_mini_mdev_new.yaffs2 
    

      然后通过uboot来烧写yaffs2、烧写uImage发现没成功,我们用替代法查找问题
       UBOOT可能有问题:换上1.1.6的UBOOT,文件系统启动成功
    发现1.1.6的UBOOT没问题,所以就是我们移植的新UBOOT有BUG:

    driversmtd
    andNand_util.c
    if (!need_skip && !(flags & WITH_DROP_FFS)) {
    

    改为

    if (!need_skip && !(flags & WITH_DROP_FFS) && !(flags & WITH_YAFFS_OOB)) {
    

      最后启动yaffs2成功:
    在这里插入图片描述
    下一节S3C2440移植linux3.4.2内核之内核裁剪我们将裁剪内核。

    有任何问题,均可通过公告中的二维码联系我

  • 相关阅读:
    [方法] 如何做产品功能设计
    js如何去除一个数组中与另一个数组中的值相同的元素
    js 导出Excel2
    js 导出Excel
    CSS3动画
    没有欲望是一种什么样的感觉
    L9-DOM高级应用
    L8-DOM操作应用
    L7-DOM基础
    L6-js定时器的应用
  • 原文地址:https://www.cnblogs.com/dongxb/p/14207446.html
Copyright © 2011-2022 走看看