jffs2_note

3.2 内存技术设备原始设备驱动的编写
在/drivers/mtd/maps/edb7312.c 中,设置相应 MTD 原始设备的起始物理地址、大
小、分区情况、读写函数、初始化和清除程序等相关信息。本节中将结合 iFone D310
产品,对如何设置这些信息进行详细的设计。
3.2.1 系统环境
EDB7312 开发板上的 Intel 28F128 闪存芯片是一个 NOR 型的 Flash,起始物理地
址为 0x0,大小为 16M,总线宽度为 32bits。闪存每个擦除块的大小为 128kbyte,共
有 128 个擦除块。
文件中定义以下的宏:
#define WINDOW_ADDR 0x00000000
//MTD 原始设备起始地址为 0
#define WINDOW_SIZE 0x02000000 // MTD 原始设备大小为 16×2=//32Mbytes
#define BUSWIDTH 4
//总线宽度为 4×8=32bits
#define FLASH_BLOCKSIZE_MAIN
0x20000
//闪存每个擦除块大小为 128kbytes
#define FLASH_NUMBLOCKS_MAIN 128
//128 个擦除块

 

Edb7312 板子上总容量 32M 的 Flash 分区结构如下:
0 — 2304K :“Kernel”,用于放置内核映像装载,强制为只读;
2308K — 11M :“RootFS”,用于存放根文件系统(Cramfs)的映像,强制
为只读;
12M — 16M :“DataFS”, 用于存放数据,可写;
17M — 32M :“Reserved”,预留空间。

这些信息在/drivers/mtd/maps/edb7312.c 声明为一个数据结构如下:
static struct mtd_partition static_partitions[4] =
{
{
name: " Kernel ",
size: 0x240000,
offset: 0,
mask_flags: MTD_WRITEABLE
22
},
{
name: "RootFS",
size: 0x8c0000,
offset: 0x240000,
mask_flags: MTD_WRITEABLE
},
{
name: "DataFS",
size: 0x500000,
offset: 0xb00000
},
{
name: "Reserve",
size: 0x1000000,
offset: 0x1000000
},
};


3.3 iFone D310 Flash 文件系统的搭建过程
嵌入式 Linux 系统中文件系统的构建[40]需要如下几个步骤:
配置内核:将 MTD、Cramfs、JFFS2 模块编译进内核。
划分 Flash 分区:对 Flash 物理空间进行分区,以便在不同的分区上存放不同的数
据,采用不同的文件系统格式;必要时编写 MAPS 文件。
修改系统脚本:在系统启动后利用脚本挂载文件系统。
创建文件系统镜像文件:利用工具生成文件系统镜像文件,并通过 Flash 烧写工
具将镜像文件烧写到 Flash 物理空间。

3.3.1 内核配置
配置 MTD
要使用 Cramfs 和 JFFS2 文件系统首先需要配置 MTD。iFone 系统中有 2 片 Intel
公司的 16 位 Flash 芯片,系统总线 32 位,那么,下面一些内核配置选项是需要的。
MTD support:MTD 支持。
MTD partitioning support:分区支持。
Direct char device access to MTD devices:字符设备的支持。
Caching block device access to MTD devices:块设备支持。
Detect flash chips by Common Flash Interface probe(CFI):CFI 接口检测。
Support 32-bit buswidth:32 位总线。
Support 2-chip flash interleave:2 片 Flash。
Support for Intel/Sharp flash chips:Intel 芯片支持。
CFI Flash device mapped on xxx board:Flash 分区映射,与具体的目标系统相关。
配置文件系统
在内核配置的文件系统配置选单里选择如下几项:
Journaling Flash File System v2 (JFFS2) support;
Compressed ROM file system support。


3.3.2 系统 Flash 分区
/drivers/mtd/maps/目录下找到相应的 edb7312.c 进行配置,见 3.2 节,在此不再赘
述。这个数组的每一项对应一个 MTD block 设备,比如第 0 项即 mtdblock0,第 1 项
即 mtdblock1,……,以此类推。需要注意的是,必须把用做根目录的设备作为启动
数传递给内核。比如,如果使用第 1 项,即 RootFS 分区作为根文件系统,则需要通
过 bootloader 将这个参数传递给内核。当然。也可以在内核配置的时候设置默认内核
启动参数,比如:
Default kernel command string:root=/dev/mtdblock1 r console=tty0 console=ttyS0,
Init=/linuxrc。
做完系统分区,内核方面的设置基本完成,可以运内核编译命令 make dep,make
bzImage 对内核进行编译了。
3.3.3 系统启动脚本设置
还有一些工作是启动脚本的设置,需要在 etc/fstab 文件中添加如下的几行。
/dev/mtdblock2 / cramfsdefaults 0  0
/dev/mtdblock3 /home  jffs2  defaults 0  0

如果在配置内核时没有配置自动 mount 选项,那么需要在/linuxrc 文件中添加如
下的两句:mount /home。从上面的设置可以看出,把系统根文件系统做成 cramfs 格
式,把/home 目录作为 JFFS2 分区。

3.3.4 创建文件系统
镜像文件最后一个步骤是,使用文件系统工具生成 Cramfs 分区和 JFFS2 分区的
镜像文件,使用 Flash 烧写工具将镜像文件烧写到 Flash 物理空间。Cramfs 和 JFFS2
镜像文件生成方法如下。
生成 Cramfs 镜像文件
使用工具:mkcramfs,这个工具在 Linux 源码包里就有。其位置在 scripts/cramfs/
目录下。
使用方法:./mkcramfs mydir/ my_Cramfs.img。
生成 JFFS2 镜像文件
使用工具:mkfs.jffs2,可以从 http://sources.redhat.com/jffs2/处下载这个工具。
使用示例:mkfs.jffs2 -l -p -e 0x80000 -d home/ -o home jffs2。
选项说明:
-l:按小印第安序生成镜像文件。
-p:将镜像中剩余空间用 0xFF 填充。
-e: Flash 擦除扇区大小,128KB。
-d:用来创建镜像的源目录。
-o:输出镜像文件。
3.4 本章小结
本章从 MTD 驱动分层结构的分析入手,结合 iFone D310 产品,对 MTD 原始设
备驱动层相关文件的编写作了详细的阐述。而后,在编写的原始设备驱动的基础上,
给出了在 Linux 操作系统中创建 Flash 文件系统的全过程。 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值