3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Armadillo-440でFS040Uを使う

Posted at

結構ハマったので残しておく

結果から

この設定で起動時に自動認識されるようになった。

カーネルコンフィギュレーション

Linux Kernel Configuration
Device Drivers  --->
  [*] USB support  --->
    <*>   USB Serial Converter support  --->       		← 有効化
      [*]   USB Generic Serial Driver               		← 有効化
      <*>   USB driver for GSM and CDMA modems     	← 有効化

pppd

atmark-dist/user/pppd/preinstall/etc/ppp/options

lock
defaultroute
usepeerdns
name PPPログイン名

認証ファイル
ユーザ名/パスワードは、契約しているSIMに応じて記載してください。
atmark-dist/user/pppd/preinstall/etc/ppp/pap-secrets

# Secrets for authentication using PAP
# client        server  secret                  IP addresses

atmark-dist/user/pppd/ppp-2.4.4/scripts/ppp-on-dialer

# !/bin/sh
#
# This is part 2 of the ppp-on script. It will pe
# protocol for the desired connection.
#
exec chat -v \
        TIMEOUT 3 \
        ABORT '\nBUSY\r' \
        ABORT '\nNO ANSWER\r' \
        ABORT '\nRINGING\r\n\r\nRINGING\r' \
        '' \rAT \
        'OK' ATZ \
        TIMEOUT 30 \
        OK ATDT*99***1# \
        CONNECT ''

起動スクリプト
/etc/init.d/pppd

# !/bin/sh -e

### BEGIN INIT INFO
# Provides:          pppd
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Should-Start:      network-manager
# Should-Stop:       network-manager
# X-Start-Before:    $x-display-manager gdm kdm xdm wdm ldm sdm nodm
# X-Interactive:     true
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: ppp daemon
### END INIT INFO

PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

DAEMON=/sbin/pppd
DESC="point to point protocol daemon"
CONFIG_DIR=/etc/ppp
DEV=/dev/ttyUSBmodem
RATE=115200
DIALER=$CONFIG_DIR/ppp-on-dialer
PIDFILE=/var/run/ppp0.pid

test -x $DAEMON || exit 0
test -d $CONFIG_DIR || exit 0

check_device() {
    while :
    do
        if ls /dev |grep ttyUSBmodem > /dev/null; then
            break;
        fi
        echo "waiting device..."
        sleep 3
    done
}

check_pppd() {
    while :
    do
        if ip addr show |grep ppp0 > /dev/null; then
            break;
        fi
        echo "starting..."
        sleep 3
    done
}

start_pppd () {
    echo "Starting $DESC"
    if test -e $DIALER;
    then
        opts="${DEV} ${RATE} connect ${DIALER}"
        $DAEMON $opts
        check_pppd
        echo "OK"
    else
        echo "No such file or directory $DIALER"
    fi
}
check_device
start_pppd

USBドングルを指してないと起動しない無限ループにはまるので、check_deviceを適当に直して使ってください。
(検証なので手抜きです)

USB_MODESWITCH

ここを参考にusb_modeswitchと依存パッケージを入れる
https://armadillo.atmark-techno.com/howto/use-debian-binary

# dpkg -x libjim0debian2_0.73-3_armel.deb ~/work
# dpkg -x libusb-0.1-4_0.1.12-20+nmu1_armel.deb ~/work
# dpkg -x usb-modeswitch-data_20120815-2_all.deb  ~/work
# dpkg -x usb-modeswitch_1.2.3+repack0-1_armel.deb ~/work
# rm -rf ~/work/usr/share/man/
# rm -rf ~/work/usr/share/doc/
# cp -ar ~/work/* atmark-dist/vendors/AtmarkTechno/XXXX/

同様にlsusbもあると便利です

/etc/usb_modeswitch_fs040u.conf

DefaultVendor= 0x1c9e
DefaultProduct= 0x9bfd

TargetVendor=   0x1c9e
TargetProduct= 0x9b02

MessageContent="55534243123456780000000000000606f50402527000000000000000000000"

/etc/udev/rules.d/90-usb.rules
デバイス名を/dev/ttyUSBmodemに固定しています。

KERNEL=="ttyUSB2",SUBSYSTEMS=="usb-serial",DRIVERS=="option1",SYMLINK+="ttyUSBmodem"
# FS040U
ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9bfd", RUN+="/usr/sbin/usb_modeswitch -c /etc/usb_modeswitch_fs040u.conf"
ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9b02", RUN+="/bin/sh -c 'echo 1c9e 9b02 > /sys/bus/usb-serial/drivers/option1/new_id'"

ここからが闘いの記録

FS040UがどうしてもCD-ROMとして認識されてしまう。
lsusbすると、1c9e:9bfd

linuxのソースから、モデムの時はProductが9b02になることを確認
https://lore.kernel.org/patchwork/patch/883889/

CD-ROMの場合は9bfdなので、これを変換できればOK

usb-modeswitch-dataにヒントになるものがないか探す。
https://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20191128.tar.bz2

解凍後のusb_modeswitch.dの中に変換データがあるので、'1c9e:9bfd'に近いものを探す。
1c9e:9bfeが存在!
中身を見ると、# XS Stick W100 (Omega)となっており、同じOmegaなので期待が持てる
TargetProductも9b01と近い

このMessageContentをそのまま使い、
usb_modeswitch_fs040u.confを作成

DefaultVendor= 0x1c9e
DefaultProduct= 0x9bfd

TargetVendor=   0x1c9e
TargetProduct= 0x9b02

MessageContent="55534243123456780000000000000606f50402527000000000000000000000"

これを/etcにいれて

# usb_modeswitch -c /etc/usb_modeswitch_fs040u.conf
# echo 1c9e 9b02 > /sys/bus/usb-serial/drivers/option1/new_id

をすると、USBモデムとして認識された(ttyUSB0~4)が出現

次にUSBを認識した際に自動で行うようにする(udevの設定)

これをudev/rules.d/90-usb.ruleとして保存

KERNEL=="ttyUSB2",SUBSYSTEMS=="usb-serial",DRIVERS=="option1",SYMLINK+="ttyUSBmodem"
# FS040U
ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9bfd", RUN+="/usr/sbin/usb_modeswitch -c /etc/usb_modeswitch_fs040u.conf"
ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9b02", RUN+="/bin/sh -c 'echo 1c9e 9b02 > /sys/bus/usb-serial/drivers/option1/new_id'"

これで挿せばモデムとして使える状態になった

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?