关于c:S3C2440移植linux342内核之支持YAFFS文件系统

36次阅读

共计 2198 个字符,预计需要花费 6 分钟才能阅读完成。

上一节 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_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:

drivers\mtd\nand\Nand_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 内核之内核裁剪咱们将裁剪内核。

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

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

正文完
 0