はじめに
手元の RaspberryPi にて「SORACOM Onyx LTE USB ドングル SC-QGLC4-C1」のセットアップを行ったところ、以下のエラーによりうまく認識されない現象がおきていました。
pi@raspberrypi:~ $ ifconfig ppp0
ppp0: インタフェース情報を取得中にエラーが発生しました: デバイスが見つかりません
試行錯誤の末原因が判明しましたので解決手順をまとめておきます。
なお公式のセットアップ手順はこちらに記載されてあるとおり。
ガイド: Raspberry Pi (Raspberry Pi OS) の設定 | SORACOM Onyx LTE USB ドングルをセットアップする | SORACOM Users
事前準備
公式のドキュメントに従い、SORACOM Onyx LTE USB ドングルを Raspberry Pi の USB ポートに差し込み、認識された状態にしておいてください。
pi@raspberrypi:~ $ ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
setup_air.sh
を削除した、ダウンロードできていない方は公式ドキュメントの手順に従いダウンロードしておいてください。
解決手順
以下の3コマンドを順次実行すればOK!
sudo bash setup_air.sh uninstall
sudo bash setup_air.sh
sudo reboot
確認方法
RaspberryPi が再起動したらコンソールにログインし、ifconfig ppp0
コマンドで接続確認できます。
pi@raspberrypi:~ $ ifconfig ppp0
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1464
inet 10.xxx.xxx.xxx netmask 255.255.255.255 destination 10.64.64.64
ppp txqueuelen 3 (Point-to-Pointプロトコル)
RX packets 26 bytes 2242 (2.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 31 bytes 1933 (1.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ping pong.soracom.io
コマンドにてSORACOMプラットフォームへの接続も確認できます。
pi@raspberrypi:~ $ ping pong.soracom.io
PING pong.soracom.io (100.127.100.127) 56(84) bytes of data.
64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=1 ttl=64 time=43.2 ms
64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=2 ttl=64 time=56.7 ms
64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=3 ttl=64 time=54.8 ms
もしSORACOMプラットフォームへ接続できない場合は以下のようなレスポンスになりますので、うまく接続できていないことがわかります。
pi@raspberrypi:~ $ ping pong.soracom.io
PING pong.soracom.io (100.127.100.127) 56(84) bytes of data.
From 172.31.2.105 (172.31.2.105) icmp_seq=37 Packet filtered
From 172.31.2.105 (172.31.2.105) icmp_seq=294 Packet filtered
From 172.31.2.105 (172.31.2.105) icmp_seq=324 Packet filtered
原因について
手元の RaspberryPi では2021年1月頃により他の SORACOM USBドングルを使ってテストを行っていたことに起因するものでした。
先に SORACOM より提供されている、setup_air.sh
にてセットアップして利用していたのですが、今回改めて SORACOM Onyx LTE USB ドングルを利用するにあたり、setup_air.sh
の最新版をダウンロードして実行してもうまく動作しないことが判明しました。
ルールファイルが更新されていなかった
原因はsetup_air.sh
にて作成される、USBデバイス接続時のルールファイル
/etc/udev/rules.d/30-soracom.rules
が古いままで、更新されていなかったためでした。
以下の通りルールファイルには最下行にOnyx用のルールが更新されていませんでした。
pi@raspberrypi:~ $ cat /etc/udev/rules.d/30-soracom.rules
# FS01BU
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="98f f", RUN+="/usr/sbin/usb_modeswitch -v 1c9e -p 98ff -M '5553424312345678000000008 0000606f50402527000000000000000000000'"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="98f f", RUN+="/bin/bash -c 'modprobe option && echo 1c9e 6801 > /sys/bus/usb-serial/ drivers/option1/new_id'"
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="1c9e", ATTRS{../idProduct}=="6801", ATTR S{bNumEndpoints}=="02", ATTRS{bInterfaceNumber}=="02", SYMLINK+="modem", ENV{SYS TEMD_WANTS}="ifup@wwan0.service"
# AK-020
ACTION=="add", ATTRS{idVendor}=="15eb", ATTRS{idProduct}=="a403", RUN+="/usr/sbi n/usb_modeswitch --std-eject --default-vendor 0x15eb --default-product 0xa403 -- target-vendor 0x15eb --target-product 0x7d0e"
ACTION=="add", ATTRS{idVendor}=="15eb", ATTRS{idProduct}=="7d0e", RUN+="/sbin/mo dprobe usbserial vendor=0x15eb product=0x7d0e"
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="15eb", ATTRS{../idProduct}=="7d0e", ATTR S{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="02", SYMLINK+="modem", ENV{SYS TEMD_WANTS}="ifup@wwan0.service"
# MS2131 or MS2372
ACTION=="add", ATTR{idVendor}=="12d1", ATTR{idProduct}=="14fe", RUN+="usb_modesw itch '/%k'"
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="12d1", ATTRS{../idProduct}=="1506", ATTR S{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="00", SYMLINK+="modem", ENV{SYS TEMD_WANTS}="ifup@wwan0.service"
# UX302NC-R
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="11f6", ATTRS{idProduct}=="103 5", RUN+="/usr/sbin/usb_modeswitch -v 11f6 -p 1035 -M '5553424312345678000000008 0000606f50402527000000000000000000000'"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="11f6", ATTRS{idProduct}=="103 4", RUN+="/bin/bash -c 'modprobe option && echo 11f6 1034 > /sys/bus/usb-serial/ drivers/option1/new_id'"
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="11f6", ATTRS{../idProduct}=="1034", ATTR S{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="01", SYMLINK+="modem", ENV{SYS TEMD_WANTS}="ifup@wwan0.service"
# GH-UDG-MCLTE (modem mode only)
KERNEL=="ttyACM0", SUBSYSTEM=="tty", ATTRS{idVendor}=="1ecb", ATTRS{idProduct}== "0202", SYMLINK+="modem", ENV{SYSTEMD_WANTS}="ifup@wwan0.service"
ルールファイルを一度削除すれば良い
setup_air.sh
には uninstall
オプションが用意されてあり、アンインストール時には、このルールファイルが削除されることがシェルスクリプトに書いてありましたので、アンインストール&インストールを実行することで無事解決できました。
正しくインストールができていれば、最下行に# FC-QGLC4-C0 (EG25-G) a.k.a. "Onyx"
の設定が追加されていることがわかります。
pi@raspberrypi:~ $ cat /etc/udev/rules.d/30-soracom.rules
# FS01BU
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="98ff", RUN+="/usr/sbin/usb_modeswitch -v 1c9e -p 98ff -M '55534243123456780000000080000606f50402527000000000000000000000'"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="98ff", RUN+="/bin/bash -c 'modprobe option && echo 1c9e 6801 > /sys/bus/usb-serial/drivers/option1/new_id'"
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="1c9e", ATTRS{../idProduct}=="6801", ATTRS{bNumEndpoints}=="02", ATTRS{bInterfaceNumber}=="02", SYMLINK+="modem", ENV{SYSTEMD_WANTS}="ifup@wwan0.service"
# AK-020
ACTION=="add", ATTRS{idVendor}=="15eb", ATTRS{idProduct}=="a403", RUN+="/usr/sbin/usb_modeswitch --std-eject --default-vendor 0x15eb --default-product 0xa403 --target-vendor 0x15eb --target-product 0x7d0e"
ACTION=="add", ATTRS{idVendor}=="15eb", ATTRS{idProduct}=="7d0e", RUN+="/sbin/modprobe usbserial vendor=0x15eb product=0x7d0e"
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="15eb", ATTRS{../idProduct}=="7d0e", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="02", SYMLINK+="modem", ENV{SYSTEMD_WANTS}="ifup@wwan0.service"
# MS2131 or MS2372
ACTION=="add", ATTR{idVendor}=="12d1", ATTR{idProduct}=="14fe", RUN+="usb_modeswitch '/%k'"
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="12d1", ATTRS{../idProduct}=="1506", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="00", SYMLINK+="modem", ENV{SYSTEMD_WANTS}="ifup@wwan0.service"
# UX302NC-R
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="11f6", ATTRS{idProduct}=="1035", RUN+="/usr/sbin/usb_modeswitch -v 11f6 -p 1035 -M '55534243123456780000000080000606f50402527000000000000000000000'"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="11f6", ATTRS{idProduct}=="1034", RUN+="/bin/bash -c 'modprobe option && echo 11f6 1034 > /sys/bus/usb-serial/drivers/option1/new_id'"
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="11f6", ATTRS{../idProduct}=="1034", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="01", SYMLINK+="modem", ENV{SYSTEMD_WANTS}="ifup@wwan0.service"
# GH-UDG-MCLTE (modem mode only)
KERNEL=="ttyACM0", SUBSYSTEM=="tty", ATTRS{idVendor}=="1ecb", ATTRS{idProduct}=="0202", SYMLINK+="modem", ENV{SYSTEMD_WANTS}="ifup@wwan0.service"
# FC-QGLC4-C0 (EG25-G) a.k.a. "Onyx"
KERNEL=="ttyUSB*", ATTRS{../idVendor}=="2c7c", ATTRS{../idProduct}=="0125", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="02", SYMLINK+="modem", ENV{SYSTEMD_WANTS}="ifup@wwan0.service"
おわりに
原因がわかってしまえば簡単なことなんですが、たどり着くまでにドライバの原因を疑ったり、電圧不足の原因疑ったり、デバイスの初期不良かもしれないと、別のSORACOM Onyx LTE USB ドングルで確認したりと・・・多くの時間をかけてしまったのがお恥ずかしい。
皆様も他のSORACOM USBドングルから乗り換える際にはお気を付けくださいませ。