Go to main content
Oracle® Solaris 11.3 デバイスドライバの記述

印刷ビューの終了

更新: 2016 年 11 月
 
 

ドライバのロードとアンロード

システムは、ドライバのバイナリモジュールを、自動構成のためのカーネルモジュールディレクトリの drv サブディレクトリからロードします。モジュールディレクトリへのドライバのコピーを参照してください。

モジュールが、解決されたすべてのシンボルとともにメモリーに読み込まれたあと、システムはそのモジュールの _init(9E) エントリポイントを呼び出します。_init() 関数は、そのモジュールを実際にロードする mod_install(9F) を呼び出します。


注 - mod_install() の呼び出し中、ほかのスレッドは、mod_install() が呼び出されるとすぐに attach(9E) を呼び出すことができます。プログラミングの観点からは、mod_install() が呼び出される前に、_init() によるすべての初期化が実行される必要があります。mod_install() が失敗した (つまり、ゼロ以外の値が返された) 場合は、その初期化をバックアウトする必要があります。

_init() が正常に完了すると、そのドライバはシステムに正常に登録されています。この時点では、そのドライバはどのデバイスもアクティブに管理していません。デバイス管理は、デバイス構成の一部として実行されます。

システムは、システムメモリーを節約するため、またはユーザーからの明示的な要求によってドライバのバイナリモジュールをアンロードします。ドライバのコードとデータをメモリーから削除する前に、そのドライバの _fini(9E) エントリポイントが呼び出されます。ドライバがアンロードされるのは、_fini() が成功を返した場合だけです。

次の図は、デバイスドライバの構造的な概要を示しています。陰付きの領域は、ドライバのデータ構造体とエントリポイントを強調しています。陰付きの領域の上半分には、ドライバのロードとアンロードをサポートするデータ構造体とエントリポイントが含まれています。下半分は、ドライバの構成に関連しています。

図 8  モジュールのロードと自動構成のエントリポイント

image:この図は、自動構成とモジュールのロードで使用される構造体とエントリポイントを示しています。