驱动程序
本部分描述了不同的 STREAMS 设备驱动程序。
在硬件设备的接口上,字符 I/O 驱动程序具有中断入口点; 在系统接口上,这些相同驱动程序通常具有直接入口点 (例程) 以处理 open, close, read和 write 子例程以及 ioctl 操作。
STREAMS 设备驱动程序在硬件设备接口具有类似的中断入口点,并且仅对 open 和 close 子例程具有直接入口点。 使用 STREAMS 访问这些入口点,调用格式与字符设备驱动程序不同。 put 过程是驱动程序的第三个入口点,但它是消息 (而不是系统) 接口。 流头将 write 子例程和 ioctl 操作转换为消息,并将它们发送到下游,以供驱动程序的 write QUEUE put 过程处理。 read 子例程仅由流头直接看到,流头包含处理子例程所需的函数。 驱动程序不知道除 open 和 close 子例程以外的系统接口,但如果流控制从流头传播到驱动程序并影响驱动程序向上游发送消息的能力,那么它可以间接检测缺少 read 子例程。
对于输入处理,当驱动程序准备好向用户进程发送数据或其他信息时,它不会唤醒该进程。 它准备消息并将其发送到相应 (次要设备) 流的读 QUEUE。 驱动程序的打开例程通常存储与此流对应的 QUEUE 地址。
对于输出处理,驱动程序从流头接收消息,而不是处理 write 子例程。 如果无法将消息立即发送到硬件,那么可能会将其存储在驱动程序的写消息队列中。 后续输出中断可从此队列中除去消息。
驱动程序和模块可以使用为此目的提供的消息类型向进程传递信号,错误代码和返回值。
有三个特殊的设备驱动程序:
| 项 | 描述 |
|---|---|
| 克隆 | 在另一个 STREAMS 驱动程序上查找并打开未使用的次设备。 |
| LOG | 为 STREAMS 错误日志记录和事件跟踪进程提供接口。 |
| 难过 | 为管理操作提供接口。 |