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

印刷ビューの終了

更新: 2014 年 9 月
 
 

cb_ops 構造体

static struct cb_ops xx_cb_ops = {
    xxopen,         /* open(9E) */
    xxclose,        /* close(9E) */
    xxstrategy,     /* strategy(9E) */
    xxprint,        /* print(9E) */
    xxdump,         /* dump(9E) */
    xxread,         /* read(9E) */
    xxwrite,        /* write(9E) */
    xxioctl,        /* ioctl(9E) */
    xxdevmap,       /* devmap(9E) */
    nodev,          /* mmap(9E) */
    xxsegmap,       /* segmap(9E) */
    xxchpoll,       /* chpoll(9E) */
    xxprop_op,      /* prop_op(9E) */
    NULL,           /* streamtab(9S) */
    D_MP | D_64BIT, /* cb_flag */
    CB_REV,         /* cb_rev */
    xxaread,        /* aread(9E) */
    xxawrite        /* awrite(9E) */
};

cb_ops (9S) 構造体には、デバイスドライバの文字操作とブロック操作のためのエントリポイントが含まれています。ドライバでサポートされていないエントリポイントはすべて、nodev (9F) に初期化します。たとえば、文字デバイスドライバは、ブロックのみのフィールド (cb_stategy など) をすべて nodev(9F)に設定します。 mmap(9E) エントリポイントは、以前のリリースとの互換性のために保持されています。ドライバは、 devmap(9E) エントリポイントをデバイスメモリーのマッピングのために使用します。devmap (9E) がサポートされている場合は、mmap (9E)nodev (9F) に設定します。

streamtab フィールドは、ドライバが STREAMS ベースかどうかを示します。STREAMS ベースであるのは、Chapter 19, Drivers for Network Devicesで説明されているネットワークデバイスドライバのみです。STREAMS ベースでないドライバではすべて、streamtab フィールドを NULL に設定する必要があります

cb_flag メンバーには、次のフラグが含まれています。

  • D_MP フラグは、このドライバがマルチスレッド化に対して安全であることを示します。Oracle Solaris OS はスレッドセーフなドライバのみをサポートしているため、D_MP を設定する必要があります。

  • D_64BIT フラグを指定すると、ドライバは uio(9S) 構造体の uio_loffset フィールドを使用します。64 ビットオフセットを正しく処理するため、ドライバは cb_flag フィールドに D_64BIT フラグを設定します。

  • D_DEVMAP フラグは、devmap (9E) エントリポイントをサポートしています。 devmap(9E) については、Chapter 10, Mapping Device and Kernel Memoryを参照してください。

cb_rev は cb_ops 構造体のリビジョン番号です。このフィールドは CB_REV に設定する必要があります。