首页 理论教育 嵌入式Linux开发:JFFS2文件系统实现

嵌入式Linux开发:JFFS2文件系统实现

时间:2023-10-31 理论教育 版权反馈
【摘要】:要在Linux中的Flash存储设备上实现JFFS2文件系统,具体过程如下:1)修改设备号。由于ROM设备和MTDBlock设备的主设备号都是31,所以如果不将JFFS2作为根文件系统,就必须修改它们的主设备号。修改JFFS2的设备号,可在include/Linux/mtd/mtd.h中修改。图7-7 MTD设备层次划分4)配置内核,使其支持JFFS2。经上述操作,最终生成的JFFS2映像文件为Jffs2.img。为了使系统启动时能够自动挂载JFFS2文件系统,还可以在Ramdisk.image.gz的mnt/etc/init.d/rc$文件中加入上述指令。

嵌入式Linux开发:JFFS2文件系统实现

JFFS2是建立在MTD(MemoryTechnologyDevice)基础上的文件系统。MTD可以被理解为Flash的设备驱动程序。Linux通常通过MTD技术来支持多种Flash技术。MTD设备指的是于类似于闪存芯片和记忆棒之类的设备。使用MTD驱动程序的主要优点在于MTD驱动程序是专门为基于闪存的设备设计的,能够提供更好的基于扇区的擦除和读写操作的接口

MTD为硬件和上层之间提供了一个存储设备通用接口层,使存储设备的驱动更加简单。MTD的所有源代码都在/drivers/mtd子目录下。MTD支持CFI(CommonFlash Interface),可以将CFI的MTD设备分为4层,从上到下依次为设备节点层、MTD设备层、MTD原始设备层和硬件驱动层,如图7-7所示。

MTD包含有特定的Flash芯片的驱动程序,并且越来越多的芯片驱动正被添加进来。用户若要使用MTD,首先要选择适合系统要求的Flash芯片驱动。Flash芯片驱动向上层提供读、写、擦除等基本的Flash操作方法。MTD对这些操作进行封装后向用户层提供MTD char和MTDblock类型的设备。

要在Linux中的Flash存储设备上实现JFFS2文件系统,具体过程如下:

1)修改设备号。由于ROM设备和MTDBlock设备的主设备号(Major)都是31,所以如果不将JFFS2作为根文件系统,就必须修改它们的主设备号。修改JFFS2的设备号,可在include/Linux/mtd/mtd.h中修改。

978-7-111-33316-6-Chapter07-20.jpg

2)编写maps文件。在drivers/mtd/maps/子目录下存放的是特定的Flash数据,每一个文件都描述了一块开发板上的Flash存储器

3)修改Makefile文件。

978-7-111-33316-6-Chapter07-21.jpg(www.xing528.com)

图7-7 MTD设备层次划分

4)配置内核,使其支持JFFS2。这里需要特别注意的是MTD的选项及其子项的支持,同时还有FileSystems下与MTD、JFFS相关选项的支持。

5)制作JFFS2映像。首先取得JFFS2的制作工具mkfs.Jffs2,再执行如下命令即可生成所要的映像。

978-7-111-33316-6-Chapter07-22.jpg

经上述操作,最终生成的JFFS2映像文件为Jffs2.img。该映像中的内容即为目录Jffs_dir中的内容。可以将所开发的系统中的应用程序及需要频繁读写的数据文件复制到该目录中,根据对Flash分区的设定,将得到的映像文件Jffs2.img固化到Flash中的相应位置,这样就完成了JFFS2文件系统的移植工作。

在使用JFFS2文件系统时,只需要在启动系统时将JFFS2文件系统挂载上,就可以像访问其他文件系统一样方便地访问JFFS2分区了。挂载JFFS2文件系统的命令如下:

978-7-111-33316-6-Chapter07-23.jpg

如上所述,在Flash存储芯片上创建了4个分区,每一个分区都作为一个MTDBlock设备,分别对应/dev/mtdblock/1~/dev/mtdblock/4。其中/dev/mtdblock/4对应Jffs2分区。为了使系统启动时能够自动挂载JFFS2文件系统,还可以在Ramdisk.image.gz的mnt/etc/init.d/rc$文件中加入上述指令。当挂载成功后,就可以通过访问jffs2_mnt目录来实现对Flash分区中的程序和数据的访问了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