全部博文(26)
分类: LINUX
2010-10-23 17:16:19
和小组同学一起学习,讨论romfs文件系统已经有2个多月了。虽然还没有具体的实践出什么,但是在此期间,学习到了很多东西。特此做一个小总结。
首先,是一些文件系统的基础。比如目录和目录项的区别。每次讨论都会提到这个问题,由于大家的基础理论知识都比较薄弱,所以这个问题就很困扰。现在就小小说一下目录和目录项的区别:
在linux中其实是没有目录这么一说的,因为所有的目录,设备等等都是文件。所以我们这样说:目录文件的内容是该目录的目录项,目录项是该目录下的文件和目录的相关信息。目录可以包含子目录,即目录可以层层嵌套,形成文件路径,而路径中的每一部分被称为目录项。eg:/home/wuyuun/Linux (目录home,wuyun,以及文件Linux均为目录项)。现在大概清楚了吧?(由于比较菜,所以描述的不一定准确··欢迎指正。谢过啦··)
还有一些简单的名词解释比如:
文件——存放一切数据或信息的仓库。
VFS(Virtual Filesystem Switch)----是用户的应用程序与具体文件系之间的抽象层。
硬链接的2个限制:
1)不允许给目录创建硬链接;
2)只有在同一文件系统中的文件之间才可以创建硬链接。
大概了解了一下VFS:
VFS只管理挂载到系统中的实际FS,它的管理对象有:文件(file),目录项(dentry),索引节点(inode),安装点(vsfmount)。
vfs_superblock只存在与内存中,当内核对一个FS进行初始化,注册时,内存为其分配一个sb,在FS卸载时被自动删除。
由于我们学习是边学习理论基础,边开始看romfs的源码,当然由于理论基础知识的欠缺,在看源码时还是会遇到很多很多问题,因此我们的进展也比较慢,我主要负责看romfs中的super.c不过也只看了一点,因为每看一点都会遇到很多问题。然后就需要不停的去看书,查资料。第一次真正的接触到内核源码,是有点不知从何下手的,所以就先了解了一下大体的框架,然后再一步一步的深入到代码内部去。在此期间,我遇到的第一个问题就是,不懂内核的数据类型。这里我稍稍说一些,我看到的romfs源码中的数据类型,总结之后我会给大家附上我找的一些资料。详细的东西,请大家自己去学习。
内核使用的基本数据类型主要有:
int就不赘述了,u32—32位整数类型,pid_t –特定内核对象pid类型
在romfs super.c中首先遇到的是__u32,对此系列先总结一下:
s8 和 __s8→ signed char u8 和 __u8→ unsigned char
s16 和 __s16→ signed short u16 和 __u16→ unsigned short
s32 和 __s32→ signed int u32 和 __u32-> unsigned int
s64 和 __s64 → signed loong long u64 和 __u64 → unsigned long long
可能还会遇到的··这是直接从types.h中Copy的
typedef
__u32 __bitwise __le32;
typedef
__u32 __bitwise __be32;
为了容易辨认区分,就给他们的数据类型起了别名,以一些特殊形式定义一些数据类型后,就不再需要考虑因系统而异的程序实现细节。所以也就是说,本质的数据类型就主要是上面说到的三种。至于为什有些数据类型前面有两个下划线,这两个表示的数据类型相同,但是用有前缀的类型是用于将变量显露给用户空间的。例如:一个驱动程序通过ioctl函数与运行在用户空间的程序交换数据,应该用_ _u32来声明32位的数据类型。
在《UNIX高级环境编程》P45简单的说到一些基本系统数据类型。建议大家可以看一下,具体的类型说明可以进入内部学习。
下一章张中将会说到,我具体看的super.c的源码。只有一点点哈···但是会一点一点去学习,然后连载··嘿嘿
chinaunix网友2010-10-24 16:38:27
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com