编写设备驱动程序

创建从设备节点

连接过程的一个重要部分是为设备实例创建次要节点。次要节点包含由设备和 DDI 框架导出的信息。系统使用此信息为 /devices 下的次要节点创建特殊文件

驱动程序调用 ddi_create_minor_node(9F) 时会创建次要节点。驱动程序提供次要设备号次要名称次要节点类型,以及次要节点是代表块设备还是字符设备。

驱动程序可以为设备创建任意数量的次要节点。Solaris DDI/DKI 期望某些类别的设备具有以特定格式创建的次要节点。例如,期望磁盘驱动程序为连接的每个物理磁盘实例创建 16 个次要节点。将创建八个代表块设备接口 a - h 的次要节点,另外八个次要节点代表字符设备接口 a,raw - h,raw

传递给 ddi_create_minor_node(9F)次要设备号全部由驱动程序定义。次要设备号通常是设备实例编号和次要节点标识符的编码。在前面的示例中,驱动程序会为每个次要节点创建次要设备号,方法是将设备的实例编号左移三位,再将该结果与次要节点索引进行“或”运算。次要节点索引值的范围介于 0 和 7 之间。请注意,次要节点 aa,raw 共用同一次要设备号。这些次要节点根据传递到 ddi_create_minor_node()spec_type 参数来区分。

传递给 ddi_create_minor_node(9F)次要节点类型对设备类型进行分类,如磁盘、磁带、网络接口、帧缓存器等。

下表列出了可以创建的可能的节点类型。

表 6–1 可能节点类型

常量 

说明 

DDI_NT_SERIAL

串行端口 

DDI_NT_SERIAL_DO

拨出端口 

DDI_NT_BLOCK

硬盘 

DDI_NT_BLOCK_CHAN

带有通道或目标编号的硬盘 

DDI_NT_CD

ROM 驱动器 (CD-ROM) 

DDI_NT_CD_CHAN

带有通道或目标编号的 ROM 驱动器 

DDI_NT_FD

软盘 

DDI_NT_TAPE

磁带机 

DDI_NT_NET

网络设备 

DDI_NT_DISPLAY

显示设备 

DDI_NT_MOUSE

鼠标 

DDI_NT_KEYBOARD

键盘 

DDI_NT_AUDIO

音频设备 

DDI_PSEUDO

通用的伪设备 

节点类型 DDI_NT_BLOCKDDI_NT_BLOCK_CHANDDI_NT_CDDDI_NT_CD_CHAN 会使 devfsadm(1M) 将设备实例标识为磁盘,并在 /dev/dsk/dev/rdsk 目录中创建名称。

节点类型 DDI_NT_TAPE 会使 devfsadm(1M) 将设备实例标识为磁带,并在 /dev/rmt 目录中创建名称。

节点类型 DDI_NT_SERIALDDI_NT_SERIAL_DO 会使 devfsadm(1M) 执行以下操作:

供应商提供的字符串应包括使字符串唯一的标识值,如名称或股票名称。该字符串可与 devfsadm(1M)devlinks.tab 文件(请参见 devlinks(1M) 手册页)一起使用以在 /dev 中创建逻辑名称。