上一节S3C2440移植linux3.4.2内核之批改分区以及制作根文件系统咱们构建了根文件系统,这节咱们批改内核反对yaffs2文件系统
@[TOC]

移植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_rootgit 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:

drivers\mtd\nand\Nand_util.cif (!need_skip && !(flags & WITH_DROP_FFS)) {

改为

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

  最初启动yaffs2胜利:

下一节S3C2440移植linux3.4.2内核之内核裁剪咱们将裁剪内核。

如遇到排版错乱的问题,能够通过以下链接拜访我的CSDN。

**CSDN:[CSDN搜寻“嵌入式与Linux那些事”]