Writing a pseudo device

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

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


原文
http://www.netbsd.org/Documentation/kernel/pseudo/
BSD爱好者乐园 C5j8lp9y5p$ZI
R PTi%X        WJ7u*Pbf
[url=javascript:;]NetBSD[/url]
文档:如何编写一个伪设备
Ev+V}S"ld
-b0j3Dh?_ _简介
n#Q
K]E'uj)G'a本文是为那些想学习写内核驱动的人的入门指南,全文围绕一个简单的伪设备展开。阅读本文你需要熟悉内核的编译、makefile、
[url=javascript:;]安装[/url]
内核这些本文没涉及的内容。本文也不涉及内核编程本身,它和应用编程相当不同。总之,本文是你进入内核编程世界必经之路。
Ux,@f?x
'XR&VC)W-L#g.yVO你的代码
6`F8fr4wsTW@9@pseudo_dev_skel.c
文件给出了伪设备的框架,pseudo_dev_skel.h定义了内核函数原型和ioctl数据结构以及ioctl号。注意,不同于一般的驱动,伪设备
没有常规的探测过程,因为这没必要,这简化了开发过程因为我们不必和autoconfig框架打交道。我们提供了一个支持open、close和
ioctl调用的例子,这是一个真正的伪设备最小的功能集。一般伪设备还会有read、write、mmap和其他的设备函数,但它们都和open、
close和ioctl一样遵循同样的模式,因此,本文就省略了这些内容。BSD爱好者乐园A@%CP8I!HF

许你需要弄清的首要任务是怎么称呼你的新设备。有很多方便的用来生成内核结构的宏可以把设备名和函数调用名联系起来,如果你要在内核配置文件中添加一项的
话这些宏就会派上用场,配置文件项并不指定头文件名。在我们的示例驱动中我们管这个为设备叫“skeleton”,所以我们得有一个叫skeleton的
配置文件项。这意味着attach、open、close和ioctl函数以skeletonattach、skeletonopen、
skeletonclose和skeletonioctl的名字被调用。另一个问题是,你写的伪设备是块设备还是字符设备,这将影响到你的代码和内核的交
互,毕竟是你自己写这些代码。写设备驱动就面临着块设备驱动还是字符设备驱动的问题,这取决于它们跟什么设备通信,根块设备通信就最好选块设备,反之亦
然。有些设备即支持块模式又支持字符模式,有时称之为“raw”设备,因为它不提供数据块抽象操作。伪设备就没有这个问题,根本不必考虑硬件,而根据它的
用途来确定,模拟磁盘就选块设备驱动,但是我们的例子是个字符设备。BSD爱好者乐园W        Ir*_`!a
一旦问题确定了我们就开始弄代码了,在此之前我们要决定代码放在哪里,如果我们的伪设备要在多平台下
[url=javascript:;]使用[/url]

放在/usr/src/sys/dev,如果只在x86下用就放在/usr/src/sys/arch/i386/的相应目录下。
pseudo_dev_skel.c的头部应该是skeleton_softc结构,_softc这样的softc结构是必须
的,其第一个成员必须是        struct
device类型,entry的名字不重要,但是必须是第一个,因为autoconfig读取softc结构而不加检查,并且必须是一个struct
device。每个softc对应一个设备的子设备号,如果子设备需要保存状态信息的话softc结构可以比struct device保存更多的成员。
P/l`8@O
d
&z;TmhyM1cO8[^函数BSD爱好者乐园`)e(U6^9@
你的设备的内核接口可以通过一组函数来被用户态程序访问。一个设备不需要支持全部接口,但是一个有用的设备最少要支持open和close。记住这些函数和你的设备被联系起来了。
"Th!hLB)q2m1. attach()BSD爱好者乐园%YUCA0O~?'S
        该函数在内核初始化时被调用一次,被用来设置所有被稍后用于分配需要的用作缓冲的内核空间的调用所引用的变量。该函数只有一个参数就是要操纵的驱动的设备号。BSD爱好者乐园

标签:

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

上一篇:Introduction to NetBSD loadable kernel modules 翻译

下一篇:vsftpd.conf中文man