mdb写経/デバイスドライバと DDI フレームワーク

2012/09/20

dcmds

address ::binding_hash_entry
指定されたカーネル名とメジャー番号のバインディングハッシュテーブルエントリ (構造体 bind) のアドレスを使用して、ノードバインディング名、メジャー番号、および次の要素へのポインタを表示します。

[ address ] ::dev2major <dev_t>
dev_t をメジャー番号に変換します。
> 4500000006::dev2major
0x45 (0t69)

[ address ] ::dev2minor <dev_t>
dev_t をメジャー番号に変換します。
> 4500000006::dev2minor
0x6 (0t6)

address ::dev2snode
dev_t を snode に変換します。
> e400000000::dev2snode
3000bd6d738
3000bd6d6a0
> 3000bd6d738::print struct snode s_vnode |::vnode2path
/devices/pseudo/zfs@0:zfs

[ address ] ::devbindings [-qs] [device-name | major-num]
名前を指定されたドライバについてすべてのインスタンスのリストを表示します。インスタンスごとに 1 つのエントリの出力、つまり、先頭から、構造体 dev_info へのポインタ ($<devinfo または ::devinfo で表示可能)、ドライバ名、インスタンス番号、そのインスタンスに関連するドライバとシステムのプロパティーが表示されます。
-q デバイスノードのクイックサマリだけが表示されます
-s dev_info 構造体の要約を表示します
 > ::devbindings zfs
3000628e058      zfs, instance #0 (driver name: zfs)
        Driver properties at 3000ae5a140:
            name='Nblocks' type=int64 items=1 dev=(228,2)
                value=0000000000200000
            name='Size' type=int64 items=1 dev=(228,2)
                value=0000000040000000
            name='name' type=string items=1 dev=(228,2)
                value='rpool/swap'
            name='Nblocks' type=int64 items=1 dev=(228,1)
                value=0000000000200000
            name='Size' type=int64 items=1 dev=(228,1)
                value=0000000040000000
            name='name' type=string items=1 dev=(228,1)
                value='rpool/dump'
> ::devbindings -s zfs
DEVINFO            MAJ           REFCNT NODENAME             NODESTATE
                  INST         CIRCULAR BINDNAME             STATE
                                 THREAD                      FLAGS          
000003000628e058   228                8 zfs@0                DS_READY
                     0                0 zfs                  <S_EVADD,S_NEED_RESET>
                                      0                      <>
> ::devbindings -q vdc
30002bff0c8      SUNW,sun4v-disk, instance #0 (driver name: vdc)
30002bfee00      SUNW,sun4v-disk, instance #1 (driver name: vdc)
30002bfeb38      SUNW,sun4v-disk, instance #2 (driver name: vdc)

address ::devinfo [-qs]
devinfo ノードに関連するシステムプロパティーおよびドライバプロパティーを出力します。
-q デバイスノードのクイックサマリだけが表示されます。
-s dev_info 構造体の要約を表示します
> ffffff00c96b8060::devinfo
ffffff00c96b8060 sd, instance #0 (driver name: sd)
        System properties at ffffff00cea84bd0:
            name='lun' type=int items=1
                value=00000000
            name='target' type=int items=1
                value=00000000
            name='class' type=string items=1
                value='scsi'
        Driver properties at ffffff00ce9d10b0:
            name='pm-components' type=string items=3
                value='NAME=spindle-motor' + '0=off' + '1=on'
            name='pm-hardware-state' type=string items=1
                value='needs-suspend-resume'
            name='ddi-failfast-supported' type=any items=0
            name='ddi-kernel-ioctl' type=any items=0
            name='fm-ereport-capable' type=any items=0
            name='removable-media' type=any items=0
        Hardware properties at ffffff00cea84f68:
            name='inquiry-revision-id' type=string items=1
                value='0.15'
            name='inquiry-product-id' type=string items=1
                value='QEMU DVD-ROM'
            name='inquiry-vendor-id' type=string items=1
                value='QEMU'
            name='inquiry-device-type' type=int items=1
                value=00000005
            name='variant' type=string items=1
                value='atapi'
        Global properties at ffffff00c620f088:
            name='ddi-devid-registrant' type=int items=1
                value=00000001

address ::devinfo2driver
devinfo ノードに関連するドライバ(もしあれば)の名前を出力します。
> ffffff00c96b8060::devinfo2driver
Driver 'sd' is associated with devinfo ffffff00c96b8060.

