新闻中心

EEPW首页>嵌入式系统>设计应用> uClinux系统平台下的Flash存储技术

uClinux系统平台下的Flash存储技术

作者: 时间:2016-10-08 来源:网络 收藏

Bootloader使一段单独的代码,它用以负责基本硬件的初始化过程,并且加载和运行uClinux的内核代码。作为系统启动工具,Bootloader经过配置以后可以加载Flash中多内核,甚至可以通过串口和网口来加载内核和系统的镜像到RAM中运行。Bootloader同时也提供对内核镜像文件的多级别保护,这一点对于以Flash作为存储设备的系统来说尤为重要。譬如,当系统进行内核升级和重要数据备份时候,系统突然掉电,正如PC机进行BIOS刷写过程中的掉电一样,都是灾难性的。但是利用Bootloader就可以实现保护性的恢复。

目前运行在uClinux上的免费Bootloader有COLILO、MRB、PPCBOOT和DBUG。也有为特殊需求设计的SNAP GEAR和ARCTURUS NETWORKS。

uClinux的块驱动器(Block Driver)

对于嵌入式系统的块设备可选择存储文件系统的块驱动器主要有三种选择。

1)Blkmem driver。Blkmem driver仍是uClinux上使用最普遍的Flash驱动器,它是为uClinux而设计的,但是相对的它的结构比较简单并且仅支持NOR Flash的操作,需要在RAM中建立根文件系统。同时它也很难配置,需要代码修改表来建立Flash分区。尽管如此,它还是提供了最基本的分区擦/写操作。

2)MTD driver。MTD driver是Linux下标准的Flash驱动器。它支持大多数Flash存储设备,兼有功能强大的分区定义和映象工具。借用交叉存取技术(interleaving),MTD driver甚至可支持同一系统中不同类型的Flash,Linux内核中关于MTD driver配置有较为详细的选项。

3)RAM disk driver。在无盘启动的标准Linux中用的最多的就实RAM disk driver,但它不支持底层的Flash存储器,仅对根文件系统的建立有意义,即压缩的根文件系统压缩以后存放在Flash的什么地方。

通过上面的比较可以看到,MTD driver提供对Flash最有力的支持,同时它也支持从Flash上直接运行文件系统,譬如JFFS和JFFS2,而Blkmem driver则不能够支持。

根文件系统(Root Filesystem)

uClinux中的文件系统可以有很多种选择。通常情况下ROMfs是使用最多的文件系统,它是一种简单、紧凑和只读的文件系统。ROMfs顺序存储文件数据,并可以在uClinux支持地存储设备上直接运行文件系统,这样可以在系统运行时节省许多RAM空间。

Cramfs是针对Llinux内核2.4之后的版本所设计的一种新型文件系统,它也是压缩和只读格式的。它主要的优点是将文件数据以压缩形式存储,在需要运行的时候进行解压缩。由于它存储的文件形式是压缩的格式,所以文件系统不能直接在Flash上运行。虽然这样可以节约很多Flash存储空间,但是文件系统运行需要将大量的数据拷贝进RAM中,消耗了RAM空间。

考虑到有多数系统需要读/写的文件系统,可以使用MTD driver的诸如JFFS和JFFS2日志式文件格式在Flash头部建立根文件系统。日志式文件系统可以免受系统突然掉电的危险,并且在下一次系统引导时不需要文件系统的检查。由于JFFS和JFFS2文件格式是特别为Flash存储器设计的,二者都具有一种称为“损耗平衡”的特点,也就是说Flash的所有被擦写的单元都保持相同的擦写次数。利用这种特有的保护措施,Flash的使用周期得到相当大的提升。JFFS2使用了压缩的文件格式,为Flash节省了大量的存储空间,它更优于JFFS格式在系统中使用。值得注意的是,使用JFFS2格式可能带来少量的Flash空间的浪费,这主要是由于日志文件的过度开销和用于回收系统的无用存储单元,浪费的空间大小大致是两个数据段。

如果使用RAM disk,一般应选择EXT2文件格式。但EXT2并不是一种特别高效的文件存储空间。由于存在在RAM disk上,所以任何改变在下一次启动后都会丢失。当然,也有许多人认为对于嵌入式存储空间来讲,这是一种优势,因为每次系统启动都是从已知的文件系统状态开始的。

虽然在Linux下有许多的文件格式可供选择,但是对于uClinux一般只选择上述的几种文件格式。另外一点就是如何在目标系统上建立根文件系统。大致步骤如下:

首先在开发宿主机上建立一个目标机的根文件系统的目录树,然后利用嵌入式根文件系统生成工具在宿主机上生成目录树的二进制文件镜像,最后下载到目标机上就可以了。对于不同的文件格式有不同的二进制镜像生成工具,譬如JFFS的mkfs.jffs2、ISO9660的mkisofs。

Flash工具及实例

uClinux下的Flash的操作工具有很多种,它们都是为底层的块设备而设计使用的。

当使用MTD driver时,主要的工具有:erase(数据段擦除工具)、eraseall(擦除Flash)、lock(写保护)、unlock(打开写保护)、mkfs.jffs(从目录结构生成JFFS格式文件工具)和mkfs.jffs2(JFFS2格式生成工具)。由于MTD driver提供字符和块设备支持,所以在目标机上可以使用诸如dd命令来写Flash。

实际设计实例:

系统硬件配置:S3C4510B,2M Flash,4M SDRAM。内核:uClinux2.4.x,使用MTD driver支持Flash存储。文件系统格式选择ROMfs。在Flash存储器的地址底部存在一系列的大小不等的可擦除的地址空间,它们的大小分别是16K、8K、8K和32K,总计大小为64K ,我们选择Flash的“bottom boot”。

Flash 分区如下

● SEGMENT SIZE MTD-DEVICE DESCRIPTION

0 16K mtd0 boot loader

1 8K mtd1 内核引导参数

2 8K mtd2 出厂设置信息

3 32K mtd3 空闲

4 64K mtd4 固化设置

5

. 1984K mtd5 内核+根文件系统 .

35

0-35 2048K mtd6 all of Flash memory

在Flash分区的过程中,尽量使用Flash的顶部和底部。不同的MTD分区可以部分重叠,但是在操作时要特别注意。

系统内核是压缩存储的,Bootloader在初始化SDRAM后就解压内核到SDRAM中运行。根文件系统存储在压缩的内核镜像文件之后的,它可以直接在Flash上运行,移除内核压缩镜像后,典型的根文件系统的大小约有1.5M左右。

内核文件和根文件系统合并在一个镜像文件中有一个最大的好处就是当二者需要升级的时候,只需要重新编译MTD4上的配置文件即可。

在所有配置中关键是MTD驱动器映射的建立, uClinux-2.4.x/drivers/mtd/maps下的nettle-uc.c是文件系统建立的源程序,其主要是解释了分区映射的内容和在MTD4上如何配置根文件系统。



关键词:

评论


相关推荐

技术专区

关闭