uClinux下Nor Flash的JFFS2文件系统构建
(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
相应\mtd\maps\Make
《uClinux下Nor Flash的JFFS2文件系统构建(第2页)》