私のロボットには、Jetsonに接続された2つのLiDARがあります。前面に一つ、背面に一つ。どのLiDARがどこにあるかを追跡することが重要です。ただし、LiDARは、一種のUARTブリッジを介してUSBポートに接続されています。これは、Linuxがブリッジの背後にあるLiDARではなく、ブリッジしか見えないことを意味します。これらのブリッジはプロパティの点で同じように見えるため、udevルールを作成するのは通常よりも少し複雑です。
C ++で実行されているLidar SDKから正しいシリアル番号にアクセスできます。私はUSBポートが与えられたら、そのLiDARに使用したい正しいシンボリックリンク名を提供するプログラムを書いた。しかし、いくつかのbashスクリプトに基づいてudevルールをトリガーする方法がわからないので、シンボリックリンクを作成するのに問題があります。
現在のスクリプトパスは次のとおりです。 udevルールは私のスクリプトを呼び出し、デバイス名を渡します。 -> スクリプトは SDK にシリアル番号を問い合わせ、正しい場所を探します。 ->スクリプトは、このロジックに基づいて新しいudevルールを追加します。 >スクリプトが実行されますudevadm control --reload-rules && udevadm trigger
。これにより正しい udev ルールが生成されますが、トリガーされないため、シンボリックリンクは生成されません。この段階でLiDARを再挿入すると、シンボリックリンクが生成されます。しかし、このプロセスがさらに自動化されたらと思います。
正しいアプローチは何ですか?手動でシンボリックリンクを作成するのは合理的ですかln -s /dev/ttyUSB1 /dev/ttyLIDAR_FRONT
? bashスクリプトはudevルールを強制的に実行できますか?それとも、udevadmはcliでルールを実行できますか?
ありがとうございます。
答え1
新しいルールを作成してロードせずにこの問題を解決するには、少なくとも2つの方法があります。
スクリプトが新しい
udev
ルールを生成するのではなく、適切なシンボリックリンクを直接生成してください。udev
私が知っている限り、これを行うと失われるのはシンボリックリンクの生成ではなく、後続のルールとリンク優先度管理で生成されたシンボリックリンクを照会する能力だけです。udev
udev
スクリプトから変数の割り当てを出力し、
IMPORT{program}
udev
それをルールで使用し、スクリプトで設定した変数を参照するシンボリックリンクを作成します。これには、スクリプト出力
TARGET=symlinkname
(可能であればより具体的な変数名を含む)とSYMLINK
参照の生成などが含まれます%E{TARGET}
。udev
手動;また、/lib/udev/rules.d
システムの既存のルールの中から例を見つけることもできます。