Introduction to NetBSD loadable kernel module…

2009-05-13 11:58:11来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

NetBSD可加载
[url=javascript:;]内核[/url]
模块入门BSD爱好者乐园yn;zX{:D8f
BSD爱好者乐园+s@D~5\!jx7B,G
原文出自NetBSD官方网站http://www.home.unix-ag.org/bmeurer/NetBSD/howto-lkm.html
a        yu"I J ad+J
[url=javascript:;]翻译[/url]
并没有通过作者的许可,只是出于学习目的,请勿用于商业用途。BSD爱好者乐园Da/q4u4F qd!X2M4_
我翻译的有很多出入,本文由abutter重新翻译。
/M)O1?7i[ EN(a
#IGK
F j@绪论
iM r6X`        X
z)GK&E在诸如GNU/Linux,
[url=javascript:;]FreeBSD[/url]
以及Microsfot Windows等大多数现代操作系统中,可加载内核模块(
[url=javascript:;]loadable[/url]

[url=javascript:;]kernel[/url]
module,LKM)非常的流行。有了它,你可以在内核运行时扩展其的功能,而不必重新
[url=javascript:;]编译[/url]
(内核),更不用重启系统。可加载内核模块可以在内核运行时加载,以支持特定的设备以及伪设备。举例来说,几乎每个Linux设备驱动程序是以或者能以可加载内核模块的形式使用的。BSD爱好者乐园7I-Tt.F;@PfD
而在NetBSD中,可加载内核模块目前还不那样常见。本文编写时,仅有很少驱动程序(大部分的文件系统、兼容层和以及其他少数linuxrtc模拟之类的驱动程序)是以可加载内核模块的形式使用的。这种情况在不久的将来会有所改变。
"zN1Y q#_5|*q可加载内核模块接口的最初设计目的是为了与SunOS可加载内核模块功能上保持一致。对/dev/lkm文件执行ioctl(2)调用可以控制lkm(4)功能,不过,你应该从不需要直接与/dev/lkm打交道,因为所有的(这些)操作都由modload(8)、modunload(8)和modstat(8)程序处理了。值得注意的是,为了使用可加载内核模块,你运行的内核必须是编译时是打开了LKM选项的。BSD爱好者乐园&g4e"EqrMj;r1j)^A
BSD爱好者乐园*M6k)T A Oj]}"?j
编写可加载内核模块
9VCyP'j我很乐意向你展示如何编写一个只进行FIBONACCI数计算的简单字符设备驱动,因此,我将此模块命名为fibo.o,并且让所有函数的名称以fibo_开头。这个驱动程序提供了从/dev/fibo0到/dev/fibo7的8个子设备,而每个子设备支持下面几个函数:BSD爱好者乐园+y]@YM)r?N%l5R!?*\
static int fibo_open(dev_t, int, int, struct proc *);
Y\JS q#k)l@6{"gstatic int fibo_close(dev_t, int, int, struct proc *);BSD爱好者乐园2K*LOb-RqN
static int fibo_read(dev_t dev, struct uio *, int);BSD爱好者乐园 ENT`w6z
你可以打开和关闭这个驱动程序提供的设备,同时你也可以从中读取内容(后面讨论这些实际的函数的时候,我们再进一步的了解这些参数)。BSD爱好者乐园0P0v/~0Q\V%\
现在,我们需要告诉内核我们有一个具有上述三个函数的字符设备驱动,因此,我们要对结构体cdevsw进行填充(cdevsw表示字符设备转换器,结构体cdevsw在sys/conf.h中定义)。
0Pm0@#U H%`v)RY4E Zstatic struct cdevsw fibo_dev = {BSD爱好者乐园,SQRO/AZ)b?C
fibo_open,
veYq/y L3B fibo_close,
-CiE4`#Ex S.o/P fibo_read,BSD爱好者乐园({e!m*h*q8i        iD%LNL
(dev_type_write((*))) enodev,BSD爱好者乐园1G:s#nt%]
Sn%r1c[
(dev_type_ioctl((*))) enodev,BSD爱好者乐园X!R3A0@{2K?tG

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:FreeBSD7.0的硬件支持列表

下一篇:Writing a pseudo device