位置:51电子网 » 技术资料 » 嵌入式系统

uClinux下Nor Flash的JFFS2文件系统构建

发布时间:2008/5/27 0:00:00 访问次数:383

摘要:目前的嵌入式系统多使用flash作为主存,因此,如何有效管理flash上的数据非常重要。文章以sst39vf160芯片为例,讨论了在nor flash上建立uclinux的jffs2文件系统的一般步骤,从而为flash上的数据管理提供了理想的选择方式。

关键词:uclinux;nor flash;mtd;jffs2;文件系统

嵌入式系统正随着internet的发展而在各个领域得到广泛的应用,作为嵌入式应用的核心,嵌入式linux以其自由软件特性正日益被人们看好。linux具有内核小、效率高、源代码开放等优点,还内涵了完整的tcp/ip网络协议,因此非常适于嵌入式系统的应用。而作为专门运行于没有mmu的微处理器的嵌入式操作系统,uclinux更是得到广泛应用。

当前的嵌入式系统开发,需要方便灵活的使用flash。nor和nand是现在市场上两种主要的非易失闪存技术。intel于1988年首先开发出nor flash技术,彻底改变了原先由eprom和eeprom一统天下的局面。nor的特点是芯片内执行xip exe-cute in place,这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统ram中。nor的传输效率很高,在1~4mb的小容量时具有很高的成本效益,因此在嵌入式系统得到广泛的应用。

1 jffs2文件系统简介

uclinux通常默认romfs作为根文件系统,它相对于一般的ext2文件系统具有节约空间的优点。但是romfs是一种只读的文件系统,不支持动态擦写保存。虽然对于需要动态保存的数据可以采用虚拟ram盘的方法来保存,但当系统掉电后,ram盘的内容将全部丢失,而不能永久保存,因此需要实现一个可读写的文件系统。jffs2文件系统便是一个很好的选择。

jffs文件系统是瑞典axis通信公司开发的一种基于flash的日志文件系统,它在设计时充分考虑了flash的读写特性和用电池供电的嵌入式系统的特点,在这类系统中必需确保在读取文件时,如果系统突然掉电,其文件的可靠性不受到影响。对red hat的david woodhouse进行改进后,形成了jffs2。主要改善了存取策略以提高flash的抗疲劳性,同时也优化了碎片整理性能,增加了数据压缩功能。需要注意的是,当文件系统已满或接近满时,jffs2会大大放慢运行速度。这是因为垃圾收集的问题。

jffs2的底层驱动主要完成文件系统对flash芯片的访问控制,如读、写、擦除操作。在linux中这部分功能是通过调用mtd(memory technology device内存技术设备)驱动实现的。相对于常规块设备驱动程序,使用 mtd 驱动程序的主要优点在于 mtd 驱动程序是专门为基于闪存的设备所设计的,所以它们通常有更好的支持、更好的管理和更好的基于扇区的擦除和读写操作的接口。mtd相当于在硬件和上层之间提供了一个抽象的接口,可以把它理解为flash的设备驱动程序,它主要向上提供两个接口:mtd字符设备和mtd块设备。通过这两个接口,就可以象读写普通文件一样对flash设备进行读写操作。经过简单的配置后,mtd在系统启动以后可以自动识别支持cfi或jedec接口的flash芯片,并自动采用适当的命令参数对flash进行读写或擦除。

jffs2在uclinux中有两种使用方式,一种是作为根文件系统,另一种是作为普通文件系统在系统启动后被挂载。考虑到实际应用中需要动态保存的数据并不多,且在linux系统目录树中,根目录和/usr等目录主要是读操作,只有少量的写操作,但是大量的读写操作又发生在/var和/tmp目录(这是因为在系统运行过程中产生大量log文件和临时文件都放在这两个目录中),因此,通常选用后一种方式。根文件指的是romfs、var和/tmp,目录采用ramfs,当系统断电后,该目录所有的数据都会丢失。

综上所述,通常在uclinux下采用的文件系统构成如图1所示。对于本文来说,图中romfs和ramfs两个文件系统的实现是很方便的,主要需要实现的是nor flash的底层mtd驱动,下面就以sst39vf160芯片为例来介绍mtd的驱动设计方法。

2 jffs2底层mtd驱动设计

