Solaris 模块调试器指南

设备驱动程序和 DDI 框架

本节介绍对内核开发者以及第三方设备驱动程序开发者均有所帮助的 dcmd 和 walker。

dcmd

address ::binding_hash_entry

在指定内核名称到主设备号的绑定散列表项的地址(结构 bind)的情况下,显示节点绑定名称、主设备号和指向下一个元素的指针。

::devbindings device-name

显示指定驱动程序的所有实例的列表。输出包括对应于每个实例的项(从指向结构 dev_info 的指针开始,可使用 $<devinfo::devinfo 查看此结构)、驱动程序名称、实例编号以及与该实例关联的驱动程序和系统属性。

address ::devinfo [ -q ]

列显与 devinfo 节点关联的系统和驱动程序属性。如果指定了 -q 选项,则仅显示设备节点的核心摘要。

address ::devinfo2driver

列显与 devinfo 节点关联的驱动程序的名称(如果有)。

[ address ] ::devnames [ -v ]

显示内核的 devnames 表以及指向驱动程序实例列表的 dn_head 指针。 如果指定了 -v 标志,则显示在 devnames 表的各项中存储的其他信息。

[ devinfo ] ::prtconf [ -cpv ]

devinfo 指定的设备节点开始显示内核设备树。 如果未提供 devinfo,则缺省情况下假定从设备树的根开始。 如果指定了 -c 选项,则仅显示指定设备节点的子节点。 如果指定了 -p 选项,则仅显示指定设备节点的祖先。 如果指定了 -v,则显示与每个节点关联的属性。

[ major-num ] ::major2name [ major-num ]

显示与指定的主设备号相对应的驱动程序名称。可以将主设备号指定为 dcmd 前面的表达式或指定为命令行参数。

[ address ] ::modctl2devinfo

列显与指定的 modctl 地址相对应的所有设备节点。

::name2major driver-name

在指定设备驱动程序名称的情况下,显示其主设备号。

[ address ] ::softstate [ instance-number ]

在指定 softstate 状态指针(请参见 ddi_soft_state_init(9F))和设备实例编号的情况下,显示该实例的软状态。

Walker

binding_hash

在指定内核绑定散列表项的数组的地址(结构 bind **)的情况下,遍历散列表中的所有项,并返回每个结构 bind 的地址。

devinfo

首先,迭代指定 devinfo 的父级,然后按级别从高到低的顺序将其返回。 其次,返回指定的 devinfo 本身。 第三,按级别从高到低的顺序迭代指定 devinfo 的子级。 dev_info 结构在 <sys/ddi_impldefs.h> 中定义。

devinfo_children

首先,返回指定的 devinfo,然后按级别从高到低的顺序迭代指定 devinfo 的子级。dev_info 结构在 <sys/ddi_impldefs.h> 中定义。

devinfo_parents

按级别从高到低的顺序迭代指定 devinfo 的父级,然后返回指定的 devinfo。 dev_info 结构在 <sys/ddi_impldefs.h> 中定义。

devi_next

迭代指定 devinfo 的同级。dev_info 结构在 <sys/ddi_impldefs.h> 中定义。

devnames

迭代 devnames 数组中的项。此结构在 <sys/autoconf.h> 中定义。

softstate

在指定 softstate 指针(请参见 ddi_soft_state_init (9F))的情况下,显示指向驱动程序状态结构的所有非 NULL 指针。

softstate_all

在指定 softstate 指针(请参见 ddi_soft_state_init(9F))的情况下,显示指向驱动程序状态结构的所有指针。请注意,未使用的实例的指针将为 NULL。