Armadilloフォーラム

/dev/ttyUSB* について(Quectel社製EC25のGSM modem)

sugihara

2020年1月9日 9時26分

以下と内容が似ていますが、4~5年前のスレッドであることであり、新しく質問させてもらいます。
https://users.atmark-techno.com/forum/armadillo/1442

製品:Armadillo IoT G3
GSM modem:搭載GSM modemは、Vendor=Quectel("2c7c")、Product=EC25("0125")
OSバージョン:(# uname -a出力)Linux armadillo 4.9.133-at10 #2 SMP PREEMPT Tue Jul 2 16:14:08 JST 2019 armv7l GNU/Linux
現象・問題
USB-シリアル変換器(FTDI社製USB-RS485-WE)を使用する際、
①パワーオン時にUSB-シリアルが装着されている:USB-シリアル変換器はttyUSB0に割当てられる
②パワーオン時にUSB-シリアルは装着されておらず後から挿入する:USB-シリアル変換器はttyUSB4が割当られる
USB-シリアル変換器の割当不定に関してはSYMLINKを使うことで名前解決しそうですが、USB-シリアル変換器にttyUSB0が割当たった場合に、GSM modemが動作しなさそうです。

https://users.atmark-techno.com/forum/armadillo/1442
にならい、/etc/udev/rules.d/にファイルを置きましたが、USB-シリアル変換器やGSM modemに対してSYMLINK作成できますが、NAME変更ができません。
NAME変更しようとすると以下のエラーが出ています。(.rulesはNAME変更可能かの調査のため、それ以外の箇所はあまり良くないかもわかりません。添付参照ください)

[ログ](タイムスタンプが不正ですが無視してください)
Jan 30 11:21:06 armadillo kernel: option 2-1.2:1.0: GSM modem (1-port) converter detected
Jan 30 11:21:06 armadillo kernel: usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB1
Jan 30 11:21:06 armadillo kernel: option 2-1.2:1.1: GSM modem (1-port) converter detected
Jan 30 11:21:06 armadillo kernel: usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB2
Jan 30 11:21:06 armadillo kernel: option 2-1.2:1.2: GSM modem (1-port) converter detected
Jan 30 11:21:06 armadillo kernel: usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB3
Jan 30 11:21:06 armadillo kernel: option 2-1.2:1.3: GSM modem (1-port) converter detected
Jan 30 11:21:06 armadillo kernel: usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB4
Jan 30 11:21:07 armadillo systemd-udevd[1618]: NAME="ttyUSB2" ignored, kernel device nodes cannot be renamed; please fix it in /etc/udev/rules.d/88-quectel-ec25.modify.rules:5
Jan 30 11:21:07 armadillo systemd-udevd[1621]: NAME="ttyUSB2" ignored, kernel device nodes cannot be renamed; please fix it in /etc/udev/rules.d/88-quectel-ec25.modify.rules:5
Jan 30 11:21:07 armadillo systemd-udevd[1619]: NAME="ttyUSB2" ignored, kernel device nodes cannot be renamed; please fix it in /etc/udev/rules.d/88-quectel-ec25.modify.rules:5

ArmadilloのDebianとは違うUbuntuの記事ですが、udevの最近仕様?では、SYMLINK作成は出来るが、NAME変更は出来ないような記述があります↓
https://askubuntu.com/questions/920098/udev-rules-name-variable-not-wor…

USBポートにUSB-シリアル変換器等を装着した状態で、Quectel EC25を動作させる方法について、
rulesファイルの記述は妥当か、及びudevでそもそもNAME変更出来るか等について、確認してもらえればと思います。

ファイル ファイルの説明
88-quectel-ec25.modify.rules_.txt
コメント

y.nakamura

2020年1月9日 10時47分

中村です。

以前、同じようなことを調べたことがあります。
「SYMLINK作成は出来るが、NAME変更は出来ない」
が正しいと思います。

参考:(私の過去の投稿です)
https://armadillo.atmark-techno.com/forum/armadillo/3350#comment-5734

> 以下と内容が似ていますが、4~5年前のスレッドであることであり、新しく質問させてもらいます。
> https://users.atmark-techno.com/forum/armadillo/1442
このころはこの方法で可能だったのか、あるいは、
うまくできたように見えたが実はダメだったのか、
よくわかりません。

解決方法としては、モデムのttyUSBxの方もSYMLINKを
使うようにするしかないと思っています。

--
なかむら

sugihara

2020年1月9日 16時17分

すぎはらです。

中村さま
返答ありがとうございます。

> 「SYMLINK作成は出来るが、NAME変更は出来ない」
> が正しいと思います。
ありがとうございます。udevでのNAME変更の可否さらに追う必要がなくなりました。

ttyUSB0にUSB-シリアル変換器(FTDI社製)が割当たった場合に、ttyUSB3がGSM modemになるようなので仮にttyUSB3のSYMLINKをttyUSBQUEとして作成しました。(USBポートに何もない場合はttyUSB2がGSM modemです)

lrwxrwxrwx 1 root root 7 Jan 31 08:09 /dev/ttyUSB-FT232Rx -> ttyUSB0
crw-rw---- 1 root dialout 188, 0 Jan 31 08:09 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 Jan 31 08:36 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 Jan 31 08:10 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 3 Jan 31 08:36 /dev/ttyUSB3
crw-rw---- 1 root dialout 188, 4 Jan 31 08:10 /dev/ttyUSB4
lrwxrwxrwx 1 root root 12 Jan 31 08:36 /dev/ttyUSBQUE -> /dev/ttyUSB3

nmcli deviceの出力は以下です。ttyUSB2ではなくttyUSB3がTYPE=gsmに出るようになっています
root@armadillo:~# nmcli device
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected ethernet-eth0
ttyUSB3 gsm disconnected --
wlan0 wifi disconnected --
gretap0 gretap unmanaged --
ip6gre0 ip6gre unmanaged --
ip6_vti0 ip6tnl unmanaged --
ip6tnl0 ip6tnl unmanaged --
gre0 iptunnel unmanaged --
sit0 iptunnel unmanaged --
tunl0 iptunnel unmanaged --
lo loopback unmanaged --

SYMLINKを使用してconnectionは作成できるかのように見えます
root@armadillo:~# nmcli connection add type gsm ifname ttyUSBQUE apn soracom.io user sora password ****
Connection 'gsm-ttyUSBQUE' (74d1deac-f79d-4281-a6a9-ef2fc3f78979) successfully added.

しかし、SYMLINKではなく本来のDEVICE名を使う必要があるためか、connection作成に問題があるためか、SYMLINK使用のconnectionが動作しません
root@armadillo:~# ping www.yahoo.co.jp
ping: www.yahoo.co.jp: Temporary failure in name resolution

root@armadillo:~# nmcli connection
NAME UUID TYPE DEVICE
ethernet-eth0 dcf75d1d-f1b4-4f43-9ae0-52b4c0211afc 802-3-ethernet eth0
gsm-ttyUSBQUE 74d1deac-f79d-4281-a6a9-ef2fc3f78979 gsm --

DEVICE名であるUSB3でconnectionを作成すれば、うまく行きます。pingが通るところまで確認しました
# nmcli connection add type gsm ifname ttyUSB3 apn soracom.io user sora password ****

root@armadillo:~# nmcli device
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected ethernet-eth0
ttyUSB3 gsm connected gsm-ttyUSB3
wlan0 wifi disconnected --
gretap0 gretap unmanaged --
ip6gre0 ip6gre unmanaged --
ip6_vti0 ip6tnl unmanaged --
ip6tnl0 ip6tnl unmanaged --
gre0 iptunnel unmanaged --
sit0 iptunnel unmanaged --
tunl0 iptunnel unmanaged --
lo loopback unmanaged --

root@armadillo:~# nmcli connection
NAME UUID TYPE DEVICE
ethernet-eth0 dcf75d1d-f1b4-4f43-9ae0-52b4c0211afc 802-3-ethernet eth0
gsm-ttyUSB3 7f998c48-890d-4c33-aad2-e6a2bcf93daf gsm ttyUSB3

GSM modemのconnection作成に本来のDEVICE名でなくSYMLINKを使用可能ならば、udevでSYMLINK作成しようと思います。connection作成にSYMLINK使用可能か、もしくは調べる方向性があれば、教えてもらえないでしょうか?

y.nakamura

2020年1月9日 17時16分

中村です。

すみません、SYMLINKの名前でconnectionを作るところまでは
試していませんでした。できないんですね。

ならば。。。
適当なスクリプトでリンク先を調べて、
それを使うようにしてはどうでしょうか?

ArmadilloのDebianでは試していませんが(今は出先なので)、
リンク先を調べるコマンドreadlinkが使えると思います。

--
なかむら

sugihara

2020年1月10日 15時03分

すぎはらです。

中村さま
返答ありがとうございます

出来ること・出来ないことの切り分けがはっきりしてきました。

> リンク先を調べるコマンドreadlinkが使えると思います。
直に出来ない部分については、ご指摘のようにスクリプトで対応しようと思います。

at_syunya.ohshio

2020年1月22日 12時54分

大塩です。

GSM modem に割り当てられるデバイス名が ttyUSB0~ttyUSB4 のどれかになり固定化されてない事象について、弊社でも認識しています。

現在対応を行っており、GSM modem に割り当てるデバイス名を固定化するパッケージを仮作成しました。
パッケージを添付致します。

■パッケージ適用後の変化
/dev/下に GSM modem のシンボリックリンク ttyCommModem が出現するようになります。
3G/LTE接続を行う際に ttyUSB* ではなく ttyCommModem を指定することで、3G/LTE接続できるようになります。

■修正内容
・modemmanager : モデムポートのシンボリックリンク ttyCommModem を作成するように修正
・atmark-x1-base : connection-recoverd や wwan-force-restart がコネクションの再接続処理を行う際に ttyCommModem が存在する場合、優先的に使用するよう修正

■使用方法
・nmcli connection でコネクション状況を確認し、3G/LTEコネクションが存在する場合は一旦削除

nmcli connecition delete [gsmコネクション名]

・パッケージを dpkg コマンドでインストール

dpkg -i atmark-x1-base_2.3.2-1+work1_armhf.deb
dpkg -i modemmanager_1.6.4-1atmark5+work1_armhf.deb

・reboot後、ttyCommModemが/dev/下に出現
・nmcli connection add にてttyCommModemを指定し、3G/LTE接続できることを確認

なお、このパッケージは正式な実装が行われておりません。
今後のアップデートにて実装予定です。

以上です。

ファイル ファイルの説明
modemmanager_1.6.4-1atmark5+work1_armhf.deb
atmark-x1-base_2.3.2-1+work1_armhf.deb

sugihara

2020年1月23日 8時28分

すぎはらです。
大塩さま

対応ありがとうございます。

このパッケージを適用する「前」は、モデムへのシンボリックを使用してconnection作成できたいたでしょうか?
このスレッドの最中、シンボリックリンクでconnection作成しようとして動作しなかったので、確認したいだけです。

よろしくお願いします。

> 大塩です。
>
> ■パッケージ適用後の変化
> /dev/下に GSM modem のシンボリックリンク ttyCommModem が出現するようになります。
> 3G/LTE接続を行う際に ttyUSB* ではなく ttyCommModem を指定することで、3G/LTE接続できるようになります。
>
> ■修正内容
> ・modemmanager : モデムポートのシンボリックリンク ttyCommModem を作成するように修正
> ・atmark-x1-base : connection-recoverd や wwan-force-restart がコネクションの再接続処理を行う際に ttyCommModem が存在する場合、優先的に使用するよう修正

at_syunya.ohshio

2020年1月23日 18時00分

大塩です。

> このパッケージを適用する「前」は、モデムへのシンボリックを使用してconnection作成できたいたでしょうか?
> このスレッドの最中、シンボリックリンクでconnection作成しようとして動作しなかったので、確認したいだけです。

この修正を行う前のmodemmanagerは、シンボリックリンクを追うことができないため、connection作成出来ません。
今回仮作成したパッケージで、シンボリックリンクを追うように修正したため、connectionが作成できるようになっています。

以上です。