ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
デバイスドライバの記述 Oracle Solaris 10 8/11 Information Library (日本語) |
ここでは、次のカテゴリのエントリポイントの一覧を示します。
モジュールのロードに必要な関数や必須の自動設定エントリポイントなど、一部の処理はどのタイプのドライバでも実行できます。ここでは、すべてのドライバに共通したエントリポイントの種類について説明します。共通のエントリポイントの一覧は、「共通のエントリポイントのまとめ」に、マニュアルページへのリンクとその他の関連情報とともに記載してあります。
文字デバイスとブロックデバイス用のドライバは、cb_ops(9S) 構造体をエクスポートします。この構造体では、ブロックデバイスアクセスと文字デバイスアクセス用のドライバエントリポイントを定義します。どちらのタイプのドライバも、open(9E) および close(9E) エントリポイントをサポートする必要があります。ブロックドライバは strategy(9E) をサポートする必要がありますが、文字ドライバはデバイスのタイプに適していれば、read(9E)、write(9E)、ioctl(9E)、mmap(9E)、または devmap(9E) エントリポイントのどのような組み合わせの実装も選択できます。さらに、文字ドライバは chpoll(9E) を通じてポーリングインタフェースをサポートすることもできます。非同期入出力は、ブロックドライバと、ブロックファイルシステムおよび文字ファイルシステムの両方を使用できるドライバで、aread(9E) および awrite(9E) を通じてサポートされます。
すべてのドライバは、ドライバモジュールのロード、アンロード、および関連情報の報告を行うためにロード可能なモジュールのエントリポイント _init(9E)、_fini(9E)、および _info(9E) を実装する必要があります。
ドライバは、_init(9E) でグローバル資源の割り当てと初期化を行います。ドライバは、_fini(9E) でその資源を解放します。
注 - Solaris OS では、ロード可能なモジュールルーチンだけを、ドライバオブジェクトモジュールの外から表示できる必要があります。その他のルーチンにはストレージクラス static を指定できます。
ドライバは、デバイスの自動設定のために attach(9E)、detach(9E)、および getinfo(9E) エントリポイントを実装する必要があります。また、SCSI ターゲットデバイスなど、デバイスが起動中に自らを識別できない場合は、任意指定のエントリポイント probe(9E) を実装できます。これらのルーチンの詳細は、第 6 章ドライバの自動設定を参照してください。
Solaris プラットフォームには、カーネルレベルの統計情報 (kstats とも呼ばれる) を保持およびエクスポートするための豊富なインタフェースセットが用意されています。ドライバは、これらのインタフェースを自由に使用して、ドライバの内部状態を監視するために、ユーザーアプリケーションで使用できるドライバとデバイスの統計情報をエクスポートします。カーネル統計情報を処理するために 2 つのエントリポイントが提供されています。
ks_snapshot(9E) は、特定の時間に kstats を取り込みます。
ks_update(9E) は、kstats データを自由に更新するために使用できます。ks_update() は、デバイスがカーネルデータを追跡するように設定されているが、そのデータの抽出に時間がかかる場合に役立ちます。
詳細は、kstat_create(9F) と kstat(9S) のマニュアルページを参照してください。「カーネル統計」も参照してください。
電源管理機能を備えたハードウェアデバイスのドライバは、任意指定のエントリポイント power(9E) をサポートできます。このエントリポイントの詳細は、第 12 章電源管理を参照してください。
次の表に、すべてのタイプのドライバで使用できるエントリポイントの一覧を示します。
表 1-1 すべてのドライバタイプ用のエントリポイント
|
ファイルシステムをサポートするデバイスは、ブロックデバイスと呼ばれます。このデバイス用に作成されたドライバは、ブロックデバイスドライバと呼ばれます。ブロックデバイスドライバは、buf(9S) 構造体の形でファイルシステム要求を受け取り、指定されたブロックを転送するために入出力操作をディスクに発行します。ファイルシステムへのメインインタフェースは、strategy(9E) ルーチンです。詳細は、第 16 章ブロックデバイスのドライバを参照してください。
ブロックデバイスドライバは、文字ドライバインタフェースを提供することもできます。これにより、ユーティリティープログラムはファイルシステムをバイパスして、デバイスに直接アクセスできます。このデバイスアクセスは一般に、ブロックデバイスへの raw インタフェースと呼ばれます。
次の表に、ブロックデバイスドライバで使用できる追加のエントリポイントの一覧を示します。「すべてのドライバに共通のエントリポイント」も参照してください。
表 1-2 ブロックドライバ用の追加のエントリポイント
|
文字デバイスドライバは通常、バイトストリームで入出力を実行します。文字ドライバを使用するデバイスの例には、テープドライブやシリアルポートがあります。文字デバイスドライバは、入出力制御 (ioctl) コマンド、メモリーマッピング、デバイスポーリングなど、ブロックドライバには存在しない追加のインタフェースも提供できます。詳細は、第 15 章文字デバイスのドライバを参照してください。
デバイスドライバの主なタスクは入出力の実行であり、多くの文字デバイスドライバではバイトストリームまたは文字入出力と呼ばれる処理が行われます。ドライバは、特定のデバイスアドレスを使わずにデータをデバイスに転送したり、デバイスからデータを転送したりします。このような転送は、ファイルシステム要求の一部がデバイス上の特定の位置を識別するブロックデバイスドライバとは大きく異なります。
read(9E) および write(9E) エントリポイントは、標準的な文字ドライバのバイトストリーム入出力を処理します。詳細は、「入出力要求の処理」を参照してください。
次の表に、文字デバイスドライバで使用できる追加のエントリポイントの一覧を示します。その他のエントリポイントについては、「すべてのドライバに共通のエントリポイント」を参照してください。
表 1-3 文字ドライバ用の追加のエントリポイント
|
STREAMS は、文字ドライバを作成するための別のプログラミングモデルです。端末やネットワークデバイスなど、データを非同期に受信するデバイスは、STREAMS の実装に適しています。STREAMS デバイスドライバは、ロードと自動設定 (第 6 章ドライバの自動設定を参照) をサポートする必要があります。STREAMS ドライバの作成方法については、『STREAMS Programming Guide 』を参照してください。
次の表に、STREAMS デバイスドライバで使用できる追加のエントリポイントの一覧を示します。その他のエントリポイントについては、「すべてのドライバに共通のエントリポイント」および「文字デバイスドライバ用のエントリポイント」を参照してください。
表 1-4 STREAMS ドライバ用のエントリポイント
|
フレームバッファーなどの一部のデバイスでは、アプリケーションプログラムからデバイスメモリーに直接アクセスできる方がバイトストリーム入出力よりも効率的です。アプリケーションは、mmap(2) システムコールを使用するとデバイスメモリーをそのアドレス空間にマップできます。メモリーマッピングをサポートするために、デバイスドライバは segmap(9E) と devmap(9E) のエントリポイントを実装します。devmap(9E) については、第 10 章デバイスメモリーおよびカーネルメモリーのマッピングを参照してください。segmap(9E) については、第 15 章文字デバイスのドライバを参照してください。
devmap(9E) エントリポイントを定義するドライバは通常、read(9E) と write(9E) のエントリポイントを定義しません。これは、アプリケーションプログラムが、mmap(2) の呼び出し後にデバイスに対して直接入出力を実行するからです。
次の表に、devmap フレームワークを使ってメモリーマッピングを実行する文字デバイスドライバで使用できる追加のエントリポイントを示します。その他のエントリポイントについては、「すべてのドライバに共通のエントリポイント」および「文字デバイスドライバ用のエントリポイント」を参照してください。
表 1-5 メモリーマッピングに devmap を使用する文字ドライバ用のエントリポイント
|
GLDv3 (Generic LAN Driver version 3) フレームワークを使用するネットワークデバイスドライバ用のエントリポイントの一覧については、表 19-1 を参照してください。詳細は、第 19 章ネットワークデバイスのドライバの 「GLDv3 ネットワークデバイスドライバフレームワーク」および 「GLDv3 の MAC 登録関数」を参照してください。
次の表に、SCSI HBA デバイスドライバで使用できる追加のエントリポイントを示します。SCSI HBA トランスポート構造体については、scsi_hba_tran(9S) を参照してください。その他のエントリポイントについては、「すべてのドライバに共通のエントリポイント」および「文字デバイスドライバ用のエントリポイント」を参照してください。
表 1-6 SCSI HBA ドライバ用の追加のエントリポイント
|
次の表に、PC カードドライバで使用できる追加のエントリポイントの一覧を示します。その他のエントリポイントについては、「すべてのドライバに共通のエントリポイント」および「文字デバイスドライバ用のエントリポイント」を参照してください。
表 1-7 PC カードドライバ専用のエントリポイント
|