すべてのプロセスを1つのプロセスで実行するには、libudevを使用してudevd
から、またはカーネルから直接イベントを取得する必要があります。
あなたのアプリケーションで(ドキュメントの欠如を?)libudevを使用するには問題があるかもしれないことを見て、代替udevadmプログラム、することができます使用することです:udevd
によって処理された後
- レポートデバイスイベントを(
udevadm monitor --udev --property
)、
- レポートdevive直接カーネル(
udevadm monitor --kernel --property
)からのイベント、および現在のデバイスの
- ダンプudevdのデータベース(ただし、カーネルの!)(
udevadm info --query all --export-db
)
udevadm
は、udevパッケージに含まれていますが、カーネルイベントの報告にのみ使用する場合は、udevd
は必要ありません。あなたのプロセスがそれを生成し、その標準出力を解析することによってそれを使用することができます(ただし、stdbuf-o L
経由で起動する必要があります)。
いずれにしても、おそらく多くの作業が必要になります。私は既に、USBデバイスの監視を含め、私のNCD programming languageでこれを多く実装しました。あなたはNCDを見たいかもしれません。これは多くの設定作業に役立ち、ホットプラグをうまく処理します。たとえば、このNCDプログラムは、標準出力にUSBデバイスのイベントを出力します:
process main {
sys.watch_usb() watcher;
println(watcher.event_type, " ", watcher.devname, " ", watcher.vendor_id, ":", watcher.model_id);
watcher->nextevent();
}
これは、NCD(すでに差し込まれた任意のUSBデバイスの初期added
イベントで)そのようなプリントが何かになります:
を
added /dev/bus/usb/002/045 0409:0059
added /dev/bus/usb/002/046 046d:c313
added /dev/bus/usb/002/047 046d:c03e
added /dev/bus/usb/002/048 0557:2008
removed /dev/bus/usb/002/048 0557:2008
また、このためにNCDを使用して、この標準出力を解析することもできます。これは、udevadmで直接操作するよりもはるかに簡単です。
NCD自体がudevadm
を使用しており、はになると、udevdが実行されている必要があります。とにかくそれはなぜ問題なのですか? (いくつかの作業でこの依存関係を取り除くことができます)
少なくともudevはありますか? – Keith
残念ながら私はしません。 udevなしでこのタイプのイベントをユーザーモードで聞くことは不可能ですか? –
私はこれがカーネルイベントを取得する最良の方法だと考えています。もう一つの方法は、[linux-hotplug](http://linux-hotplug.sourceforge.net/)の古いusbdです。 – Keith