[ address ] ::devnames [-vm] [num]
カーネルの devnames テーブルと dn_head ポインタを表示します。このポインタは、ドライバインスタンスリストを指しています。
-v devnames テーブルの各エントリに格納されている追加情報が表示されます。
> ::devnames -v
NAME
cn
            flags DN_CONF_PARSED,DN_LEAF_DRIVER
               pl ffffff00c6022308
             head ffffff00c6314970
         instance 0
           inlist 0
  global_prop_ptr 0
zcons
            flags
               pl 0
             head 0
         instance 0
           inlist 0
  global_prop_ptr 0
glm
            flags DN_CONF_PARSED
               pl 0
             head 0
         instance 0
           inlist 0
  global_prop_ptr ffffff00c62179b8
  properties at ffffff00c6215a68:
      name='tape' type=string items=1
          value='sctp'
      name='scsi-initiator-id' type=int items=1
          value=00000007
      name='queue' type=string items=1
          value='qsort'
      name='flow_control' type=string items=1
          value='dsngl'

[ address ] ::devt <dev_t>
dev_t のメジャー番号とマイナー番号を表示します。
> 4500000006::devt
     MAJOR       MINOR
        69           6

[ address ] ::ldi_handle [-i]
ldi(layered driver identifier) ハンドルを表示します。アドレスを指定しない場合は、すべての ldi_handle_t 構造体を表示します。-i オプションを指定した場合、モジュール識別子の情報を表示します。
> ::ldi_handle
HANDLE           REFS            VNODE        DRV MINOR           EVENTS            IDENT
000003000709a498    1 00000300088c8000     consms     0                - 00000300062b8068
00000300143b2b28    1 000003000abce180       vnet  1003                - 000003000bd83730
000003000709a3f0    1 00000300088c8300    conskbd     1                - 0000030008d19458
000003000709a4d0    1 00000300088c8300    conskbd     1                - 00000300062b8068
000003000bca5148    1 000003000c734800        ip6 262199                - 00000300080ec280
000003000bca5228    1 000003000c734a00         ip 262200                - 00000300080ec280
000003000bc9c888    1 000003000822b040        ip6 262196                - 00000300080ec280
0000030015847d50    1 00000300169d7300        ip6 262182                - 00000300080ec280
000003000bd88af0    1 000003000c435480        ip6 262193                - 00000300080ec280
000003000bc9b538    1 000003000c41d400        zfs     0                - 00000300062b8068
0000030014f06038    1 00000300169d7500         ip 262183                - 00000300080ec280
0000030014f060a8    1 000003001446b600         ip 262207                - 00000300080ec280
00000300143b2a10    1 000003000c41da00       vnet  1004                - 000003000ad87d18
00000300082eb768    1 0000030007095c40        vdc     0                - 00000300062b8a68
0000030008d641c0    1 00000300165fde40        ip6 262192                - 00000300080ec280
00000300143b2b60    1 000003000aadde00       vnet  1002                - 000003000bd83730
> 00000300143b2b28::ldi_handle -i
HANDLE                      VNODE        DRV MINOR           EVENTS            IDENT              DIP MINOR MODID MODULE NAME
00000300143b2b28 000003000abce180       vnet  1003                - 000003000bd83730                -     -    78 udp

::ldi_ident
ldi(layered driver identifier) 識別子を表示します。
> ::ldi_ident
IDENT            REFS              DIP MINOR MODID MODULE NAME
00000300062b8068    6                -     -     1 genunix
00000300080ec280   13                -     -    72 ip
000003000aa57ea0    1 0000030002bfa878     -   181 iscsi
000003000ad861e8    1 000003000628b6a0     -   169 bmc
000003000bd83730    2                -     -    78 udp
0000030008d194a8    1                -     1    86 conskbd
00000300062b8a68    2                -     -    14 zfs
000003000ad87d18    1                -     -    79 udp6
000003001c63c0a0    1                -     -   211 iptun
00000300062b8a18    1                -     -    20 rpcmod
0000030008d19458    1                -     -    89 wc
000003001c6a3a50    1                -     -   218 sol_ucma
0000030008d19548    1                -     -    90 tem
000003000a032d98    1                -     -   157 rds

[ major-num ] ::major2name [major-num]
指定されたメジャー番号に該当するドライバ名を表示します。メジャー番号は、dcmd の前に式の形で、またはコマンド行引数として指定できます。
> 0x1c::major2name
sd

