声音驱动程序使用与任何硬件驱动程序模块相同的方法探测和连接(设备)。 你可能希望浏览一下手册中ISA或PCI章节的内容来获取更多信息。
然而,声音驱动程序在某些方面又有些不同:
他们将自己声明为pcm
类设备,带有一个
设备私有结构struct snddev_info:
大多数声音驱动程序需要存储关于其设备的附加私有信息。私有数据
结构通常在连接例程中分配。其地址通过调用
pcm_register()
和
mixer_init()
传递给
pcm
。后面pcm
将此地址作为调用声音驱动程序接口时的参数传递回来。
声音驱动程序的连接例程应当通过调用mixer_init()
向pcm
声明它的MIXER或AC97
接口。对于MIXER接口,这会接着引起调用
xxxmixer_init()
。
声音驱动程序的连接例程通过调用
pcm_register(dev, sc, nplay, nrec)
向pcm
声明其通用CHANNEL配置,其中
sc
是设备数据结构的地址,
在pcm
以后的调用中将会用到它,
nplay
和nrec
是播放和录音
通道的数目。
声音驱动程序的连接例程通过调用
pcm_addchan()
声明它的每个通道对象。这会在
pcm
中建立起通道合成,并接着会引起调用
xxxchannel_init()
(译注:请参考原文)。
声音驱动程序的分离例程在释放其资源之前应当调用
pcm_unregister()
。
有两种可能的方法来处理非PnP设备:
使用device_identify()
方法
(范例:sound/isa/es1888.c
)。
device_identify()
方法在已知地址探测硬件,
如果发现支持的设备就会创建一个新的pcm设备,这个pcm设备接着
会被传递到probe/attach。
使用定制内核配置的方法,为pcm设备设置适当的hints(范例:
sound/isa/mss.c
)。
pcm
驱动程序应当实现
device_suspend
,
device_resume
和
device_shutdown
例程,这样电源管理和模块卸载就能
正确地发挥作用。
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<questions@FreeBSD.org>.
关于本文档的问题请发信联系
<doc@FreeBSD.org>.