Oracle® Solaris 11.2 デバイスドライバの記述

印刷ビューの終了

更新: 2014 年 9 月
 
 

dev_ops 構造体

static struct dev_ops xx_dev_ops = {
    DEVO_REV,                  /* devo_rev */
    0,                         /* devo_refcnt  */
    xxgetinfo,                 /* devo_getinfo: getinfo(9E) */
    nulldev,                   /* devo_identify: identify(9E) */
    xxprobe,                   /* devo_probe: probe(9E) */
    xxattach,                  /* devo_attach: attach(9E) */
    xxdetach,                  /* devo_detach: detach(9E) */
    nodev,                     /* devo_reset: see devo_quiesce */
    &xx_cb_ops,                /* devo_cb_ops */
    NULL,                      /* devo_bus_ops */
    &xxpower,                  /* devo_power: power(9E) */
    ddi_quiesce_not_needed,    /* devo_quiesce: quiesce(9E) */
};

dev_ops(9S) 構造体は、カーネルがデバイスドライバの自動構成エントリポイントを見つけることができるようにします。devo_rev フィールドは、構造体のリビジョン番号を識別します。このフィールドは DEVO_REV に設定する必要があります。devo_refcnt フィールドは 0 に初期化する必要があります。次の場合を除き、関数のアドレスフィールドには該当するドライバエントリポイントのアドレスを入力します。

  • devo_identify フィールドを nulldev (9F) に設定します。identify() エントリポイントは廃止されています。

  • probe(9E) ルーチンが必要ない場合は、devo_probe フィールドを nulldev(9F) に設定します。

  • devo_reset フィールドを nodev (9F) に設定します。nodev() 関数は ENXIO を返します。devo_quiesce を参照してください。

  • power() ルーチンが必要ない場合は、devo_power フィールドを NULL に設定します。電源管理機能を提供するデバイスのドライバには、power (9E) エントリポイントが必要です。Chapter 12, Power Managementを参照してください。

  • ドライバに休止を実装する必要がない場合には、devo_quiesce フィールドを ddi_quiesce_not_needed() に設定します。デバイスを管理するドライバは、quiesce(9E) エントリポイントを提供する必要があります。

devo_cb_ops メンバーには、 cb_ops(9S) 構造体のアドレスを含めます。devo_bus_ops フィールドは NULL に設定する必要があります。