Ubuntu(Kstars & Ekos)環境構築 Part-3 USB-シリアルのデバイスファイル名を固定する(追記あり)

Ubuntu

普段マックをメインに使っているので、USBの扱いがあまりにも違って戸惑う。USBを挿す順番でttyUSB0だったりttyUSB1だったりして、一々確認して接続しなければ行けない。T-Studioさんも紹介されていましたが、Ubuntu版Kstars-Ekosでも固有名管理が出来るようになっています。以前のことは知りませんが、最近実装された模様。これでも随分分かりやすくなったと思いますが、それでもシステムポート名が暗号のように長くて分かりづらいので、わかりやすくする方法を書いておきます。

ターミナルでdmesgコマンドをうち、大量に表示された情報からUSBポートの情報を探します。

CP2102は、USBシリアルコンバーターで自分の環境では、フィールドローテーターを接続しています。固有の情報であるVendor IDとProduct IDを利用して、任意の名前を割り振ります。

USBシリアルコンバーターの機種がボードが分かっているなら、下記に決まっています。

FT232RCP2102N
vendor ID0403ea60
product ID600110c4
SerialNumber固有(調べる必要あり)今回は
AQ01CAH3
固定(全部一緒で0001)←最悪
manufacturerFTDISilicon Labs
productFT232R USB UARTCP2102N USB to UART
Bridge Controller
cd /etc/udev/rules.d/
sudo nano 90-usb-serial-devices.rules

一行目は、udevルールが記述されたファイルが保存されているディレクトリに移動。二行目は、nanoエディタでルールファイルを記述します。ファイル名の先頭は数字でなければなりません。例のように記述します。保存は、cmd + x です。y → returnで保存完了。

T-Studioさんのご指摘があり追記します。同じUSBシリアルコンバーターを複数接続した場合、Vender IDとProduct IDだけでは判別できないのでは?とのこと。その通りです。メジャーなFTDIのUSBシリアルコンバーターは、SerialNumberが固有のものが割り振られるので、これもルールに追加します。このUSBシリアルコンバーターには、AZ-GTiを接続するのでSYMLINKを”ttyUSB-AZGTi”とします。これは任意の文字列です。別に最初の”ttyUSB-“をつけなくても問題ありません。

例)

SUBSYSTEM=="tty", ATTRS{ idVendor }=="0403", ATTRS{ idProduct }=="6001", ATTRS{serial}=="AQ01CAH3", SYMLINK+="ttyUSB-AZGTi", MODE="0666"

保存が完了したら、udevルールをリロードします。

sudo service udev reload

これで完了。Ekosを立ち上げ、INDIサーバの設定画面で下記のようにttyUSB-AZGTiが表示されます。より分かりやすくなったと思います。

今回、FT232R と CP2102Nの混在だったため問題は起きませんでしたが、CP2102Nを複数接続した場合の問題は解決できていません。CP2102Nは全てSerialNumberが0001に固定されているので、同じ機種を接続するとコンフリクトを起こします。ネットで情報を探していますが、CP2102NのEEPROM(不揮発性メモリ)に書き込まれているSerialNumberを任意に変更できそうなので、これが出来れば問題解決です。

関連記事

特集記事

コメント

    • T-Studio
    • 2022.01.14 11:46pm

    KENさん

    LinuxもMac同様シリアルが固有名管理になって本当にありがたいです。
    これがあることで機材の一括認識が正常に働きますのでスケジューラーなどで全自動シーケンスも組めるようになります。

    UDEVのルール変更の記事ですが、ちょっと気になったのがベンダーIDとプロダクトIDのみの登録だとArduinoのように同じシリアルUSBチップの機器を複数使う場合誤認識しないでしょうか?

    以前フォーラムでAstropi3の開発者のジェームスとやり取りしていた時この部分の話が出ていたように記憶しています。
    (たしかスクリプトでUDEVルール書き換える時この部分調整していたような。。。)

    • KEN
      • KEN
      • 2022.01.15 1:24pm

      こんにちは!T-Studioさん。

      実はその問題にしばらくハマってました。フォーカーサー、ローテーターを同じCP2102で作ったですが、VendorIDを始め全ての情報が同じなので、誤認識したり、そもそも両方とも繋がらない状況でした。

      色々調べましたが、唯一違うのは物理的にどのUSBポートに挿さっているかだけでした。解決策としては、一番に挿さるものはフォーカーサー、二番はローテーターのような固定の仕方でした。これもちょっとスマートじゃないので、他の方法を模索しました。

      結果的に三つあるUSBシリアル変換器を全て違うメーカーにすることにしました。フォーカーサー→Polalu、ローテーター→CP2102、AZ-GTi→FT232R。これもスマートじゃないですがどこに挿しても認識される安心感があります。

      私のLinuxの知識は完全に独学なので間違ってるかもしれません。良い方法があったら教えてください。

      追記
      FT232Rは、シリアルナンバーがそれぞれ違うみたいなので、IDの他にシリアルナンバーも指定すべきですね。CP2102はシリアルナンバーも固定なので、複数接続は難しそうです。

    • T-Studio
    • 2022.01.15 10:34pm

    KENさん

    私はその問題もあったので、以前はジェームスのスクリプトを使用して書き換えていました。(複数接続の問題に対処するためか書き換えると大量に変更箇所がありました)

    UDEVルールの書き換えは一括接続やスケジュールの自動化などには必須なのでジェームスのスクリプトの使用手順をブログに掲載しようと準備しましたが、今回対策されたようなのでやめました。

    シンプルなルール名にということであれば今回変更されたルールの名称にシンボリックリンクをかけてしまうのはいかがでしょう。

    今回の変更で全ての機器に独自ルールが割り振られていると思いますので、それをベースにすればシンプルな名称に変更することもできそうです。

TOP
WP2Social Auto Publish Powered By : XYZScripts.com