JavaScript is required to for searching.
跳过导航链接
退出打印视图
编写设备驱动程序     Oracle Solaris 11.1 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.  Oracle Solaris DDI/DKI 服务汇总

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

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

Oracle 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 文件

索引

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

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

在活动的系统上调试控制台帧缓存器驱动程序可能会遇到问题。

本节提供了一些建议,可帮助您开发、测试和调试控制台帧缓存器驱动程序。

测试 I/O 控制接口

要测试 ioctl 命令,请额外创建一些可通过用户应用程序调用的 ioctl 入口点。确保正确地复制参数。使用 ddi_copyin(9F)ddi_copyout(9F) 例程在用户地址空间来回传输数据。然后编写一个应用程序,以验证呈现、滚动和光标行为。这样,在您开发和测试这些 ioctl 命令时,它们就不会影响您的控制台。

为确保 ioctl 命令正常工作,请引导系统,然后登录。检查在执行 prstat(1M)、ls(1)、 vi(1) 和 man(1) 等命令时,是否能够得到预期的行为。

执行以下脚本以验证 ANSI 颜色是否正常工作:

#!/bin/bash
printf "\n\n\n\e[37;40m             Color List       \e[m\n\n"
printf "\e[30m Color 30 black\e[m\n"
printf "\e[31m Color 31 red\e[m\n"
printf "\e[32m Color 32 green\e[m\n"
printf "\e[33m Color 33 yellow\e[m\n"
printf "\e[34m Color 34 blue\e[m\n"
printf "\e[35m Color 35 purple\e[m\n"
printf "\e[36m Color 36 cyan\e[m\n"
printf "\e[37m Color 37 white\e[m\n\n"
printf "\e[40m Backlight 40 black \e[m\n"
printf "\e[41m Backlight 41 red   \e[m\n"
printf "\e[34;42m Backlight 42 green \e[m\n"
printf "\e[43m Backlight 43 yellow\e[m\n"
printf "\e[37;44m Backlight 44 blue  \e[m\n"
printf "\e[45m Backlight 45 purple\e[m\n"
printf "\e[30;46m Backlight 46 cyan  \e[m\n"
printf "\e[30;47m Backlight 47 white \e[m\n\n"

测试轮询式 I/O 接口

轮询式 I/O 接口仅在以下情况下可用:

轮询式 I/O 接口仅在引导过程的特定点可用。运行系统之前从 OpenBoot PROM 发出的轮询式 I/O 请求不会呈现。同样,配置控制台之前发出的 kmdb 提示也不会呈现。

要测试轮询式 I/O 接口,请使用 L1+A 击键序列进入 OpenBoot PROM。要验证是否正在使用轮询式 I/O 接口,请在 OpenBoot PROM ok 提示符下键入以下命令:

ok 1b emit ." [32m This is a test" 1b emit ." [m"

如果以下叙述属实,则表明轮询式 I/O 接口工作正常:

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

要确定视频模式更改回调函数是否正常工作,请登录系统,然后使用 fbconfig(1M) 多次更改帧缓存器的分辨率和深度。如果控制台能够继续正常显示文本,则表明视频模式更改回调函数工作正常。内核终端仿真器可能会调整字体大小以适合不同的屏幕大小,但这并不会对控制台帧缓存器驱动程序有重大影响。

要确定 X 窗口系统和控制台帧缓存器驱动程序是否正常交互,请在 X 窗口系统与命令行之间进行多次切换,同时,以不同的方式修改 X 窗口系统的视频分辨率和命令行分辨率。如果 X 窗口系统退出,并且控制台字符不能正常显示,则要么是 X 窗口系统未将视频模式已更改的情况通知给驱动程序控制台代码,要么是驱动程序未调用内核终端仿真器的视频模式更改回调函数。

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

在引导过程中,如果系统找不到或者无法成功装入与内核终端仿真器兼容的帧缓存器驱动程序,系统将向 /var/adm/messages 发送消息。要监视这些消息,请在单独的窗口中键入以下命令:

% tail -f /var/adm/messages

为避免调试驱动程序时 USB 发生问题,请更改 EEPROM input-device NVRAM 配置参数,以使用串行端口来代替键盘。有关此参数的更多信息,请参见 eeprom(1M) 手册页。