一、前言
主要讲述针对 Flash 设备而发展的两种文件系统JFFS2和cramfs。依然以实操为主,理论为辅,所有的数据都通过本人验证。
JFFS2和cramfs都是基于MTD驱动程序。JFFS2文件系统是第二代日志闪存文件系统,主要应用在NOR flash,并提供耗损均衡技术。缺点是当文件系统变满时,因为垃圾收集的增多导致运行速度会受影响。JFFS2文件系统挂载时会扫描整个flash中的内容。
Cramfs文件系统是一个简单小巧的文件系统,可以对文件进行压缩,很适合放到小容量的ROM中,Cramfs属于一种只读压缩文件系统。Cramfs速度快效率高,由于只读特性可以保护文件系统免受破坏。
在下一章介绍网络文件系统NFS,NFS是在嵌入式开发过程必备的技术手段。
二、实操JFFS2文件系统
在工作站(unbutn)构建JFFS2镜像,需要mkfs.jffs2工具,该工具需要在工作站上安装。在工作站安装mkfs.jffs2工具,生成的jffs2镜像在mtd子系统中使用。
1、工作站安装mkfs.jffs2工具
2、构建JFFS2镜像
rootfs_mini6410文件夹是目标板默认的根文件系统,JFFS2镜像是从一个目录构建而来,目录中包含我们想放到这个文件系统镜像中的所有文件。当这个目录放置了合适的运行文件后,就可以作为mkfs.jffs2目录的模板了。mkfs.jffs2命令会从一个目录树生成一个格式化好的JFFS2文件系统镜像。-d表示文件系统模板位置,-o表示指定输出文件的文件名,最终的JFFS2镜像会被写入jffs2.bin文件中。
3、配置目标板内核以支持JFFS2文件系统
目标板内核需要配置开启MTD的命令行分区表解析,具体位置“Device Drivers”->” Memory Technology Device (MTD) support”->” Command line partition table parsing”,将该功能编译进内核。
配置JFFS2文件系统驱动为模块,可以动态加载到目标板内核中测试。配置位置“File systems”->”Miscellaneous filesystems”,将“Journalling Flash File System v2(JFFS2) support”配置为动态模块,其他配置为编译进内核。
4、编译内核(工作站上编译)
5、更换内核和加载JFFS2文件系统驱动(在目标板上操作)
将新编译出来的zImage拷贝到SD卡启动盘中进行内核升级。如何对mini6410进行内核烧写请自行解决。更换完内核后,加载JFFS2文件系统,如下图所示。
JFFS2镜像jffs2.bin在本节没有进行挂载,会在后续MTD子系统系列章节中介绍,挂载的命令为“mount -t jffs2 /dev/sdb1 /mnt/app_ext/”。
三、实操cramfs文件系统
在工作站(unbutn)构建cramfs镜像,需要cramfs工具,该工具需要在工作站上安装。
1、工作站安装cramfs工具
先安装需要的ruby和zlib1g-dev库,再下载Cramfs源码解压进行编译安装。Cramfs源码可以在sourceforge上下载
进行编译,编译通过后会在当前目录下生成cramfsck和mkcramfs两个可执行文件。
将生成的可执行二进制文件拷贝到sbin目录下,可以在任何目录下调用。
2、制作cramfs文件系统
这里依然使用目标板默认的根文件系统目录作为模板,这个模板有大小限制,指定cramfs.image文件为目标文件。将生成的目标文件cramfs.image拷贝到上一节制作的ext3类型的分区中,即sda3分区。
3、配置目标板内核支持cramfs文件系统
将cramfs文件系统驱动编译为模块,可以动态加载。
4、编译内核
5、加载cramfs文件系统驱动并挂载
使用第三章“「嵌入式文件系统(三)」ext3和ext4”教授的ftp方法,将cramfs.ko文件从工作站传输到目标板上。
将TF卡媒介插入目标板上,首先挂载sda3分区到/mnt/ext3_test挂载点下,因为cramfs文件系统在这个分区存放。最后使用mount挂载ext3_test文件夹下的cramfs文件系统到/mnt/cramfs挂载点下,进入/mnt/cramfs文件夹发现根文件系统都解压了出来。
“loop是mount用来加载loop设备的选项,不是文件系统类型。loop:用来把一个文件当成硬盘分区挂接上系统”。
自此JFFS2和cramfs类型文件系统实操结束。JFFS2和cramfs类型文件系统生成的目标文件可以通过下载器烧写到flash中,嵌入式系统启动时挂载上。
参考链接:https://author.baidu.com/home?from=bjh_article&app_id=1717766052434706