uClinux下NorFlash的JFFS2文件系统构建
#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\Makefile文件加入
obj_$(CONFIG_MTD_S3C4510B)+=s3c4510b.o
其次选择Menuconfig下的配置选项。
在linux Kernel v2.4.20-uc0 Configuration下
Memory Technology DevicesMTD下
CONFIG_MTD=Y
CONFIG_MTD_DEBUG=Y
CONFIG_MTD_DEBUG_VERBOSE=3
CONFIG_MTD_PARTITIONS=Y
CONFIG_MTD_CHAR=Y
CONFIG_MTD_BLOCK=Y
RAM/ROM/Flash chip drivers下
CONFIG_MTD_CFI=Y
CONFIG_MTD_JEDECPROBE=Y
CONFIG_MTD_CFI_AMDSTD=Y
Mapping drivers for chip access下
CONFIG_S3C4510B=Y
File systems下
CONFIG_JFFS2_FS=Y
CONFIG_JFFS2_FS_DEBUG=2
在uClinux v1.3.4 Configuration下
Flash Tools下
CONFIG_USER_MTDUTILS=Y
CONFIG_USER_MTDUTILS_ERASE=Y
CONFIG_USER_MTDUTILS_ERASEALL=Y
CONFIG_USER MTDUTILS_MKFSJFFS2=Y
BusyBox下选中cat,cp,dd, mount,umount,mkdir工具。
3.2 MTD块设备配置
下面是修改系统块设备的主设备号。默认情况下,MTDBLOCK主设备号为31,与BLKMEM的主设备号冲突,因此 修改\mtd\mtd.h中 MTD BLOCK MAJOR的值为30。
接着应添加MTD设备节点到/vender/--你所使用的目标机类型--/Makefile文件中。其中字符设备的主设备号为90,次设备号为0、2、4、6...(奇数次设备号为只读设备),块设备的主设备号为31,次设备号为0、1、2、3。可按以下方式增加DEVICES目标:
mtd0,c,90,0 mtd1,c,90,1 mtd2,c,90,2
mtdblock0,b,30,0 mtdblock1,b,30,1 mtd-block2,b,30,2
做完以上步骤,可以运行内核编译命令make dep, make 以对内核进行编译。
当系统