カーネル空間からユーザ空間へのUSBイベントフローは何ですか? USBドライブを接続すると、デスクトップにポップアップが表示されます。新しいUSBドライブを検出した後、それを取り付けてポップアップを表示するまでの一連のイベントは何ですか?
答え1
udev
これは最新のLinuxシステムで利用可能です。システムで開始されたデーモンプロセスは、カーネルイベントの一致規則をudev
検索し/etc/udev/rules.d
て実行します。 USBドライブを挿入すると、一致するルールを検索して実行する/lib/udev/rules.d
イベントが発生します。udev
ルール自体がシステムの機能を決定します。最近、udev
DBUSを介してアプリケーションに警告を送信するHALとの通信が行われています。このアプローチは、直接または次を介して渡すudev
統合ソリューションを好むため、廃止されました。udevd
dbus
dbusを送信。
udev
アクティビティを通じて監視できますudevadm monitor
。
答え2
私はまだこれについて完全に確信していませんので、塩を1粒ずつ受け入れ、さらに研究してください。
カーネルホットプラグサブシステムから始まります。デバイスが設定されたら、ホットプラグイベントを処理するように設定されたユーザースペースプログラム(設定されているecho hotplug_handler > /proc/sys/kernel/hotplug
場合)を呼び出すか、kobject_uevent netlinkソケットを介してパケットを送信します。カーネルは、ホットプラグハンドラの起動時にいくつかの環境変数を設定します。カーネルがパケットを送信すると、キーと値のペアが含まれます。必要に応じて、環境を記録してハンドラに設定するスクリプトを設定できます(もちろん、本番システムではなくテスト設定)。
通常、udevはハンドラとして設定され、イベントの処理方法に関するいくつかのルールを設定します。そこから別のプログラムを起動して、他の操作(例:dbusメッセージの発行)を実行できます。これらの udev ルールは、特定の関心の分布に大きく依存します。
その中に多くの情報が含まれています。このスレッド誰かが文書を作成しようとしています。最初のメッセージが正しくないことに注意してください。