JavaScript is required to for searching.
跳过导航链接
退出打印视图
编写设备驱动程序     Oracle Solaris 10 1/13 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

第 1 部分针对 Oracle Solaris 平台设计设备驱动程序

1.  Oracle Solaris 设备驱动程序概述

2.  Oracle Solaris 内核和设备树

3.  多线程

4.  属性

5.  管理事件和排队任务

6.  驱动程序自动配置

7.  设备访问:程控 I/O

8.  中断处理程序

9.  直接内存访问 (Direct Memory Access, DMA)

10.  映射设备和内核内存

11.  设备上下文管理

12.  电源管理

13.  强化 Oracle Solaris 驱动程序

14.  分层驱动程序接口 (Layered Driver Interface, LDI)

第 2 部分设计特定种类的设备驱动程序

15.  字符设备驱动程序

16.  块设备驱动程序

17.  SCSI 目标驱动程序

18.  SCSI 主机总线适配器驱动程序

19.  网络设备驱动程序

20.  USB 驱动程序

21.  SR-IOV 驱动程序

第 3 部分生成设备驱动程序

22.  编译、装入、打包和测试驱动程序

23.  调试、测试和调优设备驱动程序

24.  推荐的编码方法

第 4 部分附录

A.  硬件概述

B.  Solaris DDI/DKI 服务汇总

C.  使设备驱动程序支持 64 位

D.  控制台帧缓存器驱动程序

Solaris 控制台和内核终端仿真器

x86 平台控制台通信

SPARC 平台控制台通信

控制台可视化 I/O 接口

I/O 控制接口

轮询式 I/O 接口

视频模式更改回调接口

在控制台帧缓存器驱动程序中实现可视化 I/O 接口

VIS_DEVINIT

VIS_DEFINI

VIS_CONSDISPLAY

VIS_CONSCOPY

VIS_CONSCURSOR

VIS_PUTCMAP

VIS_GETCMAP

在控制台帧缓存器驱动程序中实现轮询式 I/O

特定于帧缓存器的配置模块

特定于 X 窗口系统帧缓存器的 DDX 模块

开发、测试和调试控制台帧缓存器驱动程序

测试 I/O 控制接口

测试轮询式 I/O 接口

测试视频模式更改回调函数

有关测试控制台帧缓存器驱动程序的其他建议

E.  pci.conf 文件

索引

在控制台帧缓存器驱动程序中实现轮询式 I/O

轮询式 I/O 接口在驱动程序中作为函数实现,并由内核终端仿真器直接调用。在执行 VIS_DEVINIT ioctl 命令期间,驱动程序会将其轮询式 I/O 入口点的地址传递给终端仿真器。VIS_DEVINIT 命令由终端仿真器启动。

以下代码中显示了 vis_polledio 结构。

typedef void * vis_opaque_arg_t;

struct vis_polledio {
      struct vis_polledio_arg *arg;
      void    (*display)(vis_opaque_arg_t, struct vis_consdisplay *);
      void    (*copy)(vis_opaque_arg_t, struct vis_conscopy *);
      void    (*cursor)(vis_opaque_arg_t, struct vis_conscursor *);
};

轮询式 I/O 接口提供的功能与 VIS_CONSDISPLAYVIS_CONSCOPY VIS_CONSCURSOR ioctl 接口的功能相同。要实现轮询式 I/O 接口,应该按照上面针对相应 ioctl 命令所述的相同步骤操作。轮询式 I/O 接口必须严格遵循本节其余部分所述的其他限制。

仅当操作系统被停止并处于独立模式时,才调用轮询式 I/O 接口。每当用户进入 OpenBoot PROM 或 kmdb 调试器时,或者系统出现紧急情况时,系统就会进入独立模式。此时,只有一个 CPU 和一个线程处于活动状态。其他所有 CPU 和线程均会停止。分时、DDI 中断和系统服务都将关闭。

独立模式会严重限制驱动程序的功能,但会简化驱动程序同步要求。例如,用户应用程序无法通过在轮询式 I/O 例程中对控制台帧缓存器驱动程序进行内存映射这样的方式来访问该驱动程序。

在独立模式下,控制台帧缓存器驱动程序不得执行下列任一操作:

遵守这些限制并不困难,因为操作轮询式 I/O 函数相对较为简单。例如,在使用呈现引擎时,控制台帧缓存器驱动程序可以轮询设备中的某个位,而不是等待中断。驱动程序可以使用预先分配的内存来呈现位块传输 (blit) 数据。DDI 或 LDI 接口应该是不需要的。