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官网:https://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』。