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

印刷ビューの終了

更新: 2014 年 9 月
 
 

デバイスツリーコンポーネント

システムでは、ブート時にマシンに接続されているデバイスに関する情報を含むツリー構造が構築されます。デバイスツリーは、システムの通常運用中に、動的な再構成操作によって変更することもできます。ツリーは、プラットフォームを表すルートデバイスノードで始まります。

ルートノードの下に、デバイスツリーのブランチがあります。ブランチは、1 つ以上のバスネクサスデバイスと、終端リーフデバイスから構成されます。

バスネクサスデバイスは、デバイスツリー内の従属デバイスにバスマッピングと変換サービスを提供します。PCI - PCI ブリッジ、PCMCIA アダプタ、および SCSI HBA はすべてネクサスデバイスの例です。ネクサスデバイス用ドライバの記述についての説明は、SCSI HBA ドライバの開発に限定されています (Chapter 18, SCSI Host Bus Adapter Driversを参照)。

リーフデバイスは一般に、ディスク、テープ、ネットワークアダプタ、フレームバッファーなどの周辺デバイスです。リーフデバイスのドライバは従来の文字型ドライバインタフェースとブロック型ドライバインタフェースをエクスポートします。これらのインタフェースによって、ユーザープロセスはストレージや通信デバイスに対してデータの読み書きを行うことができます。

システムは次の手順を通してツリーを構築します。

  1. CPU が初期化され、ファームウェアが検索されます。

  2. 主要なファームウェア (OpenBoot、BIOS (Basic Input/Output System)、または Bootconf) が初期化され、既知または自己識別型のハードウェアを使用してデバイスツリーが作成されます。

  3. 主要なファームウェアは、デバイスで互換性のあるファームウェアを見つけると、そのデバイスを初期化し、デバイスのプロパティーを取得します。

  4. ファームウェアはオペレーティングシステムを見つけてブートします。

  5. ツリーのルートノードでカーネルが起動され、一致するデバイスドライバを検索して、そのドライバをデバイスにバインドします。

  6. ネクサスデバイスの場合、カーネルはファームウェアによって検出されていない子デバイスを探します。カーネルは、ネクサスノードの下のツリーにすべての子デバイスを追加します。

  7. カーネルは、デバイスノードを作成する必要がなくなるまで手順 5 からのプロセスを繰り返します。

各ドライバはデバイス操作構造体 dev_ops (9S) をエクスポートして、デバイスドライバが実行できる操作を定義します。デバイス操作構造体には、attach (9E)detach (9E)getinfo (9E) などの一般的な操作への関数ポインタが格納されています。構造体には、バスネクサスドライバに固有の操作セットへのポインタと、リーフドライバに固有の操作セットへのポインタも格納されます。

ツリー構造では、ノード間に親子関係が作成されます。この親子関係がアーキテクチャー面での独立の鍵となっています。リーフドライバまたはバスネクサスドライバが、アーキテクチャーの点で性質上依存関係があるサービスを要求すると、そのドライバは自身の親に、サービスを提供するよう要求します。このアプローチによって、マシンやプロセッサのアーキテクチャーにかかわらずドライバが機能することができます。次の図に一般的なデバイスツリーを示します。

図 2-2  デバイスツリーの例

image:図は一般的なデバイスツリーで、リーフとノードを示しています。

ネクサスノードは 1 つ以上の子を持つことができます。リーフノードは個々のデバイスを表します。