基于NOR flash和ramdisk文件系统的应用

什么是NOR Flash 文件系统
NOR flash 文件系统就是以nor flash为存储介质的文件系统,常用的是JFFS2格式,具有永久存储,动态更新的特点。
什么是ramdisk 文件系统
ramdisk文件系统是基于内存的文件系统,存储介质是内存,其特点是 one-shot,就是一次运行,系统重启文件就会丢失,但是访问速度快。

两种文件系统在嵌入式环境中都有广泛的应用,本文着重介绍Nor Flash文件系统在Linux中的支持和应用步骤。
1)  首先,必须配置Linux内核包含MTD组件,包含MTD使Linux能识别flash分区(partition),那么为什么需要进行flash分区呢?原因是因为
flash除了作为根文件系统外,常常还用做启动设备(boot device), 还需要保存boot loader,启动参数和Linux 内核映像,如下图所示。
这些分区不属与根文件系统的一部分,所以一般不会被文件误操作破坏。 如果需要在linux下升级对应分区的image,可以使用设备文件进行操作,下面有
更详细的描述。
[img][/img]
配置好MTD后,需要配置好系统的flash 分区,就是每个分区的大小,具体修改文件在drivers/mtd/maps下。
static struct mtd_partition flash_partitions_64m[] = {
        {
                .name =   "fs",
                .offset = 0x0,
                .size =   0x01f00000,
        },
        {
                .name =   "kernel",
                .offset = 0x01f00000,
                .size =   0x00200000,
        },
        {
                .name =   "uboot",
                .offset = 0x03f00000,
                .size =    0x00100000
        }
};
2) make  生成内核映像
3) 生成rootfs映像,基于JFFS2文件格式,具体步骤在后续章节中会详细介绍其步骤。
4) 在Uboot启动参数中指定根文件系统对应的flash分区,根据步骤1)我们共有三个flash分区,mtdblock0~mtdblock2.
mtdblock0是根文件系统。
console=/dev/ttyS0,115200n8 root=/dev/mtdblock2
5) 下载并启动内核,cat /proc/mtd能看到相应分区。
6) 创建一个文件,掉电重启后会发现该文件依然存在,这是和ramdisk不同的。

生成cramfs image
mkfs.cramfs
mount -t cramfs -o loop cramfs.img /mnt
copy files to /mnt
umount
programming cramfs image to NOR flash
两种常用方式:网络下载和离线编程器,根据前一贴中的分区表起始地址分别烧入对应的image。地址一定要对,不然uboot找不到内核或内核找不到根文件系统。
挂载cramfs
如何生成JFFS2 文件系统
mkfs.jffs2 -d Directory -o jffs2.img

你可能感兴趣的:(linux,image,Flash,嵌入式,存储,linux内核)