Linuxのデバイスドライバーはプログラム/プロセスですか、それとも単なるライブラリですか?


23

デバイスドライバーは、それ自体で実行されるプログラムであるか、またはメモリに読み込まれ、プログラムがその関数の1つを呼び出すことができるライブラリー(関数のグループ)のみです(そのため、単独で実行されません)。

そして、それがプログラムである場合、プロセスIDを持っているので、たとえば、他のプロセスを終了できるのと同じ方法でデバイスドライバーを終了できますか?


1
rmmodを使用してドライバーを「アンロード」できますが、使用されていない場合のみです。
pjc50

回答:


35

Linuxでは、多くのデバイスドライバーがカーネルの一部であり、ライブラリやプロセスではありません。これらの使用してデバイスファイル(通常は中との対話プログラム/dev)と、様々なシステム呼び出しなどopenreadwriteioctl...

ただし、例外があります。一部のデバイスドライバーは、カーネルドライバースタブとユーザー空間ライブラリの混合を使用します(たとえば、UIOを使用)。その他は、通常、ビットバンギングインターフェイス(UARTまたはGPIO)の上に、ユーザー空間で完全に実装されます。どちらの場合も、通常はインプロセスであるため、別のプロセスは表示されず、デバイスを使用しているプロセスのみが表示されます。

デバイスドライバーを「終了」するには、それを使用するすべてのプロセスを停止し、そのカーネルモジュール(モジュールとしてビルドされていると仮定)、およびオプションで、使用する必要のないその他のモジュールを削除する必要があります。を使用してシステム上のモジュールをリストし、またはlsmodを使用してそれらをアンロードできます。どちらも、ユーザーがいないことを示す場合にのみ機能します。rmmodmodprobe -rlsmod


2
十分に勇気があり、カーネルがでコンパイルされているCONFIG_MODULE_FORCE_UNLOAD場合rmmod -fは、使用中/削除するように設計されていない/などのモジュールを強制的にアンロードしようとすることができます。また、カーネルを汚染します。
ルスラン

9

まず、ドライバーとは何かを定義する必要があります。デバイス(カメラなど)またはサブシステム(ファイルシステムなど)を制御するプログラムまたはサブルーチンとして定義します。システムプログラムを介して直接実行するか、カーネルサーバーまたはユーザーランドプロセスを介して実行するかは、本質的にこの本質的な意味の問題ではありません。

場合によっては、Linuxは、実際の「ドライバー」がデバイスツリーであるソフトウェアで記述された汎用プロトコルのみを提供します。これは、ハードウェアパラメータと、ドライバを構成する使用するソフトウェアの構成です。

一般的に、ドライバーインターフェイスとプロトコルは、デバイスツリーまたはudevルールで定義された必要に応じてロードされるカーネルモジュールを使用して実装されます。カーネルモジュールは、プロセスまたはライブラリの厳密な意味ではありません。

ライブラリは、特定のプロセスにロードできる静的なコードセットです。最新のオペレーティングシステムは、これらのライブラリを共有メモリにロードします。プロセス自体は、任意の数の共有ライブラリにリンクできます。

プロセスは、システムプログラムやカーネルがシステムメモリやCPU時間などのリソースを割り当てている実行中のプログラムです。カーネルモジュールは、このパターン自体に従う場合とそうでない場合がありますが、Linuxでの事実上のプロセスとはみなされません。

したがって、あなたの質問に答えるために、ドライバーはプロセスである必要はありませんが、プロセスは可能です。コードはライブラリに存在できますが、カーネルモジュールの形式のカーネルであれ、ユーザーランドプロセスであれ、ドライバーはプログラムを介してメモリにロードされます。

ドライバーの全体が実際に何であるかを考えるとき、それはより意味論的な議論になります。ドライバーは常にプログラムであると言えますが、デバイスツリーの場合はそうではないこともあります。実際には、ユーザーランドプロセス、デバイスツリーファイル、udevルール、およびプロセスとモジュールの両方がライブラリを使用するカーネルモジュールである場合もありますドライバーのロジック。


0

Linuxデバイスドライバーは、本質的にカーネルスペースライブラリです。その呼び出しは、主に高レベルのドライバーまたはそれを使用するユーザー空間プロセスによって開始されます。

これにはいくつかの例外があります。

  • カーネルスレッドは、ドライバーでも開始/停止できます。これらは、本質的にユーザー空間部分のないプロセスです。
  • 割り込みハンドラは、ユーザー空間プロセスではなく、ハードウェアによって開始されます。

GNU Hurdのような他のシステムでは、ドライバーは本質的にデーモンであり、プロセスと対話できます。Linuxでは、ドライバーはライブラリーです。ただし、どちらの概念にも長所と短所があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.