免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 794 | 回复: 0
打印 上一主题 下一主题

jffs2_note [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-12 23:34 |只看该作者 |倒序浏览
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 文件系统的全过程。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/11445/showart_127166.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP