FreeBSD 系统结构手册
上一页 | 第9章 　编写 FreeBSD 设备驱动程序 | 下一页

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

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

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

- `kldload` - 加载新内核模块

- `kldunload` - 卸载内核模块

- `kldstat` - 列举当前加载的模块

内核模块的程序框架

    /*
     * 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

上一页 | 起始页 | 下一页
编写 FreeBSD 设备驱动程序 | 上一级 | 访问设备驱动程序

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

如果对于FreeBSD有问题，请先阅读文档，如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.