共计 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 那些事”]