|
OpenBSD可加载内核模块编程完全指南(10) break;
default: error = ENOTTY; break; } return(error); }
/* * 我们的外部入口点.非常象前面介绍的系统调用的例子,用来控制模块的加载,这里和系统调用模块不 * 同的是我们在模块卸载的时候没有制定特殊的动作 */
int ourdev(lkmtp, cmd, ver) struct lkm_table *lkmtp; int cmd; int ver; { DISPATCH(lkmtp, cmd, ver, ourdev_handler, lkm_nofunc, lkm_nofunc) }
/* * 控制加载模块的代码.我们为我们的内部结构设置一些初始值,这些值以后会被ioctl改变.它仅仅 * 在模块被加载的时候用到. */
int ourdev_handler(lkmtp, cmd) struct lkm_table *lkmtp; int cmd; { struct lkm_dev *args = lkmtp->private.lkm_dev; if (cmd == LKM_E_LOAD) { dio.value = 13; strncpy(dio.msg,"hello world!n", MAXMSGLEN - 1); printf("loading module %sn", args->lkm_name); }
|