Linux内核移植笔记 | 04 - 移植Linux 3.4.2 内核到JZ2440(移植支持yaffs2文件系统)

502 阅读3分钟

1. yaffs2文件系统

YAFFS全称为 Yet Another Flash File System 是第一个在GPL协议下发布的、基于日志的、专门为NAND Flash存储器设计的、适用于大容量的存储设备的嵌入式文件系统。

YAFFS文件系统目前已经发展到YAFFS2,它向前兼容YAFFS1,主要特点是支持每页容量大于512字节的Nand Flash,相较于YAFFS1,YAFFS2的性能大幅提升。

一般而来,在Nor Flash上使用JFFS2文件系统,在Nand Flash上使用YAFFS2文件系统

2. 添加yaffs2源码到内核

2.1. 获取源码

访问yaffs官网:yaffs.net,进入下载页面即可看到,可以使用git直接拉取:

git clone git://www.aleph1.co.uk/yaffs2

2.2. 打补丁

打开yaffs2源码目录下的README-linux-patch文件即可看到打补丁的方法:

首先在yaffs源码目录下,运行打补丁的脚本patch-ker.sh,其中:

  • c 参数表示copy,复制yaffs2源码文件到Linux内核源码中;
  • m 参数表示使用多版本代码,官方推荐;
  • 最后一个参数表示Linux源码路径

所以这里我执行的命令如下:

cd yaffs2/
./patch-ker.sh c m ../linux-kernel-jz2440/linux-3.4.2

这条命令会将yaffs2源码拷贝到Linux内核源码中的fs/yaffs2文件夹下:

2.3. 配置内核,开启yaffs2支持

进入Linux内核目录,打开配置界面:

make menuconfig

进入 File systems -> Miscellaneous filesystems ,开启yaffs2文件系统支持:

退出并保存,然后编译内核:

make uImage

编译成功:

然后将内核下载到TFTP服务器目录中,后续使用。

3. 制作yaffs2映像文件

3.1. 编译制作工具mkyaffs2image

yaffs2源码的utils文件夹下自带的工具源码没有修改,无法使用,这里使用JZ2440官方提供的工具。

可以在文末关注我的微信公众号,回复“yaffs“获取下载链接。

下载工具包之后,首先解压:

tar -jxvf yaffs_source_util_larger_small_page_nand.tar.bz2

解压之后进入Development_util_ok/yaffs2/utils目录:

cd Development_util_ok/yaffs2/utils

执行make命令编译:

make

编译之后产生的两个可执行文件(绿色)如下:

接着将这需要的可执行文件mkyaffs2image复制到/usr/local/bin下面去:

sudo cp mkyaffs2image /usr/local/bin/

这样就可以直接在命令行使用这个命令了。

3.2. 制作映像

在上一节(Linux内核移植笔记 | 03 - 移植Linux 3.4.2 内核到JZ2440(使用busybox制作根文件系统))中,制作出的文件系统映像是jffs2格式,在本文中将要将根目录制作为yaffs2文件格式。

制作方法也是非常简单,首先进入到存放有根目录的目录:

然后执行制作命令:

mkyaffs2image fs_mini_mdev fs_mini_mdev.yaffs2

制作完成:

将生成的映像文件下载到TFTP服务器目录,再下载到开发板的nand falsh对应分区中:

tftp 30000000 fs_mini_mdev.yaffs2
nand erase.part filesystem
nand write.yaffs 30000000 260000 <tftp传输的文件大小>

接着设置uboot的环境变量,去掉jffs2指定:

set bootargs console=ttySAC0,115200 root=/dev/mtdblock3

然后下载之前第2小节中重新编译的支持yaffs2文件系统的内核:

tftp 30000000 uImage
bootm 30000000

注意:uImage大小超过2MB,不能烧写到nand flash的kernel分区中,下一篇文章中经过裁剪到<2MB才能烧录到nand flash中。

成功启动内核,挂载文件系统,进入Linux命令行:

接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』