初识LKM
2009-05-13 03:53:12来源:未知 阅读 ()
NetBSD的LKM设计初衷是兼容SunOS的LKM。LKM的操作是通过对/dev/lkm进行ioctl,不过现在绝大部分操作都可以通过modload(8),modunload(8),modstat(8)进行,程序员应该不会遇到需要直接操作/dev/lkm的情景。
LKM需要在kernel编译时加入option LKM选项。编译LKM模块需要安装sys源代码。
模块类型:
System Call modules:
所有的系统调用都可被替换,但要小心ioctl,因为modload和modunload模块需要调用该函数。
当模块卸载后,被替换的系统调用会恢复到系统调用表中原有的值(该系统调用表由模块提供)。
Virtual File System modules:
虚拟文件系统也可以通过LKM加载。
Device Driver modules:
块设备和字符设备。注意对应的设备需要手动加入/dev中。
Emulation modules:
对其它操作系统的模拟支持。
Execution Interpreters:
提供新的二进制代码格式,通常与Emulation modules联合使用。
Miscellaneous modules:
自由发挥的模块。
每个模块都需要提供一个入口函数,该函数在模块需要链接的时候传递给modload调用的ld(1)。默认入口函数为xxxinit(...)。若找不到xxxinit,则寻找modulename_lkmentry(...)。modulename即指定的模块名(生成的模块文件名去掉.o)。
一般入口函数内会有一个DISPATCH宏调用,以指定模块在载入、卸载和查询状态时调用的函数。
下面我们实现一个简单的hello world LKM。
1、Makefile
MKMAN= no
KMOD?= helloworld
SRCS= main.c
load:
sudo modload $(KMOD).o
unload:
sudo modunload $(KMOD)
.include
2、main.c
include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* init routine */
int xxxinit(struct lkm_table *, int, int);
static int hello_handle(struct lkm_table *lkmtp, int cmd);
MOD_MISC("helloworld");
int xxxinit(struct lkm_table *lkmtp, int cmd, int ver){
DISPATCH(lkmtp, cmd, ver, hello_handle, hello_handle, hello_handle);
}
static int hello_handle(struct lkm_table *lkmtp, int cmd){
switch (cmd) {
case LKM_E_LOAD:
if (lkmexists(lkmtp))
return (EEXIST);
log(LOG_KERN | LOG_DEBUG, "helloworld: driver loaded successfully\n");
break;
case LKM_E_UNLOAD:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:FreeBSD系统结构手册
- sysctl编程读电池状态 2009-05-13
- apache之DSO原理 2009-05-13
- FreeBSD模块开发最简单示例 2009-05-13
- 关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明 2009-05-13
- Nginx终于有了类似modsecurity的模块了!还不快快转到Nginx环 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash