Soracomから販売されている、エイビット製AK-020を使ってSoracomに自動接続します。
基本的にはAK-020 を Raspbian で使う(とりあえず版)を元にしていますが、以下が異なります。
- ejectなしでusb_modeswitchを使って自動的にモデムモードに移行
- modprobeなしで接続時に自動的にドライバをロード
#依存パッケージのインストール
pi@raspberrypi:~ $ sudo apt-get install -y wvdial usb-modeswitch
#wvdialの設定
/etc/wvdial.conf
と**/etc/ppp/peers/wvdial
**を編集してください。
参考と同じです。
#usb_modeswitchの設定
まずはudevの設定をします。
/lib/udev/rules.d/40-usb_modeswitch.rules
にAK-020が接続されたときにusb_modeswitchが動作するように記述します。
以下を最下行から2行目に記述します。
#ABIT AK-020
ATTRS{idVendor}=="15eb", ATTRS{idProduct}=="a403", RUN+="usb_modeswitch '%b/%k'"
usb_modeswitchの設定ファイルを記述します。以下のファイルを/etc/usb_modeswitch.d/15eb:a403
に新規に作成してください。
DefaultVendor = 0x15eb
DefaultProduct = 0xa403
TargetVendor = 0x15eb
TargetProduct = 0x7d0e
StandardEject = 1
それぞれのProductIDはeject前と後の値です。
StandardEjectでモデムモードに移行していますが、usb_modeswitchの他のデバイスの設定と同じように、MessageContent
で移行したほうが良いと思います。
私はSniffUsbで解析するためのWindowsマシンがないので断念しました。
#usbserialドライバの設定
/etc/rc.local
の適当な位置に、AK-020に対してusbserialドライバを使用する設定を書きます。
modprobe -v option
echo "15eb 7d0e" > /sys/bus/usb-serial/drivers/option1/new_id
これで、抜き差しするたびにmodprobe usbserialしなくても自動的に/dev/ttyUSB*
として認識されます。
#デバイス名を固定する
なぜか私の環境では、初回起動時は/dev/ttyUSB2
~/dev/ttyUSB5
に割り振られるが、再起動後は/dev/ttyUSB0
~/dev/ttyUSB3
にポート番号が変わる挙動をするため、モデムとして用いるポートにシンボリックリンクを貼って常に同じ名前でアクセスできるようにします。
Raspberry PiでUSBモデム挿入時にSORACOMへ自動接続するを参考に。
ttyUSB0~ttyUSB3のうち、wvdialなどのツールではttyUSB0を使ってダイアルします。
参考元より、sudo udevadm
で調べてみると、同じようにbNumEndpoints
とbInterfaceNumber
で判別できそうでした。
よって、参考と同じ要領で以下のファイルを作成します。
ATTRS{../idVendor}=="15eb", ATTRS{../idProduct}=="7d0e", ATTRS{bNumEndpoints}=="03", ATTRS{bInterfaceNumber}=="02", SYMLINK+="modem"
再起動すると、/dev/modem
が現れており、これを使ってpon
やwvdial
でppp接続できるようになると思います。
wvdialの設定で使用するデバイスを/dev/modemに変更しておきましょう
#起動時にppp接続
wvdialを使って、起動時に自動的にppp接続してみます。
参考元と同じように、先ほどの/etc/rc.localの中に追加した下に以下を追加しますが、私の環境ではsleep 3
でしばらく待ってからでないと、/dev/modemが見つからずエラーになるようでした。
echo waiting for modem device
for i in {1..30}
do
[ -e /dev/modem ] && break
echo -n .
sleep 1
done
[ $i = 30 ] && ( echo modem not found ; exit 1 )
sleep 3
wvdial > /home/pi/wvdial.log 2>&1 &
補足
sleep 3
が必要な理由は、どうやら何度か接続/切断を繰りかえすような挙動をし、/dev/modem
があることを確認してもその次のタイミングには存在しないようになってしまうからでした。一定時間経てば安定するので、3秒待っています。
もう少し根本から治す賢い方法があると思いますが、なにが原因かわかりませんでした。