今天又看了一天yaffs文件系统代码,查看了半个月的资料与源代码,今天终于将yaffsfs.c文件中的yaffs_mount函数一步一步用GDB调试完了,明白了个80%。yaffs_mount函数中主要的函数只有两个:yaffsfs_FindDeviceyaffs_GutsInitia
lise。后者则是最重要的,一切的初始化都在这里面。然后开始调试yaffs_open中的函数,已经调试到了yaffs_guts.c中的yaffs_CreateNewObject函数,并当文件类型为YAFFS_OBJECT_TYPE_FILE时,以树的形式构造一个可读写的文件。明天继续从这里调试,争取明天一天将yaffs_write和yaffs_read两个函数调完,如果能调完,剩下的就只有yaffs_close和yaffs_unmount两个函数了。
只要能把以上几个函数搞明白,yaffs文件系统的核心部分也就明白了。剩下的就是各种测试,争取把yaffs文件系统的全部代码弄透。然后就可以着重于与nand flash的接口部分了。下一步的计划是,接合MTD抽象层,看看yaffs是如何通过MTD层与nand通信的。
今天在调试过程中遇到的问题:
1,指针的传输,当定义一个指针char *name后,可使用该指针做为参数传递给函数,当使用&name传递时,传的是指针所在的地址;当使用name传递时,传的是指针所指向的内容。今天晚上的工作是写一个测试用例,测试这样的解释是否正确。可以参考yaffsfs.c文件中的yaffsfs_FindObject函数,在358行。注意name指针的传递用法。
2,修改dtest.c中的代码,将yaffs_open函数中的第一个参数改为:
(1) /yaffs2/hello/world/hello.txt
(2) /yaffs2/hello/////hello.txt
(3) /yaffs2/hello///world///hello.txt///
(4) //yaffs2/hello.txt
阅读(1026) | 评论(0) | 转发(0) |