第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
内核终端仿真器通过两种接口与控制台帧缓存器驱动程序进行交互。在正常的系统活动期间(系统成功引导后),内核终端仿真器与控制台帧缓存器驱动程序之间的通信通过 ioctl 接口进行。在独立模式期间(系统引导之前或调试期间),内核终端仿真器与控制台帧缓存器驱动程序之间的通信通过轮询式 I/O 接口进行。内核终端仿真器与控制台帧缓存器驱动程序之间的所有活动都由内核终端仿真器启动,但控制台帧缓存器驱动程序用来通知内核终端仿真器有关视频模式方面的变化的回调函数除外。
visual_io(7I) 手册页中详细说明了控制台可视化 I/O 接口。有关视频模式更改回调函数的更多信息,请参见视频模式更改回调接口。
在正常的系统活动期间,内核终端仿真器通过下表中列出的 ioctl 接口与控制台帧缓存器驱动程序进行通信:
|
轮询式 I/O 接口提供的功能与 VIS_CONSDISPLAY、VIS_CONSCOPY 和 VIS_CONSCURSOR ioctl 接口的功能相同。仅当操作系统被停止并处于独立模式时,才调用轮询式 I/O 接口。有关更多信息,请参见在控制台帧缓存器驱动程序中实现轮询式 I/O。
处于独立模式时,内核终端仿真器通过下表中列出的轮询式 I/O 接口与控制台帧缓存器驱动程序进行通信:
|
在任何时候,控制台帧缓存器驱动程序与内核终端仿真器都必须就视频模式取得一致。视频模式涉及到控制台屏幕高度、宽度和深度(以像素为单位)。视频模式还涉及到内核终端仿真器与控制台帧缓存器之间的通信是在 VGA 文本模式还是在像素模式下进行。
为了让控制台帧缓存器驱动程序通知内核终端仿真器有关视频模式方面的变化,将使用下表中所述的 (*modechg_cb)() 内核终端仿真器回调函数的地址初始化控制台帧缓存器驱动程序:
|