编写设备驱动程序

控制台可视化 I/O 接口

内核终端仿真器通过两种接口与控制台帧缓存器驱动程序进行交互。在正常的系统活动期间(系统成功引导后),内核终端仿真器与控制台帧缓存器驱动程序之间的通信通过 ioctl 接口进行。在独立模式期间(系统引导之前或调试期间),内核终端仿真器与控制台帧缓存器驱动程序之间的通信通过轮询式 I/O 接口进行。内核终端仿真器与控制台帧缓存器驱动程序之间的所有活动都由内核终端仿真器启动,但控制台帧缓存器驱动程序用来通知内核终端仿真器有关视频模式方面的变化的回调函数除外。

visual_io(7I) 手册页中详细说明了控制台可视化 I/O 接口。有关视频模式更改回调函数的更多信息,请参见视频模式更改回调接口

I/O 控制接口

在正常的系统活动期间,内核终端仿真器通过下表中列出的 ioctl 接口与控制台帧缓存器驱动程序进行通信:

ioctl 名称

对应的数据结构 

说明 

VIS_DEVINIT

vis_devinit

初始化终端仿真器模块与帧缓存器之间的会话。请参见VIS_DEVINIT

VIS_DEVFINI

不适用 

终止终端仿真器模块与帧缓存器之间的会话。请参见VIS_DEFINI

VIS_CONSDISPLAY

vis_consdisplay

以矩形显示像素。请参见VIS_CONSDISPLAY

VIS_CONSCOPY

vis_conscopy

复制像素的矩形区(滚动)。请参见VIS_CONSCOPY

VIS_CONSCURSOR

vis_conscursor

显示或隐藏文本光标。请参见VIS_CONSCURSOR

VIS_PUTCMAP

vis_cmap

将终端仿真器模块色彩表发送到帧缓存器驱动程序。请参见VIS_PUTCMAP

VIS_GETCMAP

vis_cmap

从帧缓存器读取终端仿真器模块色彩表。请参见VIS_GETCMAP

轮询式 I/O 接口

轮询式 I/O 接口提供的功能与 VIS_CONSDISPLAYVIS_CONSCOPY VIS_CONSCURSOR ioctl 接口的功能相同。仅当操作系统处于静止状态并处于独立模式时,才调用轮询式 I/O 接口。有关更多信息,请参见在控制台帧缓存器驱动程序中实现轮询式 I/O

处于独立模式时,内核终端仿真器通过下表中列出的轮询式 I/O 接口与控制台帧缓存器驱动程序进行通信:

轮询式 I/O 函数 

对应的数据结构 

说明 

(*display)()

vis_consdisplay

以矩形显示像素。 

(*copy)()

vis_conscopy

复制像素的矩形区(滚动)。 

(*cursor)()

vis_conscursor

显示或隐藏文本光标。 

视频模式更改回调接口

在任何时候,控制台帧缓存器驱动程序与内核终端仿真器都必须就视频模式取得一致。视频模式涉及到控制台屏幕高度、宽度和深度(以像素为单位)。视频模式还涉及到内核终端仿真器与控制台帧缓存器之间的通信是在 VGA 文本模式还是在像素模式下进行。

为了让控制台帧缓存器驱动程序通知内核终端仿真器有关视频模式方面的变化,将使用下表中所述的 (*modechg_cb)() 内核终端仿真器回调函数的地址初始化控制台帧缓存器驱动程序:

回调函数 

对应的数据结构 

说明 

(*modechg_cb)()

vis_modechg_arg

vis_devinit

使终端仿真器模块与驱动程序视频模式(屏幕高度、宽度和像素深度)保持同步。