web-dev-qa-db-ja.com

デバイスドライバーとカーネルモジュールの違い

ドライバーは、コンピューターに接続されているデバイスを制御するためにハードウェアと通信できるソフトウェアであることを知っています。一方、カーネルモジュールは、カーネルに挿入してカーネルのパフォーマンスを改善できる小さなコードです。ドライバーがカーネルとどのように連携するのか、デバイスドライバーとカーネルモジュールの主な違いは何ですか?

9
harianja

Weeeeellll .....

カーネルモジュールは非常に具体的なものです。コアカーネルが起動した後、モジュールとして(つまり動的に)ロードされるカーネルの一部。それは何でもかまいません。

ハードウェアを使用するには、次の2つの理由により、ほとんどがカーネルに存在するいくつかのパーツが必要です。

  1. ユーザー空間では実行できない、または非現実的なハードウェア操作を実行できるようにするため、またはプロセススコープの外側で状態を保持できるようにするため。
  2. ユーザースペースで行うのは本当に非効率的だからです

ほとんどのハードウェアを管理するには、カーネル空間の対応物が必要です。これは、カーネルの一部として、または後でオンデマンドでロードされるモジュールとしてコンパイルできます。モジュールでは、それらのすべてをロードすることはできません。

ただし、モジュールはハードウェアのみに関連している必要はありません。 (たとえば)ipv6、ファイアウォールオプションなどの機能を追加するだけのモジュールがあります。

一方、ドライバーは、一般的にハードウェアへの簡単なアクセスを提供するものです。それは通常すべてのハードウェア固有のものを組み込み、一般的なAPIを公開します。そしてジェネリックとは、ジェネリックで十分だが、必ずしもグローバルまたは標準ではないことを意味します。例えば。 ATIグラフィックカードのドライバーは、すべてのATIカードに共通のAPIを公開しますが、他のカードと同じではない場合があります。

ドライバーは、ユーザー空間、カーネル(組み込みまたはモジュール)で作成することも、両端にレッグを持つこともできます。たとえば、今日のグラフィックスカードドライバーには、カーネルとユーザー空間(Xサーバー、DRIなど)の一部があります。

8
V13