通常、ハードウェア デバイスは、何らかの標準バスを介してメイン コントローラに接続します。例 - PCI、PEX、USB。
バス上に接続された各デバイスには、バス コントローラによって、デバイス #、バス #、関数 # などが割り当てられます。
最新のバス コントローラーは、スキャンを実行する機能をメイン コントローラーに提供するか、デバイスがバスにホット プラグされたときにイベントを送信します。
検出された各デバイスごとに、バス コントローラの標準コマンド (デバイス ID、バス番号によるデバイスの読み取り/書き込みレジスタなど) を使用して、次のような詳細についてデバイスに問い合わせることができます。
- メーカーID
- デバイスID
- クラス (コントローラ / ネットワーク デバイス / ヒューマン インターフェイス / イメージング デバイス / など)
バスの種類ごとに、これらすべての詳細は、接続されているすべてのハードウェア デバイスで同じ方法で利用できる必要があります。これにより、OS は抽象化レイヤーを使用できるようになります。
デバイスが検出および識別されると、OS はすべての特定のバスに登録されたデバイス ドライバーのプローブ関数を呼び出します。プローブ関数は、上記の詳細を使用して、デバイスを処理できるかどうかを判断します。デバイス ドライバーのプローブが成功すると、ドライバーのインスタンスが割り当てられ、HW にアクセスする必要があるアプリケーションで直接使用できるようになります。
例: USB PC CAM は USB ポートに接続します。USB バスコントローラからメイン CPU にイベントが送信されます。CPU は、標準の USB バス コントローラ関数を使用して、製造元とデバイス ID、デバイス クラス、関数などを学習し、すべての USB 登録済みデバイス ドライバ プローブ関数を呼び出します。
適切なデバイス ドライバーがインストール (登録) されている場合、デバイスのインスタンスが正常に作成され、ビデオ アプリケーション (Skype など) は、ドライバー SW によって提供される DLL を介して直接使用できます。
お役に立てれば。