USBデバイスにカスタム属性(ATTRS {attribute_name})を書き込むには?

USBデバイスにカスタム属性(ATTRS {attribute_name})を書き込むには?

2つの同じデバイスがあり、udevルールを使用してデバイスを区別したいと思います。

ただし、デバイスに対して次のタスクを実行した後、そのハードウェアで1つのデバイスにシリアル番号がないことがわかりました。

このシリアル番号は各デバイスに固有で表示されなければなりません。

接続するだけでシリアル番号が表示されます。

$ udevadm info -a -p  $(udevadm info -q path -n /dev/ttyUSB0) | grep -i Serial
ATTRS{serial}=="XXXXXXXX"

障害のあるデバイスのみが接続されている場合、シリアル番号は表示されません。

$ udevadm info -a -p  $(udevadm info -q path -n /dev/ttyUSB1) | grep -i Serial

$

接続されている場合のみ:

$ ls /dev/serial/by-id/*
/dev/serial/by-id/usb-FTDI_DEVICE-NAME_XXXXXXXX-if00-port0

欠陥のある側のみを接続する場合:

$ ls /dev/serial/by-id/*
/dev/serial/by-id/usb-FTDI_DEVICE-NAME_-if00-port0

それでは、udevルールを使用してデバイスを区別できるように、これらのデバイスにカスタムプロパティを追加する方法はありますか?

実行するコマンドやプログラムなど

$ attribute_writing_binary /dev/tty_device_path "ATTRS{custom_attribute}=value" 

注:これまでに見たリソースとソリューションは、デバイスが接続されているポートの規則に基づいています。私の意図は、デバイスに書き込まれたキーと値のペア文字列がデバイス自体に保持され、他のコンピュータに接続されているときに値を保持するため、複数のハードウェアインスタンスに展開してIDを割り当てることができることです。

答え1

デバイスが/dev/serial/by-id/usb-FTDI_DEVICE-NAME_*デバイスとして表示されるという事実は、FTDI USBシリアルコンバータチップ(またはその偽のレプリカ)がデバイスに使用されることを意味します。

私が理解したのは、本物のFTDI USBシリアルチップはカスタム属性の割り当てをサポートしていませんが、カスタムベンダー/製品識別子および/またはシリアル番号のオプションの割り当てをサポートしています。この機能は、チップが統合されるデバイスを製造するときに使用するように設計されています。これらのパラメータは一度、それ以来永遠に。

FTDIチップを構成するツールはと呼ばれますFT_PROGここで利用可能、Windows専用です。 これはユーザーガイドです。

偽造(偽)USBシリアルチップは、近年FTDIで大きな問題だったようです。偽造製品を事前に検出して永続的なエラーを発生させるドライババージョンをリリース

このFT_PROGツールは、これらのチップを含むデバイスを製造するときに使用するように設計されているため、チップメーカーは発見した偽造チップを無効にする方が良いと思います。デバイスの製造中に偽造チップを無効にすると、製造元に害を及ぼす可能性があります。デバイスのエンドユーザーではなく、純正チップの代わりに偽造チップを使用してください。

したがって、FT_PROGを使用してデバイスの一意のシリアル番号を設定しようとし、デバイスの1つに偽のチップが含まれている場合、このプログラムはデバイスのチップを無効にする危険があります。

一部の(旧)バージョンのFTDI USBシリアルチップは、プログラム可能な識別子をサポートするために小さな外部EEPROMチップが必要であるように見えます。物事はあまりありません。ソフトウェアレベル。

関連情報