设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 操作系统 >> OpenBSD >> OpenBSD可加载内核模块编程完全指南
精品推荐
OpenBSD点击TOP10
·Free BSD,Linux之比较
·freebsd VPN 搭建
·freebsd系统时间同步及ntp服务的提供
·freebsd ipf+ipnat+ipfw建立带流量控制的透明网关
·FreeBSD的配置
·ipf+ipnat+ipfw建立带流量控制的透明网关
·POSTFIX下的反垃圾反病毒邮件系统
·FreeBSD 5.2.1R Web Server架设实例过程
·OpenBSD可加载内核模块编程完全指南
·FreeBSD+IPFILTER实现整网(N个Vlan)透明代理上网
操作系统点击TOP10
·Windows Vista完全硬盘安装法
·Windows Vista 激活不求人
·Windows Vista局域网网络连接设置
·Windows Vista系统动态桌面截图欣赏
·Windows XP中磁盘的分区应用
·Windows NT/2000/XP 出现蓝屏并显示“STOP 0x0000007f”错误
·让Windows XP变身Vista
·一招搞定Vista系统软件不兼容问题
·教你如何正确配置和优化Windows Vista
·只转两圈 加快Windows XP启动速度
精选专题

OpenBSD可加载内核模块编程完全指南

作者: 来源:网络文章 时间:2005-12-13 0:45:31

OpenBSD可加载内核模块编程完全指南(7)         char msg[MAXMSGLEN];
};

当模块第一次被加载的时候,我们设置value为13并且为我们的字符串赋值"hello world!".我们定义了两个简单的ioctl调用来设置或获取内

部结构的当前的value的值.这些
都利用ourdev_io结构作为一个参数,然后利用ioctl执行一个相应的动作.
在模块的入口指针中,我这里再次用了IDSPATH宏.

以下是我们自定义的设备程序的完整代码(chardev.c):

#include <sys/param.h>
#include <sys/fcntl.h>
#include <sys/systm.h>
#include <sys/ioctl.h>
#include <sys/exec.h>
#include <sys/conf.h>
#include <sys/lkm.h>

#include "common.h"

/*
* 导入我们支持的操作:open,read,close,ioctl等
*/

int     ourdevopen __P((dev_t dev, int oflags, int devtype, struct proc *p));
int     ourdevclose __P((dev_t dev, int fflag, int devtype, struct proc *p));
int     ourdevread __P((dev_t dev, struct uio *uio, int ioflag));
int     ourdevioctl __P((dev_t dev, u_long cmd, caddr_t data, int fflag,
                        struct proc *p));
int     ourdev_handler __P((struct lkm_table *lkmtp, int cmd));

/*
* outdev_io结构定义在头文件common.h中,我们的设备会通过ioctl调用来获取和设置它的值.
*/

static struct ourdev_io dio;

/*
* 这里我们初始化我们的设备的操作向量
*/

cdev_decl(ourdev);
static struct cdevsw cdev_ourdev = cdev_ourdev_init(1, ourdev);


/*
* 初始化lkm接口的内部结构.第一个参数是模块名,第二个参数是设备的类型,在我的例子里标记为
* LM_DT_CHAR表示是一个字符设备.第三个参数是我们存储在cdevsw[]表中的操作结构.就象系统
* 调用的例子中一样,值为-1的话系统自动找寻空闲的位置存储.最后我们初始化cdevsw结构
*/

MOD_DEV("ourdev", LM_DT_CHAR, -1, &cdev_ourdev)

/*
* 以下的动作在设备被打开的时候执行,这里打印"hello",哈,仅做测试之用:)
*/

int
ourdevopen(dev, oflags, devtype, p)
        dev_t dev;
        int oflags, devtype;

1.OpenBSD可加载内核模块编程完全指南(1)
2.OpenBSD可加载内核模块编程完全指南(2)
3.OpenBSD可加载内核模块编程完全指南(3)
4.OpenBSD可加载内核模块编程完全指南(4)
5.OpenBSD可加载内核模块编程完全指南(5)
6.OpenBSD可加载内核模块编程完全指南(6)
7.OpenBSD可加载内核模块编程完全指南(7)
8.OpenBSD可加载内核模块编程完全指南(8)
9.OpenBSD可加载内核模块编程完全指南(9)
10.OpenBSD可加载内核模块编程完全指南(10)
11.OpenBSD可加载内核模块编程完全指南(11)
12.OpenBSD可加载内核模块编程完全指南(12)
13.OpenBSD可加载内核模块编程完全指南(13)
14.OpenBSD可加载内核模块编程完全指南(14)
15.OpenBSD可加载内核模块编程完全指南(15)
16.OpenBSD可加载内核模块编程完全指南(16)
17.OpenBSD可加载内核模块编程完全指南(17)
18.OpenBSD可加载内核模块编程完全指南(18)
19.OpenBSD可加载内核模块编程完全指南(19)
共19页 9 7 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [198 :>

OpenBSD可加载内核模块编程完全指南 相关文章:
OpenBSD可加载内核模块编程完全指南 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com