编写设备驱动程序

测试驱动程序

本节介绍如何使用 th_define(1M)th_manage(1M) 命令创建并注入故障。

创建故障

th_define 实用程序为 bofi 设备驱动程序提供了一个接口,以用于定义 errdef。errdef 对应于有关如何损坏设备驱动程序对其硬件的访问的规范。th_define 命令行参数确定要注入的故障的确切性质。如果提供的参数定义了一致的 errdef,th_define 进程将使用 bofi 驱动程序存储 errdef。该进程将使自身暂停,直至 errdef 给定的条件得到满足为止。实际上,当访问计数达到零 (0) 时,暂停将结束。

注入故障

测试工具在数据访问级别运行。数据访问具有以下特征:

测试工具截获数据访问并将适当的故障注入驱动程序。th_define(1M) 命令指定的 errdef 可对以下信息编码:

使用 -a acc_chk 选项可仿真 errdef 中的框架故障。

故障注入过程

    注入故障的过程涉及两个阶段:

  1. 使用 th_define(1M) 命令创建 errdef。

    通过向 bofi 驱动程序传递测试定义来创建 errdef,该驱动程序会存储这些定义,因此可以使用 th_manage(1M) 命令来访问它们。

  2. 创建工作负荷,然后使用 th_manage 命令激活和管理 errdef。

    th_manage 命令是到 bofi 工具驱动程序可以识别的各种 ioctl 的用户接口。th_manage 命令在驱动程序名称和实例级别运行并且包含以下命令: get_handles 用于列出访问句柄,start 用于激活 errdef,stop 用于取消激活 errdef。

    激活 errdef 将导致合格的数据访问出现故障。th_manage 实用程序支持以下命令: broadcast 用于提供 errdef 的当前状态,clear_errors 用于清除 errdef。

    有关更多信息,请参见 th_define(1M) 和 th_manage(1M) 手册页。

测试工具警告

可对测试工具进行配置,以便通过以下方法来处理警告消息:

使用第二种方法有助于确定问题的根本原因。

如果将 bofi-range-check 属性值设置为 warn,当工具检测到驱动程序违反 DDI 函数的范围时,该工具将列显以下消息(或者,如果设置为 panic,则会进入紧急状态):

ddi_getX() out of range addr %x not in %x
ddi_putX() out of range addr %x not in %x
ddi_rep_getX() out of range addr %x not in %x
ddi_rep_putX() out of range addr %x not in %x

X 为 8、16、32 或 64。

当工具已请求插入 1000 个以上额外中断时,如果驱动程序未检测到中断逾限 (jabber),则会列显以下消息:

undetected interrupt jabber - %s %d