JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
デバイスドライバの記述     Oracle Solaris 11.1 Information Library (日本語)
このドキュメントの評価
search filter icon
search icon

ドキュメントの情報

はじめに

パート I Oracle Solaris プラットフォーム用デバイスドライバの設計

1.  Oracle Solaris デバイスドライバの概要

2.  Oracle Solaris カーネルとデバイスツリー

3.  マルチスレッド

4.  プロパティー

5.  イベントの管理とタスクのキュー

6.  ドライバの自動構成

7.  デバイスアクセス: プログラム式入出力

8.  割り込みハンドラ

9.  ダイレクトメモリーアクセス (DMA)

10.  デバイスメモリーおよびカーネルメモリーのマッピング

11.  デバイスコンテキスト管理

12.  電源管理

13.  Oracle Solaris ドライバの強化

14.  階層化ドライバインタフェース (LDI)

パート II 特定の種類のデバイスドライバの設計

15.  文字デバイスのドライバ

文字ドライバの構造の概要

文字デバイスの自動構成

デバイスアクセス (文字ドライバ)

open() エントリポイント (文字ドライバ)

close() エントリポイント (文字ドライバ)

入出力要求の処理

ユーザーアドレス

ベクトル化された入出力

同期入出力と非同期入出力の違い

データ転送方法

プログラム式入出力転送

DMA 転送 (同期)

DMA 転送 (非同期)

minphys() エントリポイント

strategy() エントリポイント

デバイスメモリーのマッピング

ファイル記述子に対する入出力の多重化

その他の入出力制御

ioctl() エントリポイント (文字ドライバ)

64 ビットに対応したデバイスドライバに対する入出力制御のサポート

copyout() のオーバーフローの処理

32 ビットと 64 ビットのデータ構造体マクロ

構造体マクロの動作のしくみ

構造体マクロを使用する場合

構造体ハンドルの宣言と初期化

構造体ハンドルに対する操作

その他の操作

16.  ブロックデバイスのドライバ

17.  SCSI ターゲットドライバ

18.  SCSI ホストバスアダプタドライバ

19.  ネットワークデバイスのドライバ

20.  USB ドライバ

21.  SR-IOV ドライバ

パート III デバイスドライバの構築

22.  ドライバのコンパイル、ロード、パッケージ化、およびテスト

23.  デバイスドライバのデバッグ、テスト、およびチューニング

24.  推奨されるコーティング方法

パート IV 付録

A.  ハードウェアの概要

B.  Oracle Solaris DDI/DKI サービスのサマリー

C.  64 ビットデバイスドライバの準備

D.  コンソールフレームバッファードライバ

E.  pci.conf ファイル

索引

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

文字デバイスの自動構成

attach(9E) ルーチンは、次に示すような、すべてのデバイスに必要な一般的な初期化タスクを実行します。

これらのタスクのコード例については、attach() エントリポイント」を参照してください。

文字デバイスドライバは、タイプ S_IFCHR のマイナーノードを作成します。S_IFCHR のマイナーノードを指定すると、このノードを表す文字型特殊ファイルが最終的に /devices 階層に表示されます。

次の例は、文字ドライバの標準的な attach(9E) ルーチンを示しています。デバイスに関連付けられているプロパティーは一般に、attach() ルーチンで宣言されます。この例では、定義済みの Size プロパティーを使用しています。Size は、ブロックデバイスでのパーティションのサイズを取得するための Nblocks プロパティーに相当します。たとえば、ディスク装置で文字入出力を実行している場合は、Size を使用してパーティションのサイズを取得できます。Size は 64 ビットのプロパティーであるため、64 ビットのプロパティーインタフェースを使用する必要があります。この場合は、ddi_prop_update_int64(9F)を使用します。プロパティーの詳細については、「デバイスプロパティー」を参照してください。

例 15-1 文字ドライバの attach() ルーチン

static int
xxattach(dev_info_t *dip, ddi_attach_cmd_t cmd)
{
  int instance = ddi_get_instance(dip);
  switch (cmd) {
  case DDI_ATTACH:
      /*
       * Allocate a state structure and initialize it.
       * Map the device's registers.
       * Add the device driver's interrupt handler(s).
       * Initialize any mutexes and condition variables.
       * Create power manageable components.
       *
       * Create the device's minor node. Note that the node_type
       * argument is set to DDI_NT_TAPE.
       */
       if (ddi_create_minor_node(dip, minor_name, S_IFCHR,
           instance, DDI_NT_TAPE, 0) == DDI_FAILURE)
{
           /* Free resources allocated so far. */
           /* Remove any previously allocated minor nodes. */
           ddi_remove_minor_node(dip, NULL);
           return (DDI_FAILURE);
       }
      /*
       * Create driver properties like "Size." Use "Size"
       * instead of "size" to ensure the property works
       * for large bytecounts.
       */
       xsp->Size = size_of_device_in_bytes;
       maj_number = ddi_driver_major(dip);
       if (ddi_prop_update_int64(makedevice(maj_number, instance),
           dip, "Size", xsp->Size) != DDI_PROP_SUCCESS) {
           cmn_err(CE_CONT, "%s: cannot create Size property\n",
               ddi_get_name(dip));
               /* Free resources allocated so far. */
           return (DDI_FAILURE);
       }
      /* ... */
      return (DDI_SUCCESS);
case DDI_RESUME:
      /* See the "Power Management" chapter in this book. */
default:
      return (DDI_FAILURE);
  }
}