FreeBSDのUSBデバイス用の明確なtty

数年前、次の問題を解決する必要がありました。 同じタイプのFreeBSDを実行しているホストは、同じタイプの複数のUSBデバイスを接続します。 ホストソフトウェアは、キャラクターデバイスファイルを介してそれらと連携します。 USBランヤードをランダムに切り替えた場合、またはホストが再起動した場合、キャラクターデバイスのファイルには、最初に接続したときとはまったく異なる順序で番号が付けられます(一般的な場合)。 私の場合、USBデバイスは、デバイスのあるRS-485バスがハングするインターフェイスコンバーターです。 バス内のデバイスによって、どのバスがどのポートにかかっていないかを自動的に判断する方法はありません。 したがって、どのシンボルデバイスファイルが現時点でどの物理デバイスに対応するかは明確ではありません。 誰が解決策を気にかけてください、猫の下で。 タスクの特異性にもかかわらず、メソッドは普遍的です。





アイデア。 USBデバイスを接続するとき、システムによって発行されたキャラクターデバイスのファイル名(ttyUxなど)、メーカー、タイプ、デバイスのs / nを特定し、このs / nの定義済みの名前を使用して、既知のttyUxを指すリンクを/ devに作成します。 T.O. 当社のソフトウェアは、既知のシンボルデバイスファイル名-特定のデバイスに対応する定義済みリンクで常に動作します。



実装。



USBデバイスの詳細を確認するには:

usbconfig dump_device_desc ... ugen1.2: <USB-Serial Controller Prolific Technology Inc.> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON bLength = 0x0012 bDescriptorType = 0x0001 bcdUSB = 0x0110 bDeviceClass = 0x0000 bDeviceSubClass = 0x0000 bDeviceProtocol = 0x0000 bMaxPacketSize0 = 0x0040 idVendor = 0x067b idProduct = 0x2303 bcdDevice = 0xa7d4 iManufacturer = 0x0001 <Prolific Technology Inc.> iProduct = 0x0002 <USB-Serial Controller> iSerialNumber = 0x0003 <0000A7D4> bNumConfigurations = 0x0001 ...
      
      







/etc/devd.confを編集します。 次のように書きます:

 # When the ICPCON USB Converter appear... attach 100 { match "device-name" "uplcom[0-9]"; match "vendor" "0x067b"; match "product" "0x2303"; match "release" "0xa7d4"; action "/usr/local/bin/uplcom2ttyU $device-name /dev/icpcon1"; }; detach 100 { match "device-name" "ugen+"; match "vendor" "0x067b"; match "product" "0x2303"; match "release" "0xa7d4"; action "rm /dev/icpcon1"; };
      
      







このエントリの意味は明確だと思います。 この例では、uplcom2ttyUを「描画」して、同じリンクを作成します(例:/ dev / icpcon1)。 デバイスごとに、devd.confに適切なエントリを作成する必要があります。 リンクの名前(I dev / icpcon1を持っている)を2つの場所で変更することを忘れないでください。アタッチ、デタッチ-デバイスの電源が切れるとリンクが消えるようにします。



 cat /usr/local/bin/uplcom2ttyU #!/bin/sh # arg #1 - $device-name from devd.conf - uplcomX; arg #2 - new link to ttyUX - /dev/..... ln -s $(echo /dev/$1 | sed 's/uplcom/ttyU/g') $2
      
      





/ devでシステムがttyUxを正確に作成するため、uplcomエントリがttyUに変わることがわかります(xはuplcom番号に一致します)。



以上です。 ただし、これまでのところ、この問題の解決策の完全な説明はインターネットで見つけることができません。 ある有名なリソースのフォーラムに私の投稿がない限り。



All Articles