(Raspbian) AK-020で3Gモデム自動接続(毎回のejectとmodprobeなし)
Soracomから販売されている、エイビット製AK-020を使ってSoracomに自動接続します。
基本的にはAK-020 を Raspbian で使う(とりあえず版)を元にしていますが、以下が異なります。
- ejectなしでusb_modeswitchを使って自動的にモデムモードに移行
- modprobeなしで接続時に自動的にドライバをロード
依存パッケージのインストール
pi@raspberrypi:~ $ sudo apt-get install -y wvdial usb-modeswitch
wvdialの設定
pi@raspberrypi:~ $ sudo apt-get install -y wvdial usb-modeswitch
/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秒待っています。
もう少し根本から治す賢い方法があると思いますが、なにが原因かわかりませんでした。
参考ページ
Author And Source
この問題について((Raspbian) AK-020で3Gモデム自動接続(毎回のejectとmodprobeなし)), 我々は、より多くの情報をここで見つけました https://qiita.com/aquahika/items/dc7d8ad8f481414d3528著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .