当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]摘要:目前的嵌入式系统多使用FLASH作为主存,因此,如何有效管理FLASH上的数据非常重要。文章以SST39VF160芯片为例,讨论了在Nor Flash上建立uClinux的JFFS2文件系统的一

摘要:目前的嵌入式系统多使用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驱动设计 本文采用的系统以三星公司的SND-100为母板,CPU为ARM7TDMI芯片S3C4510B,16M的SDRAM,Nor Flash为SST39VF160,容量为1M%26;#215;16bit,速度为70ns,通过16位数据总线与CPU交换数据,擦写次数典型值为10万次。 在linux-2.4.xdriversmtdmaps目录下,每一个文件都是一个具体的MTD原始设备的相关信息,包括该MTD原始设备的起始物理地址、大小、分区情况、读写函数、初始化和清除程序。设计时,需要对SST39VF160编写相关的程序,假设为S3C4510B.C。则需要进行以下几点操作: (1) 定义SST39VF160在系统中的起始地址、大小、总线宽度 #define WINDO DDR 0x1000000|0x04000000 //注意FLASH分区地址必须是non-cacheble #define WINDOW SIZE 0x200000 #define BUSWIDTH 2 (2) 定义SST39VF160分区 典型的内存分区应包括:内核引导区、Linux内核区、应用区。其中内核引导区用来保存内核加载程序,Linux内核区存放的是经过压缩的uClinux内核,应用区则用来保存用户的数据和应用程序,该区设为我们要采用的JFFS2文件系统。具体如下: static struct mtd_partition s3c4510_partitions[]={ { name: ″bootloader(128K)″, size: 0x20000, offset: 0x0000, mask_flags:MTD_WRITEABLE //设置成只读区域 }, { name: ″uClinux_kernel(832K)″, size: 0xd0000, offset: 0x20000, },? { name: ″jffs2 (1088K)″, size: 0x110000, offset: 0xf0000 } };? (3) 定义SST39VF160字节、半字、字的读写操作函数。 (4) 初始化SST39VF160函数int_init init_s3c4510b()。 该操作主要包括两个方面:第一是调用do map probe()检测搜索MTD设备。通常检测方式有两种:cfi probe和jedec probe,这里采用后一种,该方法在jedec_probe.c文件中定义。另外,jedec probe.c中定义了各种jedec probe类型芯片的信息,有些linux版本没有包含SST39VF160,需要手动添加;而操作的第二方面则是调用add_mtd_partitions()以将your_partiton的各个分区加入mtd_table。 3 内核相关配置的设定 3.1 内核配置文件设置 为使内核支持JFFS2,需在内核配置选项菜单里选择相关选项。首先把SST39VF160的MTD驱动加入配置菜单。并在mtd/maps/Config.in文件中加入如下程序: if[″$CONFIG ARM″= ″y″]; then dep_tristate′CFI Flash device mapped on Samsung S3C4510B′CONFIG_MTD_S3C4510B $CONFIG_MTD_CFI 相应mtdmapsMakefile文件加入 obj_$(CONFIG_MTD_S3C4510B)+=s3c4510b.o 其次选择Menuconfig下的配置选项。 在linux Kernel v2.4.20-uc0 Configuration下 Memory Technology Devices?MTD下 CONFIG_MTD=Y CONFIG_MTD_DEBUG=Y CONFIG_MTD_DEBUG_VERBOSE=3 CONFIG_MTD_PARTITIONS=Y CONFIG_MTD_CHAR=Y CONFIG_MTD_BLOCK=Y RAM/ROM/Flash chip drivers下 CONFIG_MTD_CFI=Y CONFIG_MTD_JEDECPROBE=Y CONFIG_MTD_CFI_AMDSTD=Y Mapping drivers for chip access下 CONFIG_S3C4510B=Y File systems下 CONFIG_JFFS2_FS=Y CONFIG_JFFS2_FS_DEBUG=2 在uClinux v1.3.4 Configuration下 Flash Tools下 CONFIG_USER_MTDUTILS=Y CONFIG_USER_MTDUTILS_ERASE=Y CONFIG_USER_MTDUTILS_ERASEALL=Y CONFIG_USER MTDUTILS_MKFSJFFS2=Y BusyBox下选中cat,cp,dd, mount,umount,mkdir工具。 3.2 MTD块设备配置 下面是修改系统块设备的主设备号。默认情况下,MTDBLOCK主设备号为31,与BLKMEM的主设备号冲突,因此 修改mtdmtd.h中 MTD BLOCK MAJOR的值为30。 接着应添加MTD设备节点到/vender/--你所使用的目标机类型--/Makefile文件中。其中字符设备的主设备号为90,次设备号为0、2、4、6...(奇数次设备号为只读设备),块设备的主设备号为31,次设备号为0、1、2、3。可按以下方式增加DEVICES目标: mtd0,c,90,0 mtd1,c,90,1 mtd2,c,90,2 mtdblock0,b,30,0 mtdblock1,b,30,1 mtd-block2,b,30,2 做完以上步骤,可以运行内核编译命令make dep, make 以对内核进行编译。 当系统启动时,可以看到以下信息: s3c4510b flash device: 200000 at 5000000 Found: SST SST39VF160 number of JEDEC chips: 1 Creating 3 MTD partitions on ″S3C4510B flash de-vice″: 0x00000000-0x00020000: ″bootloader(128K)″ mtd:Giving out device 0 to bootloader(128K) 0x00020000-0x00f0000:″uClinux_kernel(832K)″ mtd: Giving out device 1 to uClinux_kernel(832K) 0x00f0000-0x00200000:″jffs2_usr(1088K)″ mtd: Giving out device 2 to jffs2_usr(1088K) init_mtdchar: allocated major number 90. init_mtdblock: allocated major number 31. …… 3.3 创建文件系统镜像文件 系统会编译生成JFFS2的辅助工具:mkfs.jffs2、eraseall、erase。其中mkfs.jffs2会产生JFFS2文件系统镜像的工具,eraseall和erase用来对FLASH芯片的擦除。mkfs.jffs的使用方法如下:mkfs.jffs -d根目录?-b| l??-e 擦除块大小??-o 输出文件??-v ?0-9???-q?。 另外,为了使系统在启动时自动挂载建好的JFFS2文件系统,在启动脚本里应加入: mount -t jffs2 /dev/mtdblock2 /mnt4 结束语 本文讨论了在uClinux下建立基于Nor Flash的JFFS2的文件系统的一般步骤。Nor Flash的特性决定了它在对数据存储要求不高的嵌入式系统中有着广泛的应用,因此JFFS2文件系统对Flash上的数据管理非常方便。对于一些高端的掌上设备来说,Nand Flash更为适合,其单元存储密度比较高,成本较低,这样系统可以在不增加成本的情况下扩大存储容量。目前有一种新型的文件系统YAFFS更适于Nand Flash,本文不再予以讨论。[!--empirenews.page--]

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