major-num ::major2snode
指定されたメジャー番号に関連する snode を表示します。
> 0xe4::major2snode  |::print struct snode s_vnode |::vnode2path
/devices/pseudo/zfs@0:zfs

address ::minornodes
指定された devinfo ノードの minor node を表示します。
> ::devbindings -q vdc
30002bff0c8      SUNW,sun4v-disk, instance #0 (driver name: vdc)
30002bfee00      SUNW,sun4v-disk, instance #1 (driver name: vdc)
30002bfeb38      SUNW,sun4v-disk, instance #2 (driver name: vdc)
> 30002bff0c8::minornodes
            ADDR              DEV SPEC TYPE        NAME       NODETYPE       
     300073c7a68       4500000000 b    DDI_MINOR   a          ddi_block
     300073c7a18       4500000000 c    DDI_MINOR   a,raw      ddi_block
     300073c79c8       4500000001 b    DDI_MINOR   b          ddi_block
     300073c7978       4500000001 c    DDI_MINOR   b,raw      ddi_block
     300073c7928       4500000002 b    DDI_MINOR   c          ddi_block
     300073c78d8       4500000002 c    DDI_MINOR   c,raw      ddi_block
     300073c7888       4500000003 b    DDI_MINOR   d          ddi_block
     300073c7838       4500000003 c    DDI_MINOR   d,raw      ddi_block
     300073c77e8       4500000004 b    DDI_MINOR   e          ddi_block
     300073c7798       4500000004 c    DDI_MINOR   e,raw      ddi_block
     300073c7748       4500000005 b    DDI_MINOR   f          ddi_block
     300073c76f8       4500000005 c    DDI_MINOR   f,raw      ddi_block
     300073c76a8       4500000006 b    DDI_MINOR   g          ddi_block
     300073c7658       4500000006 c    DDI_MINOR   g,raw      ddi_block
     300073c7608       4500000007 b    DDI_MINOR   h          ddi_block
     300073c75b8       4500000007 c    DDI_MINOR   h,raw      ddi_block

[ address ] ::msgbuf [-v]
直近の console messages を表示します。
> ::msgbuf
MESSAGE                                                                
        UltraDMA mode 5 selected
Disk0:  <Vendor 'Gen-ATA ' Product 'QEMU HARDDISK   '>
cmdk0 at ata0 target 0 lun 0
cmdk0 is /pci@0,0/pci-ide@1,1/ide@0/cmdk@0,0
imported version 0 pool rpool using 33
root on rpool/ROOT/solaris fstype zfs
acpinex0 at root
acpinex: sb@0, acpinex1
pseudo-device: dld0
dld0 is /pseudo/dld@0
pcplusmp: i8042 (i8042) instance 0 irq 0x1 vector 0x41 ioapic 0x4 intin 0x1 is bound to cpu 3
pcplusmp: i8042 (i8042) instance 0 irq 0xc vector 0x42 ioapic 0x4 intin 0xc is bound to cpu 0
gfxp_fb: 1024x768 - 16 bit framebuffer mapped at ffffff00c93b1000
gfxp_fb: shadow framebuffer mapped at ffffff00cb6b1000
gfxp_fb: using 12x22 fonts
pcplusmp: pciclass,0c0300 (uhci) instance 0 irq 0x7 vector 0x81 ioapic 0x4 intin 0xb is bound to cpu 1
WARNING: /pci@0,0/pci1af4,1100@1,2 (uhci0): No SOF interrupts have been received, this USB UHCI host controller is unusable
8042 device:  keyboard@0, kb8042 # 0
kb80420 is /pci@0,0/isa@1/i8042@1,60/keyboard@0
8042 device:  mouse@1, mouse8042 # 0
    :
    :

[ address ] ::modctl2devinfo
指定された modctl アドレスに対応するすべてのデバイスノードを出力します。
> ffffff00c6254510::modctl2devinfo
ffffff00c630f300
> ffffff00c630f300::devinfo -q
ffffff00c630f300 clone, instance #0 (driver name: clone)

::name2major driver-name
指定されたデバイスドライバ名を使用して、そのメジャー番号を表示します。
> ::name2major sd
0x1c

