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

ドキュメントの情報

はじめに

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

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

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

3.  マルチスレッド

4.  プロパティー

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

6.  ドライバの自動設定

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

8.  割り込みハンドラ

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

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

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

12.  電源管理

13.  Solaris ドライバの強化

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

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

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

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

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

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

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

20.  USB ドライバ

Solaris 環境での USB

USBA 2.0 フレームワーク

USB クライアントドライバ

クライアントドライバのバインド

USB デバイスがシステムからどのように見えるか

USB デバイスと Solaris デバイスツリー

互換デバイス名

複数のインタフェースを備えたデバイス

デバイスドライバのバインディングのチェック

基本的なデバイスアクセス

クライアントドライバが接続される前

記述子ツリー

デバイスアクセスを取得するためのドライバの登録

デバイス通信

USB エンドポイント

デフォルトパイプ

パイプの状態

パイプのオープン

パイプのクローズ

データ転送

同期および非同期転送とコールバック

要求

パイプのフラッシュ

デバイス状態管理

USB デバイスのホットプラグ

ホットプラグコールバック

電源を入れたまま挿入

電源を入れたまま取り外し

電源を入れたまま再挿入

電源管理

デバイス電源管理

システム電源管理

直列化

ユーティリティー関数

デバイス設定機能

インタフェース番号の取得

デバイス全体の管理

複数の設定を持つデバイス

代替設定の変更または取得

その他のユーティリティー関数

文字列記述子の取得

パイプの非公開データ機能

USB 状態のクリア

デバイス、インタフェース、エンドポイントの各状態の取得

デバイスのバスアドレスの取得

サンプル USB デバイスドライバ

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

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

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

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

パート IV 付録

A.  ハードウェアの概要

B.  Solaris DDI/DKI サービスの概要

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

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

索引

ユーティリティー関数

この節では、一般的な用途の関数をいくつか説明します。

デバイス設定機能

この節では、デバイス設定に関係する関数について説明します。

インタフェース番号の取得

マルチインタフェースデバイスを使用していて、usb_mid(7D) ドライバによって呼び出し元ドライバから使用可能なインタフェースが 1 つだけに限定されている場合、呼び出し元ドライバがバインドされているインタフェースの番号を知らなければならない可能性があります。usb_get_if_number(9F) 関数を使用して次のいずれかのタスクを行います。

デバイス全体の管理

ある複合デバイス全体を管理するドライバは、ベンダー ID、製品 ID、およびリビジョン ID を含む互換名を使用することで、そのデバイス全体にバインドできます。複合デバイス全体にバインドされたドライバは、ネクサスドライバと同様に、そのデバイスのすべてのインタフェースを管理する必要があります。一般に、複合デバイス全体にドライバをバインドするべきではありません。代わりに、汎用マルチインタフェースドライバ usb_mid(7D) を使用してください。

ドライバがあるデバイス全体を所有しているかどうかを判定するには、usb_owns_device(9F) 関数を使用します。デバイスは複合デバイスであってもかまいません。ドライバがデバイス全体を所有している場合、usb_owns_device(9F) 関数から TRUE が返されます。

複数の設定を持つデバイス

USB デバイスは、ある時点でホストから使用可能な設定を 1 つだけに限定します。ほとんどのデバイスで、単一の設定しかサポートされていません。ただし、いくつかの USB デバイスでは複数の設定がサポートされています。

複数の設定を持つデバイスは必ず、使用可能なドライバが存在する最初の設定に配置されます。一致を検索するとき、デバイス設定が番号順に検討されます。一致するドライバが見つからなかった場合、デバイスは最初の設定に設定されます。その場合、usb_mid ドライバがデバイスを管理し、デバイスをいくつかのインタフェースノードに分割します。デバイスの現在の設定を返すには、usb_get_cfg(9F) 関数を使用します。

次の 2 つの方法のいずれかを使用すると、別の設定を要求できます。これら 2 つの方法のいずれかを使用してデバイス設定を変更すると、USBA モジュールとデバイスの同期が確実に維持されます。


注意

注意 - SET_CONFIGURATION USB 要求を手動で行うことでデバイス設定を変更しないでください。SET_CONFIGURATION 要求による設定の変更はサポートされていません。


代替設定の変更または取得

クライアントドライバから usb_set_alt_if(9F) 関数を呼び出すと、現在選択されているインタフェースの選択済みの代替設定を変更できます。明示的に開かれたパイプを必ずすべて閉じてください。usb_set_alt_if(9F) 関数は、代替設定を切り替える際に、デフォルトパイプのみが開かれていることを確認します。usb_set_alt_if(9F) を呼び出す前に、デバイスの準備が整っていることを確認してください。

代替設定を変更すると、ドライバから使用可能なエンドポイント、クラス固有記述子、およびベンダー固有記述子に影響が及ぶ可能性があります。エンドポイントや記述子の詳細については、「記述子ツリー」を参照してください。

現在の代替設定の番号を取得するには、usb_get_alt_if(9F) 関数を呼び出します。


注 - 新しい代替設定、新しい構成、または新しいインタフェースを要求する際には、デバイスへのデフォルトパイプ以外のすべてのパイプを閉じる必要があります。これは、代替設定、構成、またはインタフェースを変更すると、デバイスの動作モードが変わるからです。また、代替設定、構成、またはインタフェースを変更すると、システムでのデバイスの表現も変わります。


その他のユーティリティー関数

この節では、USB デバイスドライバで役立つその他の関数について説明します。

文字列記述子の取得

インデックスを指定して文字列記述子を取得するには、usb_get_string_descr(9F) 関数を呼び出します。一部の構成、インタフェース、またはデバイス記述子には、文字列の ID が関連付けられています。そのような記述子には、ゼロ以外の値を含む文字列インデックスフィールドが含まれています。文字列インデックスフィールドの値を usb_get_string_descr(9F) に渡すと、対応する文字列を取得できます。

パイプの非公開データ機能

各パイプは、クライアントドライバ専用に確保された領域のポインタを 1 つずつ備えています。値をインストールするには、usb_pipe_set_private(9F) 関数を使用します。値を取得するには、usb_pipe_get_private(9F) 関数を使用します。この機能がコールバックで役に立つのは、パイプが独自のクライアント定義状態を特定処理の対象としてコールバックに渡す必要がある場合です。

USB 状態のクリア

次のタスクを行うには、usb_clr_feature(9F) 関数を使用します。

デバイス、インタフェース、エンドポイントの各状態の取得

USB GET_STATUS 要求を発行してデバイス、インタフェース、またはエンドポイントの状態を取得するには、usb_get_status(9F) 関数を使用します。

デバイスのバスアドレスの取得

デバイスの USB バスアドレスをデバッグ目的で取得するには、usb_get_addr(9F) 関数を使用します。このアドレスは特定の USB ポートに対応します。