分类: BSD
2008-03-20 17:36:49
NetBSD可加载模块入门
原文出自NetBSD官方网站
并没有通过作者的许可,只是出于学习目的,请勿用于商业用途。
我翻译的有很多出入,本文由abutter重新翻译。
绪论
在诸如GNU/Linux,以及Microsfot Windows等大多数现代操作系统中,可加载内核模块( module,LKM)非常的流行。有了它,你可以在内核运行时扩展其的功能,而不必重新(内核),更不用重启系统。可加载内核模块可以在内核运行时加载,以支持特定的设备以及伪设备。举例来说,几乎每个Linux设备驱动程序是以或者能以可加载内核模块的形式使用的。
而在NetBSD中,可加载内核模块目前还不那样常见。本文编写时,仅有很少驱动程序(大部分的文件系统、兼容层和以及其他少数linuxrtc模拟之类的驱动程序)是以可加载内核模块的形式使用的。这种情况在不久的将来会有所改变。
可加载内核模块接口的最初设计目的是为了与SunOS可加载内核模块功能上保持一致。对/dev/lkm文件执行ioctl(2)调用可以控制lkm(4)功能,不过,你应该从不需要直接与/dev/lkm打交道,因为所有的(这些)操作都由modload(8)、modunload(8)和modstat(8)程序处理了。值得注意的是,为了使用可加载内核模块,你运行的内核必须是编译时是打开了LKM选项的。
编写可加载内核模块
我很乐意向你展示如何编写一个只进行FIBONACCI数计算的简单字符设备驱动,因此,我将此模块命名为fibo.o,并且让所有函数的名称以fibo_开头。这个驱动程序提供了从/dev/fibo0到/dev/fibo7的8个子设备,而每个子设备支持下面几个函数: