システムは、ドライバのバイナリモジュールを、自動構成のためのカーネルモジュールディレクトリの drv サブディレクトリからロードします。モジュールディレクトリへのドライバのコピーを参照してください。
モジュールが、解決されたすべてのシンボルとともにメモリーに読み込まれたあと、システムはそのモジュールの _init(9E) エントリポイントを呼び出します。_init() 関数は、そのモジュールを実際にロードする mod_install(9F) を呼び出します。
_init() が正常に完了すると、そのドライバはシステムに正常に登録されています。この時点では、そのドライバはどのデバイスもアクティブに管理していません。デバイス管理は、デバイス構成の一部として実行されます。
システムは、システムメモリーを節約するため、またはユーザーからの明示的な要求によってドライバのバイナリモジュールをアンロードします。ドライバのコードとデータをメモリーから削除する前に、そのドライバの _fini(9E) エントリポイントが呼び出されます。ドライバがアンロードされるのは、_fini() が成功を返した場合だけです。
次の図は、デバイスドライバの構造的な概要を示しています。陰付きの領域は、ドライバのデータ構造体とエントリポイントを強調しています。陰付きの領域の上半分には、ドライバのロードとアンロードをサポートするデータ構造体とエントリポイントが含まれています。下半分は、ドライバの構成に関連しています。
図 8 モジュールのロードと自動構成のエントリポイント