编写设备驱动程序

设备问题

本节介绍特殊设备的问题。

时间关键型部分

虽然在有了锁定原语所提供的同步和保护机制的情况下可以执行大多数驱动程序操作,但是对于某些设备而言,必须在没有中断的情况下按顺序发生一系列事件。函数 ddi_enter_critical(9F) 与锁定原语一起将请求系统尽可能保证不会抢占或中断当前线程。在进行对 ddi_exit_critical(9F) 的关闭调用之前,此保证将一直有效。有关详细信息,请参见 ddi_enter_critical(9F) 手册页。

延迟

许多芯片指定只能在指定间隔对其进行访问。例如, Zilog Z8530 SCC 具有 1.6 微秒的“写入恢复时间”。此规范意味着通过 8530 写入字符时,必须使用 drv_usecwait(9F) 强制延迟。在某些情况下,规范不会明确指示所需的延迟,因此必须根据经验来确定延迟。

请注意不要组合可能大量存在的设备部件的延迟,例如数以千计的 SCSI 磁盘驱动器。

内部顺序逻辑

具有内部顺序逻辑的设备会将多个内部寄存器映射到同一外部地址。各种内部顺序逻辑包括以下类型:

中断问题

请注意以下常见的与中断相关的问题: