USBシリアルデバイスが組み込みシステムに接続されているかどうかを検出し、それに関連付けられているものが何であるかを知る必要があります。C++ USBシリアルデバイスの検出プラグの接続/取り外し
私のシステムは、2.6 Linuxカーネルで動作します。
私はudev
のルールへの書き込みアクセス権がないので、今日はファイルシステムからこの情報を取得しようとしており、/sys/bus/usb/devices
ディレクトリの変更を探しています。しかし、私はこのアプローチのいくつかの問題に直面しています。
私は、接続されたUSBポートのId BUS
(たとえば、1〜1.3)が何であるか知っています。そこで、関連するtty
(/sys/bus/usb/devices/<Id BUS>:1.0/tty/
のディレクトリを探しています - たとえば/sys/bus/usb/devices/1-1.3:1.0/tty/ttyACM0
)を検索します。私のデバイスと通信するには、/dev/ttyACM0
を使うべきだと私は知っています。 ただし、このデバイス(/dev/ttyACM0
)が存在しないことがあります。
この情報を取得する方法はありますか?
私はこの情報をsyslogから取得しようと考えていましたが、これはかなり良いアイデアかどうかわかりません。
編集:
だけ明確にする、私のシステムは、USBバスの状態変化を検出できるようにする必要があり、すなわち、新たなデバイスが接続されているときを検出(およびそれにリンクされているtty
名を取得)、または既存の1つは取り外されています。
システムは、USBハブを使用して接続されているUSB /シリアルデバイスを最大でN
まで監視しています。通常の実行中に新しいデバイスを接続したり、既存のデバイスを削除したり(この範囲外のリモートコマンドで再起動したりすることができます)。デバイスがリブートされると、カーネルが現時点で無料のtty
を指定しているため、前回使用したデバイスとは異なるtty
(たとえばttyACM0
- >ttyACM3
)を受信する可能性があり、大きな問題です。
ありがとう@ david-grayson、私は質問を編集し、問題のあるシナリオの概要を追加しました。 libを使用して、記述された要件を満たすことは可能ですか? – Valmir
はい、うまくいくはずです。 –
組み込みシステムは残念ながらlibudevを持っていませんが、mdevだけが存在するので、あなたのlibを使うことはできません。 – Valmir