[ devinfo ] ::prtconf [-cpv]
devinfo で指定されたデバイスノードからカーネルデバイスツリーを表示します。devinfo を指定しないと、デフォルトでルートからデバイスツリーが表示されます。
-c 指定されたデバイスノードの子だけが表示されます。
-p 指定されたデバイスノードの祖先だけが表示されます。
-v 各ノードに関連するプロパティーが表示されます。
> ffffff00c6314970::prtconf
DEVINFO          NAME
ffffff00c50d1c28 i86pc (driver name: rootnex)
    ffffff00c50c6018 pseudo, instance #0 (driver name: pseudo)
        ffffff00c6314970 cn, instance #0 (driver name: cn)

[ address ] ::softstate [ instance-number ]
指定された softstate 状態ポインタ (ddi_soft_state_init(9F) のマニュアルページを参照) とデバイスインスタンス番号を使用して、そのインスタンスのソフトの状態を表示します。

walker

binding_hash
指定されたカーネルバインディングハッシュテーブルエントリの配列 (構造体 bind **) のアドレスを使用して、ハッシュテーブル内のすべてのエントリを調べて、各構造体 bind のアドレスを戻します。

dev_info_node_cache
dev_info_node_cache について反復適用します。
> ::walk dev_info_node_cache |::print struct dev_info devi_node_name
devi_node_name = 0x3000a444480 "sppp"
devi_node_name = 0x3000a444490 "bpf"
devi_node_name = 0x3000a4444a0 "fssnap"
devi_node_name = 0x3000a4444b0 "pm"
devi_node_name = 0x3000a4444c0 "pool"
devi_node_name = 0x300062a5b50 "ntwdt"
devi_node_name = 0x300062a5b60 "mdesc"
devi_node_name = 0x300062a5b70 "bmc"
    :
    :

devinfo
最初に、指定された dev_info 構造体の親に対して反復適用し、それらを最下位から世代順に戻します。次に、指定された devinfo 自身を戻します。その次に、指定された dev_info 構造体の子に対して、世代順に最上位から最下位まで反復適用します。
> ::walk devinfo |::print struct dev_info devi_node_name
devi_node_name = 0x30002508fe0 "SUNW,Sun-Fire-T200"
devi_node_name = 0x30005c9f880 "scsi_vhci"
devi_node_name = 0x300024f23a0 "packages"
devi_node_name = 0x30002508f80 "SUNW,builtin-drivers"
devi_node_name = 0x300024f2360 "deblocker"
devi_node_name = 0x300024f2350 "disk-label"
devi_node_name = 0x30002508f20 "terminal-emulator"
    :
    :

devinfo_children
最初に、指定された dev_info 構造体を戻し、次に、指定された devinfo の子に対して、世代順に最上位から最下位まで反復適用します。
> 30002bfa020::walk devinfo_children |::devinfo -q
30002bfa020      scsi_vhci, instance #0 (driver name: scsi_vhci)

devinfo_parents
指定された dev_info 構造体の親に対して、世代順に最上位から最下位まで反復適用し、次に、指定された devinfo を戻します。
> 30002bfa020::walk devinfo_parents |::devinfo -q
30002c03bd8      SUNW,Sun-Fire-T200 (driver name: rootnex)
30002bfa020      scsi_vhci, instance #0 (driver name: scsi_vhci)

devi_next
指定された dev_info 構造体の兄弟に対して反復適用します。
> 30002bfa020::walk devi_next |::devinfo -q
30002bfa020      scsi_vhci, instance #0 (driver name: scsi_vhci)

devnames
devnames 配列のエントリに対して反復適用します。
> ::walk devnames |::print struct devnames dn_name
dn_name = 0x300025054c0 "cn"
dn_name = 0x30002505100 "pcata"
dn_name = 0x30002505518 "fm"
dn_name = 0x30002505520 "ib"
dn_name = 0x30002504fc8 "srn"
dn_name = 0x300025053e8 "dcpc"
dn_name = 0x300025055e0 "dtrace"
dn_name = 0x30002519c28 "fasttrap"
dn_name = 0x30002504f90 "fbt"
    :
    :

softstate
指定された softstate ポインタ (ddi_soft_state_init(9F) を参照) を使用して、ドライバ状態構造体への NULL 以外のポインタをすべて表示します。

softstate_all
指定された softstate ポインタ (ddi_soft_state_init(9F) を参照) を使用して、ドライバ状態構造体へのポインタをすべて表示します。未使用のインスタンスのポインタが NULL になることに注意してください。

0 件のコメント:

コメントを投稿