カーネルドライバとカーネルモジュールの違いは何ですか?

カーネルドライバとカーネルモジュールの違いは何ですか?

lspci -k3.2.0-29 通常のカーネルを使用して Kubuntu で実行すると、次の内容が表示されます。

01:00.0 VGA compatible controller: NVIDIA Corporation G86 [Quadro NVS 290] (rev a1)
    Subsystem: NVIDIA Corporation Device 0492
    Kernel driver in use: nvidia
    Kernel modules: nvidia_current, nouveau, nvidiafb

nvidiaカーネルドライバとカーネルモジュールがありますnvidia_currentnouveaunvidiafb

では、カーネルドライバとカーネルモジュールの違いが何であるかを知りたいです。

ベストアンサー1

カーネルモジュールは、実行時にカーネルに挿入できるコンパイル済みのコードです。insmodまたはmodprobe

ドライバは、一部のハードウェアデバイスと通信するためにカーネルで実行されるコードの一部です。ハードウェアを「駆動」します。コンピュータのほとんどのハードウェアには関連ドライバがあります。実行中のカーネルのほとんどはドライバコードです。 ²

ドライバはディスク上のカーネルファイルに静的に構築できます。ドライバは、後で動的にロードできるようにカーネルモジュールとして構築することもできます。 (その後、削除することができます。)

標準的な慣行は、ドライバをカーネルに静的に接続するのではなく、可能な限りドライバをカーネルモジュールとして構築することです。これにより、より大きな柔軟性が得られます。ただし、これを行わないには、次の理由があります。

  • 時には、システムの起動を支援するために特定のドライバが必要な場合もあります。これは思ったほど頻繁には起こりません。なぜなら初期化プログラム特徴。

  • 静的に構築されたドライバは、静的にスコープされたシステムで正確に必要なものである可能性があります。組み込みシステム。つまり、どのドライバが常に必要で変更されていないかを正確に知っている場合は、動的カーネルモジュールを使用する必要はありません。

  • カーネルを静的にビルドし、Linuxの動的モジュールロード機能を無効にすると、カーネルコードの実行時の変更を防ぐことができます。これは、柔軟性を犠牲にして追加のセキュリティと信頼性を提供します。

すべてのカーネルモジュールはドライバではありません。たとえば、Linuxカーネルの比較的新機能は次のとおりです。さまざまなプロセススケジューラのロード。別の例は、より複雑なタイプのハードウェアが、下位レベルのハードウェアドライバとユーザ空間との間に複数の共通層を有することが多いことである。USB HIDドライバ、これUSBスタックの特定の要素、基本ハードウェアとは無関係です。


ナレーター:

  1. この広範な説明の1つの例外は、「ドライバ」のないCPUチップです。それ自体。コンピューターには、ドライバーのないハードウェアが含まれている場合があります。

  2. オペレーティングシステムカーネルの残りのコードは、次の一般的なサービスを提供します。メモリ管理産業用コンピュータスケジューリング待つ。これらのサービスは主に次のサービスを提供できます。ユーザーエリア以前にリンクされている例のようなアプリケーション、またはドライバまたは他のカーネル内のインフラストラクチャで使用される内部サービスのいずれかです。

  3. いずれかが/boot開始時に次の人によって開始されました。ブートローダーすでに起動プロセス

おすすめ記事