Chinaunix首页 | 论坛 | 博客
  • 博客访问: 150831
  • 博文数量: 28
  • 博客积分: 1476
  • 博客等级: 上尉
  • 技术积分: 356
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-11 11:39
文章分类
文章存档

2011年(1)

2010年(18)

2009年(9)

我的朋友

分类: 嵌入式

2009-11-11 17:30:59

    分析yaffs文件系统也快有两个星期了,总体的框架也已经知道,但我是第一次分析像yaffs文件系统这么大的代码,对很多地方还是很不明白,还在仔细分析yaffs_mount函数中的代码。 yaffs文件系统的核心代码在yaffs_guts.c文件当中,所有的关于文件,文件夹,符号链接中的信息是如何建立起来的,都可以在其中找到。原来创建一个文件,往里写东西是那么的复杂,不由感叹计算机的强大。想我们在命令行下,一个mkdir是多么的简单。呵呵,废话少说。
   先说说如何在没有nand flash的情况下怎么在内存中建立一个虚拟的nand flash。我用的系统是SUSE11.0,先安装DVD光盘中的内核源码。代码下载在/usr/src目录下,我的是linux-2.6.25.5-1.1,注意只能使用光盘中的代码,否则后面编译的驱动不能插入内核。然后将/usr/src/linux-2.6.25.5-1.1-obj/i386/pae/目录下的.config文件复制到刚才的源码目录下,将下来就是配置内核了,其中只要将Device Driver--->Memory Technology Device(MTD) support配置成以模块编译,其它的全部默认。最后在一个make就行了。以上目的是为了能够编译我们的驱动。 然后执行下列步骤: modprobe mtd;modprobe mtdblock;modprobe nandsim first_id_byte=0x20 可以参考这封邮件: 
回到你的yaffs2目录下,make以后会生成一个yaffs2.ko文件,加载这个驱动,然后进入mtdemul目录,make以后会生成nandemul2k.ko,在加载这个驱动模块。其中Makefile要使用新内核中makefile的写法,代码中还有几个错误需要修改。
新makefile的写法:
ifneq ($(KERNELRELEASE),)
obj-m := nandemul2k.o
else
#KERNELDIR ?= /usr/src/linux-2.6.25.5-1.1
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
 rm -rf *.o *.ko *.mod.* .nandemul2k* .tmp*
endif
  现在可以使用cat /proc/mtd;cat /proc/yaffs; cat /proc/filesystem查看相关信息了,在/dev目录下会生成mtdblock0,mtdblock1 使用命令:mount -t yaffs /dev/mtdblock0 /mnt就将nandsim挂载到系统中了。这里我的系统有一个bug,mount -t后的参数只能使用yaffs,而不能使用yaffs2,挂载/dev/mtdblock1不成功。modprobe nandsim...和insmod nandemul2k.ko生成的分别是mtdblock0和mtdblock1,使用cat /proc/mtd可以检查。nandsim是32M的nand,nandemul2k是4M的nand,我偶然一次将4M的nand挂载成功,以后就没在成功过,不知道原因。
   要想了解yaffs文件系统的核心算法,只能是调试了,进入yaffs2/direct目录,其中dtest.c是各种操作的测试,make以后就可以使用gdb调试了。 好了,先写到这吧,等我把核心部分的代码分析透了在接着上来写。欢迎同在分析yaffs文件系统的朋友一起研究。
阅读(1610) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:开始写博客

给主人留下些什么吧!~~