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

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

デバイスドライバは独立して実行されるプログラムですか、それともメモリにロードされ、プログラムがその機能の1つを呼び出すことができる(したがって独立して実行されない)単純なライブラリ(関数セット)ですか?

プログラムの場合はプロセスIDがあるので、他のプロセスと同様にデバイスドライバを終了できますか?

ベストアンサー1

Linuxでは、多くのデバイスドライバはライブラリやプロセスではなくカーネルの一部です。プログラムは、デバイスファイル(通常は)/devとさまざまなシステムコール(たとえばopen、、、、...)を使用してこれらの項目と対話します。readwriteioctl

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

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

おすすめ記事