USBドライブを接続するとどうなりますか?


21

カーネルスペースからユーザースペースへのUSBイベントの流れはどのようなものですか?USBドライブを接続すると、デスクトップにポップアップが表示されます。新しいUSBドライブを検出してから、そのポップアップを表示するまでの一連のイベントを教えてください。

回答:


6

これはudev、最新のLinuxシステムで渡されます。udevシステムで起動デーモンがで検索します/etc/udev/rules.d/lib/udev/rules.d、カーネルイベントのマッチングルールを実行します。USBドライブを挿入すると、イベントがトリガーさudevれ、一致するルールが検索されて実行されます。

ルール自体がシステムの動作を決定します。近年、udevHALと通信し、DBUS経由でアプリケーションに警告します。現在、このアプローチは時代遅れであり、統一されたudevソリューションを支持しています。これは、直接またはdbus-sendを介したudevd通信を伴うと思われますdbus

あなたはの活動を監視することができますudev経由しますudevadm monitor


2

私はまだこれに完全に自信がないので、一粒の塩とより多くの研究でそれを取ります。

カーネルホットプラグサブシステムから始まります。デバイスがセットアップされた後、ホットプラグイベントを処理するためにセットアップされたユーザースペースプログラム(で設定された場合)を呼び出すかecho hotplug_handler > /proc/sys/kernel/hotplug、kobject_uevent netlinkソケットを介してデータパケットを送信します。カーネルがhotplugハンドラーを起動すると、いくつかの環境変数が設定されます。カーネルがデータパケットを送信するとき、キー=値のペアが含まれます。必要に応じて、環境をログに記録するスクリプトをセットアップし、ハンドラーとしてセットアップすることができます(もちろん、運用システムではなく、テストセットアップです)。

通常、udevはハンドラーとしてセットアップされ、イベントの処理方法に関するいくつかのルールがセットアップされます。そこから、他のことを行う他のプログラムを起動できます(dbusメッセージの発行など)。これらのudevルールは、関心のある特定の分布に大きく依存しています。

このスレッドには、誰かがドキュメントを作成しようとする多くの情報があります。最初のメッセージは正確ではないことに注意してください。読み続けます。


2
むかしむかし、これは正確でしたが、今では長い間そうではありません。現代でudevは、netlinkソケットでueventをリッスンします。(古い方法には、シリアル化/同時実行性の問題がありました。)
一時的な

私はLinuxのこの部分(udevhotplug)が初めてなので、ここで説明したすべての行について考えたいと思います。カーネルホットプラグサブシステムの起動について詳しく説明してください。
セン

@ephemient:返信いただきありがとうございます。イベントのシーケンスを説明してください。
セン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.