9.2 动态内核链接工具──KLD

  kld接口允许系统管理员从运行的系统中动态地添加和删除功能。 这允许设备驱动程序的编写者将他们的新改动加载到运行的内核中, 而不用为了测试新改动而频繁地重启。

  kld接口通过下面的特权命令使用:



  内核模块的程序框架

/*
 * KLD程序框架
 * 受Andrew Reiter在Daemonnews上的文章所启发
 */

#include <sys/types.h>
#include <sys/module.h>
#include <sys/systm.h>  /* uprintf */ 
#include <sys/errno.h>
#include <sys/param.h>  /* kernel.h中用到的定义 */
#include <sys/kernel.h> /* 模块初始化中使用的类型 */

/* 
 * 加载处理函数,负责处理KLD的加载和卸载。
 */

static int
skel_loader(struct module *m, int what, void *arg)
{
  int err = 0;
  
  switch (what) {
  case MOD_LOAD:                /* kldload */
    uprintf("Skeleton KLD loaded.\n");
    break;
  case MOD_UNLOAD:
    uprintf("Skeleton KLD unloaded.\n");
    break;
  default:
    err = EOPNOTSUPP;
    break;
  }
  return(err);
}

/* 向内核其余部分声明此模块 */

static moduledata_t skel_mod = {
  "skel",
  skel_loader,
  NULL
};  

DECLARE_MODULE(skeleton, skel_mod, SI_SUB_KLD, SI_ORDER_ANY);

9.2.1 Makefile

  FreeBSD提供了一个makefile包含文件,利用它你可以快速地编译 你附加到内核的东西。

SRCS=skeleton.c
KMOD=skeleton

.include <bsd.kmod.mk>

  简单地用这个makefile运行make就能够创建文件 skeleton.ko,键入如下命令可以把它加载到内核:

# kldload -v ./skeleton.ko


本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<[email protected]>.
关于本文档的问题请发信联系 <[email protected]>.