摘要:目前的嵌入式系统多使用flash作为主存,因此,如何有效管理flash上的数据非常重要。文章以sst39vf160芯片为例,讨论了在nor flash上建立uclinux的jffs2文件系统的一般步骤,从而为flash上的数据管理提供了理想的选择方式。

关键词:uclinux;nor flash;mtd;jffs2;文件系统

嵌入式系统正随着internet的发展而在各个领域得到广泛的应用,作为嵌入式应用的核心,嵌入式linux以其自由软件特性正日益被人们看好。linux具有内核小、效率高、源代码开放等优点,还内涵了完整的tcp/ip网络协议,因此非常适于嵌入式系统的应用。而作为专门运行于没有mmu的微处理器的嵌入式操作系统,uclinux更是得到广泛应用。

当前的嵌入式系统开发,需要方便灵活的使用flash。nor和nand是现在市场上两种主要的非易失闪存技术。intel于1988年首先开发出nor flash技术,彻底改变了原先由eprom和eeprom一统天下的局面。nor的特点是芯片内执行xip exe-cute in place,这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统ram中。nor的传输效率很高,在1~4mb的小容量时具有很高的成本效益,因此在嵌入式系统得到广泛的应用。

1 jffs2文件系统简介

uclinux通常默认romfs作为根文件系统,它相对于一般的ext2文件系统具有节约空间的优点。但是romfs是一种只读的文件系统,不支持动态擦写保存。虽然对于需要动态保存的数据可以采用虚拟ram盘的方法来保存,但当系统掉电后,ram盘的内容将全部丢失,而不能永久保存,因此需要实现一个可读写的文件系统。jffs2文件系统便是一个很好的选择。

jffs文件系统是瑞典axis通信公司开发的一种基于flash的日志文件系统,它在设计时充分考虑了flash的读写特性和用电池供电的嵌入式系统的特点,在这类系统中必需确保在读取文件时,如果系统突然掉电,其文件的可靠性不受到影响。对red hat的david woodhouse进行改进后,形成了jffs2。主要改善了存取策略以提高flash的抗疲劳性,同时也优化了碎片整理性能,增加了数据压缩功能。需要注意的是,当文件系统已满或接近满时,jffs2会大大放慢运行速度。这是因为垃圾收集的问题。

jffs2的底层驱动主要完成文件系统对flash芯片的访问控制,如读、写、擦除操作。在linux中这部分功能是通过调用mtd(memory technology device内存技术设备)驱动实现的。相对于常规块设备驱动程序,使用 mtd 驱动程序的主要优点在于 mtd 驱动程序是专门为基于闪存的设备所设计的,所以它们通常有更好的支持、更好的管理和更好的基于扇区的擦除和读写操作的接口。mtd相当于在硬件和上层之间提供了一个抽象的接口,可以把它理解为flash的设备驱动程序,它主要向上提供两个接口:mtd字符设备和mtd块设备。通过这两个接口,就可以象读写普通文件一样对flash设备进行读写操作。经过简单的配置后,mtd在系统启动以后可以自动识别支持cfi或jedec接口的flash芯片,并自动采用适当的命令参数对flash进行读写或擦除。

jffs2在uclinux中有两种使用方式,一种是作为根文件系统,另一种是作为普通文件系统在系统启动后被挂载。考虑到实际应用中需要动态保存的数据并不多,且在linux系统目录树中,根目录和/usr等目录主要是读操作,只有少量的写操作,但是大量的读写操作又发生在/var和/tmp目录(这是因为在系统运行过程中产生大量log文件和临时文件都放在这两个目录中),因此,通常选用后一种方式。根文件指的是romfs、var和/tmp,目录采用ramfs,当系统断电后,该目录所有的数据都会丢失。

综上所述,通常在uclinux下采用的文件系统构成如图1所示。对于本文来说,图中romfs和ramfs两个文件系统的实现是很方便的,主要需要实现的是nor flash的底层mtd驱动,下面就以sst39vf160芯片为例来介绍mtd的驱动设计方法。

2 jffs2底层mtd驱动设计

-->
相关IC型号

热门点击

 

推荐技术资料

DFRobot—玩的就是
    如果说新车间的特点是“灵动”,FQPF12N60C那么... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!