内核模块的加载

内核模块的加载

ID:40785269

大小:33.50 KB

页数:8页

时间:2019-08-07

内核模块的加载_第1页
内核模块的加载_第2页
内核模块的加载_第3页
内核模块的加载_第4页
内核模块的加载_第5页
资源描述:

《内核模块的加载》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、2009-12-2416:49:50来自:伊拉克蜜枣甜掉牙★虚拟文件系统模块增加一个虚拟文件系统是非常简单的.假如你要开发一个新的文件系统或者支持现存的文件系统,就需要写一个模块作为接口.同样的,假如需要调试已经存在的文件系统,也需要那样一个接口.必须确定你的内核不支持目标文件系统.一个虚拟文件系统的模块的结构应该象如下定义:structlkm_vfs{MODTYPElkm_type;intlkm_ver;char*lkm_name;u_longlkm_offset;structvfsconf*lkm_vfsconf;};和前面的例子差不

2、多,我们也有个模块类型(LM_VFS),一个版本号,一个模块名和一个偏移值.在这个vfs模块的例子中,offset值是用不到的.最后我们需要一个指向vfsconf结构的指针,它包括了虚拟文件系统的操作向量以及一些其他信息(vfsconf结构在头文件/usr/include/sys/mount.h中定义).此结构通过MOD_VFS宏来初始化:MOD_VFS("nullfs",-1,&nullfs_vfsconf)我们看看上面的代码,第一个参数是我们的模块名,第二个参数offset,这个参数在我们的vfs模块中无关紧要(前面说过,可以不用).

3、最后一个参数是我们的文件系统的结构.在你的模块的外部接口中,你必须调用vfs_opv_init_eXPlicit和vfs_opv_init_default来分配和初始化默认操作向量.因为文件系统被编译进内核,所以通过定义在/usr/src/sys/kern/vfs_conf.c里的vfs_opv_desc[]来在系统启动的时候装载.一个需要注意的是当用需要用ld程序来链接多个源代码文件来为modload提供目标文件时,你必须用-r标记来创建一个可重定位的目标文件.因为modload在把你的模块链接进内核的同时需要用到ld程序.可以用mod

4、load的-d标记来察看ld运行的内部参数.这儿是一个fs模块的完整代码(nullmod.c):#include#include#include#include#include#include#include#include#include/**文件系统的操作结构*参考:/usr/src/sys/miscfs/null

5、fs/*/externstructvfsopsnull_vfsops;externstructvnodeopv_descnull_vnodeop_opv_desc;structvfsconfnullfs_vfsconf={&null_vfsops,MOUNT_NULL,9,0,0,NULL,NULL};/**声明我们的模块结构,通过我们文件系统的模块名,offset和初始的vfsconf结构*/MOD_VFS("nullfs",-1,&nullfs_vfsconf)/**我们的外部接口.我们初始化文件系统并且用到了DISPATCH宏,在此

6、例中没有用到句柄*/intnullfsmod(lkmtp,cmd,ver)structlkm_table*lkmtp;intcmd;intver;{vfs_opv_init_explicit(&null_vnodeop_opv_desc);vfs_opv_init_default(&null_vnodeop_opv_desc);DISPATCH(lkmtp,cmd,ver,lkm_nofunc,lkm_nofunc,lkm_nofunc)}好,编译安装它:(一些其他的附加代码在/usr/src/sys/miscfs/nullfs里)[e4

7、gle@openbsd29]#gcc-D_KERNEL-I/sys-cnull_subr.c[e4gle@openbsd29]#gcc-D_KERNEL-I/sys-cnull_vfsops.c[e4gle@openbsd29]#gcc-D_KERNEL-I/sys-cnull_vnops.c[e4gle@openbsd29]#gcc-D_KERNEL-I/sys-cnullmod.c[e4gle@openbsd29]#ld-r-onullfs.onull_vfsops.onull_vnops.onull_subr.onullmod.o[

8、e4gle@openbsd29]#modload-onullfsmod-enullfsmodnullfs.o[e4gle@openbsd29]#modstatTypeIdOffLoadaddr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。