分类:
2008-07-25 18:34:22
#mkdir fs/yaffs
#cp *.c(yaffs source code) fs/yaffs
2.修改fs/Kconfig,使得可以配置yaffs :
source "fs/yaffs/Kconfig"
3.修改fs/makefile,添加如下内容:
obj-$(CONFIG_YAFFS_FS) += yaffs/
4.仔细阅读readme-linux-patch.先写到这里
5.在/arch/arm/mach-s3c2410/mach-smdk2410.c找到smdk_default_nand_part结构,修改nand分区,如下:
struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "vivi",
.size = 0x00020000,
.offset = 0x00000000,
},
[1] = {
.name = "param",
.size = 0x00010000,
.offset = 0x00020000,
},
[2] = {
.name = "kernel",
.size = 0x00100000,
.offset = 0x00030000,
},
[3] = {
.name = "root",
.size = 0x01900000,
.offset = 0x00130000,
},
[4] = {
.name = "user",
.size = 0x025d0000,
.offset = 0x01a30000,
}
};
注:此分区要结合vivi里面的分区来进行设置。
6.配置内核时选中MTD支持:
Memory Technology Devices (MTD) --->
<*> Memory Technology Device (MTD) support
[*] MTD partitioning support
……
--- User Modules And Translation Layers
<*> Direct char device access to MTD devices
<*> Caching block device access to MTD devices
……
NAND Flash Device Drivers --->
<*> NAND Device Support
<*> NAND Flash support for S3C2410 SoC
[*] S3C2410 NAND driver debug
7.配置内核时选中YAFFS支持:
File systems --->
Miscellaneous filesystems --->
<*> Yet Another Flash Filing System(YAFFS) file system support
[*] NAND mtd support
[*] Use ECC functions of the generic MTD-NAND driver
[*] Use Linux file caching layer
[*] Turn off debug chunk erase check
[*] Cache short names in RAM
8.编译内核并将内核下载到开发板的flash中。
三、Yaffs文件系统测试:
1.内核启动之后,在启动信息里面可以看到如下内容:
NAND device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8-bit)
Scanning device for bad blocks
Creating 5 MTD partitions on "NAND 64MiB 3,3V 8-bit":
0x00000000-0x00020000 : "vivi"
0x00020000-0x00030000 : "param"
0x00030000-0x00130000 : "kernel"
0x00130000-0x01a30000 : "root"
0x01a30000-0x04100000 : "user"
2.如果在内核里面添加了proc文件系统的支持那么你在proc里面可以看到有关yaffs的信息
~ # cat proc/filesystems
nodev sysfs
nodev rootfs
nodev bdev
nodev proc
nodev sockfs
nodev pipefs
nodev futexfs
nodev tmpfs
nodev eventpollfs
nodev devpts
nodev ramfs
vfat
nodev devfs
nodev nfs
yaffs
nodev rpc_pipefs
3.查看dev目录下相关目录可以看到:
~ # ls dev/mtd -al
drwxr-xr-x 1 root root 0 Jan 1 00:00 .
drwxr-xr-x 1 root root 0 Jan 1 00:00 ..
crw-rw-rw- 1 root root 90, 0 Jan 1 00:00 0
cr--r--r-- 1 root root 90, 1 Jan 1 00:00 0ro
crw-rw-rw- 1 root root 90, 2 Jan 1 00:00 1
cr--r--r-- 1 root root 90, 3 Jan 1 00:00 1ro
crw-rw-rw- 1 root root 90, 4 Jan 1 00:00 2
cr--r--r-- 1 root root 90, 5 Jan 1 00:00 2ro
crw-rw-rw- 1 root root 90, 6 Jan 1 00:00 3
cr--r--r-- 1 root root 90, 7 Jan 1 00:00 3ro
crw-rw-rw- 1 root root 90, 8 Jan 1 00:00 4
cr--r--r-- 1 root root 90, 9 Jan 1 00:00 4ro
~ # ls dev/mtdblock/ -al
drwxr-xr-x 1 root root 0 Jan 1 00:00 .
drwxr-xr-x 1 root root 0 Jan 1 00:00 ..
brw------- 1 root root 31, 0 Jan 1 00:00 0
brw------- 1 root root 31, 1 Jan 1 00:00 1
brw------- 1 root root 31, 2 Jan 1 00:00 2
brw------- 1 root root 31, 3 Jan 1 00:00 3
brw------- 1 root root 31, 4 Jan 1 00:00 4
4.mount、umount
建立mount目录
~ #mkdir /mnt/flash0
~ #mkdir /mnt/flash1
Mountblockdevice设备
~ #mount –t yaffs /dev/mtdblock/3 /mnt/flash0
~ #mount –t yaffs /dev/mtdblock/4 /mnt/flash1
~ #cp 1.txt /mnt/flash0
~ #cp 2.txt /mnt/flash1
查看mount上的目录,可以看到该目录下有刚才拷贝的文件,将其umount后,再次mount上来可以发现拷贝的文件仍然存在,这时删除该文件然后umount,再次mount后,可以发现拷贝的文件已经被删除,由此可以该分区可以正常读写。
5.在flash上建立根文件系统
~ # mount –t yaffs /dev/mtdblock/3 /mnt/flash0
~ #cp (your rootfs) /mnt/flash0
~ #umount /mnt/flash0
重新启动,改变启动参数:
param set linux_cmd_line "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0"
重新启动,开发板就可以从flash启动根文件系统了。
注:这里你得在内核中添加devfs文件系统的支持,否则内核无法找到/dev/mtdblock/3目录