ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
デバイスドライバの記述 Oracle Solaris 11.1 Information Library (日本語) |
パート I Oracle Solaris プラットフォーム用デバイスドライバの設計
2. Oracle Solaris カーネルとデバイスツリー
22. ドライバのコンパイル、ロード、パッケージ化、およびテスト
23. デバイスドライバのデバッグ、テスト、およびチューニング
システムは、ドライバのバイナリモジュールを、自動構成のためのカーネルモジュールディレクトリの drv サブディレクトリからロードします。「モジュールディレクトリへのドライバのコピー」を参照してください。
モジュールが、解決されたすべてのシンボルとともにメモリーに読み取られたあと、システムはそのモジュールの _init(9E) エントリポイントを呼び出します。_init() 関数は、そのモジュールを実際にロードする mod_install(9F) を呼び出します。
注 - mod_install() の呼び出し中、ほかのスレッドは、mod_install() が呼び出されるとすぐに attach(9E) を呼び出すことができます。プログラミングの観点からは、mod_install() が呼び出される前に、_init() によるすべての初期化が実行される必要があります。mod_install() が失敗した (つまり、ゼロ以外の値が返された) 場合は、その初期化をバックアウトする必要があります。
_init() が正常に完了すると、そのドライバはシステムに正常に登録されています。この時点では、そのドライバはどのデバイスもアクティブに管理していません。デバイス管理は、デバイス構成の一部として実行されます。
システムは、システムメモリーを節約するため、またはユーザーからの明示的な要求によってドライバのバイナリモジュールをアンロードします。ドライバのコードとデータをメモリーから削除する前に、そのドライバの _fini(9E) エントリポイントが呼び出されます。ドライバがアンロードされるのは、_fini() が成功を返した場合だけです。
次の図は、デバイスドライバの構造的な概要を示しています。陰付きの領域は、ドライバのデータ構造体とエントリポイントを強調しています。陰付きの領域の上半分には、ドライバのロードとアンロードをサポートするデータ構造体とエントリポイントが含まれています。下半分は、ドライバの構成に関連しています。