西班牙塞维利亚,2024年3月12日 — Teledyne Technologies旗下公司、全球成像解决方案创新者Teledyne e2v宣布扩展其Flash™ CMOS图像传感器系列,推出Flash 2K LSA,该...

关键字: 图像传感器 Flash 摄像机

在这篇文章中,小编将为大家带来JTAG接口与Flash的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: JTAG Flash

近日,第11届EEVIA年度中国硬科技媒体论坛暨产业链研创趋势展望研讨会在深圳召开,兆易创新Flash事业部产品市场经理张静在会上发布了主题为“持续开拓,兆易新一代存储产品助力行业创新”的演讲。

关键字: 兆易创新 Flash 闪存

随着信息技术的快速发展,存储器的需求日益增长。Flash存储器作为一种非易失性存储器,具有重要的应用价值和广泛的应用领域。本文将详细介绍Flash存储器的基本原理、工作方式和作用,帮助读者更好地了解这一重要的存储器技术。

关键字: Flash 汽车 电子设备

随着信息时代的到来,数据存储成为了一项基本需求。Flash存储器成为了一种常见的存储设备,用于存储各种类型的数据,如文档、图片、视频等。本文将详细介绍如何使用Flash存储器以及如何写入数据,帮助读者了解Flash存储器...

关键字: Flash 存储器 数据

随着科技的不断发展,Flash存储器已经成为存储设备中最常用的一种类型。它具有非易失性、高密度、低功耗和快速读写等特点,广泛应用于各种领域,如移动设备、嵌入式系统和存储芯片等。本文将介绍Flash存储器的编程设计以及一些...

关键字: 存储器 Flash 嵌入式

(全球TMT2023年7月28日讯)2023年7月28日,江波龙上海总部项目封顶仪式在中国(上海)自由贸易试验区临港新片区举行。江波龙上海总部位于临港新片区滴水湖科创总部湾核心区,项目于2021年启动建设,占地面积约1...

关键字: 存储芯片 数据中心 芯片设计 Flash

昨天下午,中国市场监管总局附加限制性条件批准了美国半导体公司迈凌(MaxLinear)对全球最大 NAND Flash 控制芯片供应商慧荣科技(SMI)的收购。

关键字: 迈凌 慧荣 芯片 NAND Flash

Flash存储器,也称为闪存存储器,是一种非易失性存储器(Non-Volatile Memory,NVM),用于在设备断电后仍然能够保持存储的数据。它的名称来源于一种称为“闪存技术”的特殊电子存储技术。Flash存储器的...

关键字: Flash 存储器 电荷贮存器

据业内信息统计数据,2023 年第一季度 NAND-Flash 存储市场的营收或将持续下滑,除了传统的淡季影响之外,还和过去两年的市场影响以及双边制裁等因素有关。据悉,NAND-Flash 存储市场去年不断下跌,最后一个...

关键字: NAND Flash 闪存 三星 美光 SK 海力士 铠侠
关闭
关闭