2009-12-2416:49:50来自:伊拉克蜜枣甜掉牙★虚拟文件系统模块增加一个虚拟文件系统是非常简单的
假如你要开发一个新的文件系统或者支持现存的文件系统,就需要写一个模块作为接口
同样的,假如需要调试已经存在的文件系统,也需要那样一个接口
必须确定你的内核不支持目标文件系统
一个虚拟文件系统的模块的结构应该象如下定义:structlkm_vfs{MODTYPElkm_type;intlkm_ver;char*lkm_name;u_longlkm_offset;structvfsconf*lkm_vfsconf;};和前面的例子差不多,我们也有个模块类型(LM_VFS),一个版本号,一个模块名和一个偏移值
在这个vfs模块的例子中,offset值是用不到的
最后我们需要一个指向vfsconf结构的指针,它包括了虚拟文件系统的操作向量以及一些其他信息(vfsconf结构在头文件/usr/include/sys/mount
此结构通过MOD_VFS宏来初始化:MOD_VFS("nullfs",-1,&nullfs_vfsconf)我们看看上面的代码,第一个参数是我们的模块名,第二个参数offset,这个参数在我们的vfs模块中无关紧要(前面说过,可以不用)
最后一个参数是我们的文件系统的结构
在你的模块的外部接口中,你必须调用vfs_opv_init_eXPlicit和vfs_opv_init_default来分配和初始化默认操作向量
因为文件系统被编译进内核,所以通过定义在/usr/src/sys/kern/vfs_conf
c里的vfs_opv_desc[]来在系统启动的时候装载
一个需要注意的是当用需要用ld程序来链接多个源代码文件来为modload提供目标文件时,你必须用-r标记来创建一个可重定位的目标文件
因为modload在把你的模块链接进内核的同