2010年7月28日水曜日

Fonera 2202でWillcom/Emobile接続 その3  PPP設定

 

PPP設定の各ファイルについて記載します。

1. /etc/config/network

/etc/config/network - 下記のPPP設定をファイルの最後に追加します。device, speed, username, password, connectcmdは、hotplug in処理の際に該当するUSB modemの設定情報から書き換えられます。

config 'interface' 'ppp'
    option 'ifname' 'wan'
    option 'proto' 'ppp'
    option 'mtu' '1500'
    option 'linkname' 'wan'
    option 'ipparam' 'wan'
    option 'device' '/dev/ttyUSB0' 
    option 'speed' '921600'
    option 'username' 'em'
    option 'password' 'em'
    option 'connectcmd' '/tmp/chat_dialer -s -v -T*99#'

    option 'attached' '0'

config ‘interface’ ‘ppp’: PPP接続用のセクションです。

ifname: pppdに渡すparameterとなります。今回は’wan’固定となります。

proto: Protocol指定となります。今回は’ppp’固定となります。

mtu: 1500固定です。

linkname: pppdに渡すlink nameです。今回は’wan’固定となります。

ipparam: ‘wan’固定となります。

device: ppp通信用のdevice file nameとなります。D02HW, H12HWを接続すると制御用ポートの /dev/ttyUSB1 も作成されます。3GUMTSでは /dev/ttyUSB1も利用しますが、ppp dialup接続では /dev/ttyUSB0 のみの利用となります。

speed: 回線のinterface速度です。USB dialup modemのhotplug in処理中にttyusbから、コピーされます。

username: ppp接続アカウント名です。Emobileの場合には固定の’em’となります。Willcomの場合には、個別のアカウントとなります。USB dialup modemのhotplug in処理中にttyusbから、コピーされます。

password: ppp接続パスワードです。Emobileの場合には固定の’em’となります。Willcomの場合には、個別のアカウントとなります。USB dialup modemのhotplug in処理中にttyusbから、コピーされます。

connectcmd: chat scriptのコマンドラインとなります。USB dialup modemのhotplug in処理中にttyusbから、コピーされます。同じく /tmp/chat_dailerもhotplug in処理中に作成されます。

attached: D02HW, H12HWのような3GUMTS対応のmodemを利用した場合に、/dev/ttyUSB0と/dev/ttyUSB1の2回 hotplug in処理が起動されるためttyUSB0の処理中に設定しれた値がttyUSB1の処理で上書きされるのを防ぐためのflagです。この値が 1 であると、ttyUSB0のhotplug in 処理が完了したことを示します。

 

2. /etc/config/ttyusb

/etc/config/ttyusb - 新規ファイル追加のサンプル。WSIM接続のusername, passwordはdummyの’*’としています。

config 'ttyusb' '12D11003'
    option 'vendor' 'Huawei'
    option 'driver' 'option'
    option 'modemtype' 'dialup'
    option 'username' 'em'
    option 'password' 'em'
    option 'connectcmd' '/tmp/chat_dialer -s -v -T*99#'
    option 'speed' '921600'
    option 'atinit' 'AT'
    option 'vidpid' '12D11003'
    option 'product' 'D02HW(E220)'

config 'ttyusb' '12D11008'
    option 'vendor' 'Huawei'
    option 'product' 'H12HW'
    option 'driver' 'option'
    option 'modemtype' 'dialup'
    option 'username' 'em'
    option 'password' 'em'
    option 'connectcmd' '/tmp/chat_dialer -s -v -T*99#'
    option 'speed' '921600'
    option 'atinit' 'AT'
    option 'vidpid' '12D11008'

config 'ttyusb' '04BB0940'
    option 'product' 'IO Data WSIM'
    option 'driver' 'pl2303'
    option 'modemtype' 'dialup'
    option 'username' '********'
    option 'password' '********'
    option 'connectcmd' '/tmp/chat_dialer -s -v -T0570572744##64'
    option 'speed' '115200'
    option 'atinit' 'AT&D2&C1&K3S0=0'
    option 'vidpid' '04BB0940'
    option 'vendor' 'Willcom INC'

config ‘ttyusb’ VIDPID: VIDPIDによって識別されるUSB dialup modemの設定情報セクションです。

vendor: ベンダー名

product: 製品名

vidpid: dialup modemのvendor idとproduct idを連結した16進8桁の値となります。dailup modemの識別のためにセクション名とこちらの2重に保持しています。

driver: device driverの種類を設定します。IO Data WSIMの場合にはpl2303, Huawei (Emobile)についてはoptionです。他にusbserialも選択できます。この項目は、以前のimplementationにおいて利用していました。現在は利用していません。

modemtype: モデムタイプ。’dialup’ or ‘3gumts’。’dialup’のときには今回のdialup処理とし、3GUMTS処理が起動されないようにします。’3gumts’の場合には、その逆となります。

username: PPP接続のアカウント名です。USB dialup modemのhotplug in処理中、ttyusbの該当情報が/etc/config/networkの’interface’ ‘ppp’セクションのusernameにコピーされます。

password: PPP接続のパスワードです。USB dialup modemのhotplug in処理中、ttyusbの該当情報が/etc/config/networkの’interface’ ‘ppp’セクションのpasswordにコピーされます。

connectcmd: PPP接続のchat script起動用コマンドラインです。-T以降の電話番号のみ変更するようにしてください。Emobileの場合は、-T*99#になります。USB dialup modemのhotplug in処理中、ttyusbの該当情報が/etc/config/networkの’interface’ ‘ppp’セクションのconnectcmdにコピーされます。

speed: PPP接続のインターフェース速度(bps)です。IO Data WSIMの場合は 115200(bps)が上限のようです。Huawei (Emobile)のH12HWの場合には921600(bps)

atinit: USB dialup modemの初期化コマンドです。空でも差し支えはないでしょう。/tmp/chat_dialerの中で “ATZ” は発行しています。3GUMTSの場合は、ATZとATHを発行しているようです。(/App/umtsd.lua)

 

3. /etc/ppp/options

/etc/ppp/options - パラメーターの修正(bold部分)

#debug
#logfile /dev/null
noaccomp
nopcomp
#nocrtscts
crtscts
lock
maxfail 0
lcp-echo-failure 5
lcp-echo-interval 3

Hardware flow controlを有効にするために nocrtsctsをコメントにします。そしてctsctsを追加します。また、lcp-echo-intervalの値を3に変更します。オリジナルの1では、IO Data WSIM接続の場合に LCP Timeoutが発生することがありました。

 

4. /etc/hotplug.d/ttyusb/10-umts

/etc/hotplug.d/ttyusb/10-umts - 修正 (ファイルの先頭に追加)

modemtype=`uci get ttyusb.${VIDPID}.modemtype`
if [ "${modemtype}" != "3gumts" ] ; then
  exit 1
fi

modemtypeが”3gumts”ではないデバイスが装着されたときに3GUMTSが起動されるのを防ぎます。

 

5. /etc/hotplug.d/ttyusb/11-dialup

/etc/hotplug.d/ttyusb/11-dialup - 新規ファイルの追加

DIALER="/tmp/chat_dialer"

modemtype=`uci get ttyusb.${VIDPID}.modemtype`

if [ "${modemtype}" != "dialup" ] ; then
  exit 1
fi

[ "$ACTION" == "add" -a "$SUBSYSTEM" == "ttyusb" ] && {

attached=`uci get network.ppp.attached`
if [ "${attached}" != "1" ] ; then
  speed=`uci get ttyusb.${VIDPID}.speed`
  username=`uci get ttyusb.${VIDPID}.username`
  password=`uci get ttyusb.${VIDPID}.password`
  connectcmd=`uci get ttyusb.${VIDPID}.connectcmd`
  atinit=`uci get ttyusb.${VIDPID}.atinit`

# Write to /etc/config/network ppp section
  uci set network.ppp.speed="${speed}"
  uci set network.ppp.username="${username}"
  uci set network.ppp.password="${password}"
  uci set network.ppp.connectcmd="${connectcmd}"
  uci set network.ppp.device="/dev/""${NODE}"
  uci commit network

echo "\
#!/usr/sbin/chat -f
TIMEOUT 10
ABORT   '\nNO ANSWER\r'
ABORT   '\nNO CARRIER\r'
ABORT   '\nNO DIALTONE\r'
ABORT   '\nBUSY\r'
''      ATZ
OK      AT
OK      ${atinit}
TIMEOUT 30
OK      ATDT\T
CONNECT \d\d" > ${DIALER}

    chmod +x ${DIALER}
uci set network.ppp.attached=1
uci commit network

    ifup ppp
fi
}

[ "$ACTION" == "remove" -a "$SUBSYSTEM" == "ttyusb" ] && {
uci set network.ppp.attached=0
uci commit network
}

modemtypeが”dialup”ではないデバイスが装着されたときにdial up接続が起動されるのを防ぎます。

Hotplug in 処理(環境変数 ACTIONの値が”add”)のときには、

  • ‘attached’ flagが1でない場合、すなわち WSIM接続時、Huawei (Emobile)接続で /dev/ttyUSB0の処理のときには、処理を進めます。 ‘attached’が1の場合には、Huawei(Emboile)接続で /dev/ttyUSB1(Control port)の処理でのすで、以下の処理はttyUSB0 (Data port)と重複するため行いません。
  • VIDPIDが環境変数として引き渡されるので、対応する設定情報を /etc/config/ttyusbより取得し、/etc/config/networkの’interface’ ‘ppp’セクションにコピーします。そして、最後に ‘attached’ を1にします。

unplug処理(環境変数 ACTIONの値が”remove”)のときには、’attached’を0として、次回のhotplug in処理用に初期化します。

 

6. /etc/hotplug.d/usb/10-umts

/etc/hotplug.d/usb/10-umts - 追加(ファイルの先頭に追加します)

fillzero() {
  id=$1
  len=`expr 4 - ${#id}`

  while [ ${len} -ge 1 ];
  do
    id="0"$id
    len=`expr $len - 1`
  done

  echo ${id}
}

# ${PRODUCT} contains vendor and product information, like 04bb/0940/1.
VID=`echo ${PRODUCT} | cut -f1 -d'/'`
PID=`echo ${PRODUCT} | cut -f2 -d'/'`
VID=`fillzero ${VID} | tr '[a-z]' '[A-Z]'`
PID=`fillzero ${PID} | tr '[a-z]' '[A-Z]'`
VIDPID=$VID$PID

# check the modemtype to prevent this script working on 3G/UMTS.
modemtype=`uci get ttyusb.${VIDPID}.modemtype`
if [ "${modemtype}" != "3gumts" ] ; then
  exit 1
fi

modemtypeが”3gumts”ではないデバイスが装着されたときに3GUMTSが起動されるのを防ぎます。

 

7. /etc/hotplug.d/usb/11-dialup

/etc/hotplug.d/usb/11-dialup - 新規ファイルの追加

DIALER="/tmp/chat_dialer"

fillzero() {
  id=$1
  len=`expr 4 - ${#id}`

  while [ ${len} -ge 1 ];
  do
    id="0"$id
    len=`expr $len - 1`
  done

echo ${id}
}

# ${PRODUCT} contains vendor and product information, like 04bb/0940/1.
VID=`echo ${PRODUCT} | cut -f1 -d'/'`
PID=`echo ${PRODUCT} | cut -f2 -d'/'`
VID=`fillzero ${VID} | tr '[a-z]' '[A-Z]'`
PID=`fillzero ${PID} | tr '[a-z]' '[A-Z]'`
VIDPID=$VID$PID

# check the modemtype to prevent this script working on 3G/UMTS.
modemtype=`uci get ttyusb.${VIDPID}.modemtype`
if [ "${modemtype}" != "dialup" ] ; then
  exit 1
fi

[ "$ACTION" == "add" -a "$HOTPLUG_TYPE" == "usb" ] && {
:
}

[ "$ACTION" == "remove" -a "$HOTPLUG_TYPE" == "usb" ] && {
        ifdown ppp
        # Remote dailup chat script
        rm -f ${DIALER}
        # Reset ppp attached flag
        uci set network.ppp.attached=0
        uci commit network
}

modemtypeが”dialup”ではないデバイスが装着されたときにdialup接続が起動されるのを防ぎます。そして、unplug処理(環境変数ACTIONの値が”remove”のときにはppp の接続断、chat script (/tmp/chat_dialer)の削除、’attached’を0にします(重複していますが)。

 

8. /lib/network/ppp.sh

/lib/network/ppp.sh - 修正(太字部分)

start_pppd() {
        local cfg="$1"; shift

        # make sure only one pppd process is started
        lock "/var/lock/ppp-${cfg}"
        local pid="$(head -n1 /var/run/ppp-${cfg}.pid 2>/dev/null)"
        [ -d "/proc/$pid" ] && grep pppd "/proc/$pid/cmdline" 2>/dev/null >/dev/null && {
                lock -u "/var/lock/ppp-${cfg}"
                return 0
        }

        # Workaround: sometimes hotplug2 doesn't deliver the hotplug event for creating
        # /dev/ppp fast enough to be used here
        [ -e /dev/ppp ] || mknod /dev/ppp c 108 0

        config_get device "$cfg" device
        config_get unit "$cfg" unit
        config_get username "$cfg" username
        config_get password "$cfg" password
        config_get keepalive "$cfg" keepalive

        config_get connect "$cfg" connect
        config_get disconnect "$cfg" disconnect
        config_get pppd_options "$cfg" pppd_options
        config_get_bool defaultroute "$cfg" defaultroute 1
# -- Start
# 2010/06/14
# Added overwriting "connect" paramter.
# Added linkname and ipparam
        config_get connect "$cfg" connectcmd
        config_get linkname "$cfg" linkname
        config_get ipparam "$cfg" ipparam
# – End

        [ "$defaultroute" -eq 1 ] && defaultroute="defaultroute replacedefaultroute" || de

        interval="${keepalive##*[, ]}"
        [ "$interval" != "$keepalive" ] || interval=5

        config_get_bool peerdns "$cfg" peerdns 1
        [ "$peerdns" -eq 1 ] && peerdns="usepeerdns" || peerdns=""

        config_get demand "$cfg" demand
        [ -n "$demand" ] && echo "nameserver 1.1.1.1" > /tmp/resolv.conf.auto

        config_get_bool ipv6 "$cfg" ipv6 0
        [ "$ipv6" -eq 1 ] && ipv6="+ipv6" || ipv6=""

# 2010/06/14
        /usr/sbin/pppd "$@" \
                ${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[,
                ${demand:+precompiled-active-filter /etc/ppp/filter demand idle }${demand:
                $peerdns \
                $defaultroute \
                ${username:+user "$username" password "$password"} \
                unit "$unit" \
                linkname "$linkname" \
                ipparam "$ipparam" \
                ${connect:+connect "$connect"} \
                ${disconnect:+disconnect "$disconnect"} \
                ${ipv6} \
                ${pppd_options}

        lock -u "/var/lock/ppp-${cfg}"
}

setup_interface_ppp() {
        local iface="$1"
        local config="$2"

        config_get device "$config" device
# 2010/06/14
        config_get speed "$config" speed

        config_get mtu "$cfg" mtu
        mtu=${mtu:-1492}
        start_pppd "$config" \
                mtu $mtu mru $mtu \
                "$device" "$speed"

  • connectcmd, linkname, ipparamの値を /etc/config/networkの’interface’ ‘ppp’より取得します。connectcmdはconnectを上書きします。
  • linknameとipparamをpppdの引数として追加します。
  • speedの値を取り出し、同じく引数として追加します。

 

9. /lib/uci/schema/defaults/network

/lib/uci/schema/defaults/network - 追加(ファイルの最後)

config variable
        option name     'connectcmd'
        option title    'Connect command"
        option section  'network.interface'
        option datatype 'string'
        option minlength 0
        option maxlength 64
        list   depends  'proto=ppp'

config variable
        option name     'linkname'
        option title    'pppd option linkname"
        option section  'network.interface'
        option datatype 'string'
        option minlength 0
        option maxlength 64
        list   depends  'proto=ppp'

config variable
        option name     'ipparam'
        option title    'pppd option ipparam"
        option section  'network.interface'
        option datatype 'string'
        option minlength 0
        option maxlength 64
        list   depends  'proto=ppp'

config variable
        option name 'speed'
        option title 'Connection bit rate'
        option section 'network.interface'
        option datatype uint

config variable
        option name 'attached'
        opiton title 'Dialup 1st data device attached'
        option datatype 'boolean'

/etc/config/networkに追加した値の定義をします。

 

10. /lib/uci/schema/defaults/ttyusb

/lib/uci/schema/defaults/ttyusb - 新規ファイル

package ttyusb

config section
        option name     'ttyusb'
        option package  'ttyusb'
        option unique   true

config variable
        option name     'driver'
        option section  'ttyusb.ttyusb'
        option datatype 'string'
        option minlength 0
        option maxlength 32

config variable
        option name     'vendor'
        option section  'ttyusb.ttyusb'
        option datatype 'string'
        option minlength 0
        option maxlength 32

config variable
        option name     'product'
        option section  'ttyusb.ttyusb'
        option datatype 'string'
        option minlength 0
        option maxlength 32

config variable
        option name     'modemtype'
        option section  'ttyusb.ttyusb'
        option datatype 'string'
        option minlength 0
        option maxlength 32

config variable
        option name     'device'
        option section  'ttyusb.ttyusb'
        option datatype 'string'
        option minlength 0
        option maxlength 32

config variable
        option name     'connectcmd'
        option title    'Connect command'
        option section  'ttyusb.ttyusb'
        option datatype 'string'
        option minlength 0
        option maxlength 64

config variable
        option name 'speed'
        option title 'Connection bit rate'
        option section 'ttyusb.ttyusb'
        option datatype uint

config variable
        option name 'atinit'
        option title 'AT INIT command line'
        opiton section 'ttyusb.ttyusb'
        option datatype 'string'
        option minlength 0
        opiton maxlength 64

/etc/config/ttyusbの値の定義をします。

 

更新履歴

  • 2010/07/28: Initial release

2010年7月23日金曜日

Fonera 2202でWillcom/Emobile PPP接続 その2 (building kernel/firmware)

 

以下に最新開発環境の取得とUSB driverの変更点について記載します。

 

1. 開発環境の準備

Kernel / Firmware build環境はCent OS 5.5にて行いました。

参考リンクの「Sources and toolchain to build fon-ng and application」の記載がすべてなのですが、必要とするpackageについては Cent OS用に読替える必要があります。yumによるpackage適用となります。このときtftp server packageも一緒にインストールしておきます。

 

rootユーザーにてログインし、Yumから必要なpackageをインストールします。

# yum install binutils cpp gcc kernel-headers make zlib-devel ncurses-devel gawk bison flex unzip bzip2 autoconf intltool python subversion

次にPerlのmoduleをロードします。

# cpan

…  最初のCPANの機動の場合には、質問がされます。基本敵にはEnterでOKです。ダウンロード先は国内のサイトを選択します。CPANのpromptが表示れさたら、Diget, Digest::CRC, YAMLをインストールします。

CPAN> install Digest

CPAN> install Digest::CRC

CPAN> install YAML

CPAN> exit

 

Cent OSには一般ユーザーにてログインし、最新の開発環境をdownloadします。
% svn co http://svn.fonosfera.org/fon-ng/trunk

環境の初期化処理を行います。
% cd trunk
% sh ./install.sh

 

2. WSIM / H12HW用の修正

Cent OSのコンソールから trunk/openwrt/build_dir/linux-fonera2_developer/linux-2.6.26.2/drivers/usb/serial に移動します。bold字体の箇所が今回の追加です。

pl2303.h: WSIMのproduct IDを追加します。

#define IODATA_VENDOR_ID        0x04bb
#define IODATA_PRODUCT_ID       0x0a03
#define IODATA_PRODUCT_ID_RSAQ5 0x0a0e
#define IODATA_PRODUCT_ID_WSIM  0x0940

 

pl2303.c: IODATAのvendor IDとWSIMのproduct IDの組をtableに追加します。

{ USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) },
{ USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) },
{ USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_WSIM) },

 

option.c: H12HWのproduct IDを追加します。D02HWはE220として記載されています。

#define HUAWEI_VENDOR_ID                        0x12D1
#define HUAWEI_PRODUCT_E600                     0x1001
#define HUAWEI_PRODUCT_E220                     0x1003
#define HUAWEI_PRODUCT_E220BIS                  0x1004
#define HUAWEI_PRODUCT_H12HW                    0x1008

HUAWEIのvendor IDとH12HWのProduct IDの組をtableに追加します。

{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_H12HW, 0xff, 0xff, 0xff) },

 

3. kernel/firmwareのbuildとFonera 2202 firmwareの更新

「Sources and toolchain to build fon-ng and application」の記載に沿って、build作業を実施します。

% cd openwrt
% make menuconfig

ここで、Fon 2.0g (2202)用の設定となっているか、developer modeとなっているかの確認とpl2303の追加を行います。

 
f-1
Target Systemとdeveloper modeであるかどうかの確認をします。この場合、上図の一行目と二行目がそれぞれLa Fonera 2.0, developerと表示されております。値が異なる場合には、Enterキーを押して、sub menuに入り、設定を変更します。


f4   
pl2303 追加のために “Kernel modules”を選択、Enterキーを押します。

f5  
USB Supportを選択、Enterキーを押します。

f6 
kmod-usb-serial-pl2303を選択し、spaceキーを2回押してbuilt-in とします。ESCでtopに戻ります。

f7
Yesを選択して、configurationの更新をします。

 

kernel/firmwareのbuildを実施します。
% cd trunk/openwrt
% make V=99

 

Firmware(trunk/openwrt/bin/openwrt-fonera2.image)をtftp serverに置きます。ここでは Cent OS にtftp server packageをインストールしました。

Fonera 2202は以下のように接続します。

  • Fonera 2202のInternet側のコネクタ(白)をCent OSと同じLANに接続します。
  • Fonera 2202の筐体を開け、シリアルケーブル(カモン携帯電話用ケーブルの改造品、TxDのためにVCC pull upが必要)を接続します。

「Firmware update instructions」に従って、作成したfirmwareに入れ替えます。この作業については、更新に失敗するとFoneraが起動しなくなることもあります。もとのfirmwareに戻すには、Fonのダウンロードサイト(http://download.fonosfera.org/)から該当firmwareをdownloadし、同様の手順にて戻します。ダウンロードサイトに用意されているFirmwareは以下のようです。

 

Code name Version Desctiptions
Gari 2.3.6.0 Fon 2303用firmwareが用意されている。
Elan 2.3.0.0 Fon 2303用firmwareが用意されている。
Cheeky 2.2.6.0 Fon 2303用firmwareが用意されている。
Flipper 2.2.5.0 Fon 2202用firmwareが用意されている。
Platero 2.2.4.0 Fon 2202用firmwareが用意されている。
Caterpillar 2.2.3.0 Fon 2202用firmwareが用意されている。
OktoPussy 2.2.2.0 Fon 2202用firmwareが用意されている。
Trantor 2.2.1.0 Fon 2202用firmwareが用意されている。
failsafe N/A Fon 2204用のfailsafe firmwareと思われる。※1

※1 私自身は試したことはありません。

 

Fonera 2202 の接続は以下のようにして行いました。
Fonera 2202:
シリアルピン -- カモンケーブル -- シリアルUSB変換 -- Note PC
  Ethernet(白) – Ethernet HUB ----- Cent OS 5.5 (tftp server)



1. Foneraにシリアル接続したNote PCにて、端末ソフト(e.g. TeraTerm)を起動し、シリアルUSB変換機が設定したCOM port (e.g. COM6)に割り当てる。
2. Fonera 2202を機動。起動後、RedBootから ^Cの入力を促すpromptが表示されたところで、Note PCの端末ソフトから ^C を入力。

 +Ethernet eth0: MAC address **:**:**:**:**:**
IP: 0.0.0.0/255.255.255.0, Gateway: 0.0.0.0
Default server: 0.0.0.0

RedBoot(tm) bootstrap and debug environment [ROMRAM]
OpenWrt certified release, version 1.1 - built 12:40:38, Sep  3 2007

Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

Board: FON 2202
RAM: 0x80000000-0x82000000, [0x80040290-0x80fe1000] available
FLASH: 0xa8000000 - 0xa87f0000, 128 blocks of 0x00010000 bytes each.
== Executing boot script in 3.000 seconds - enter ^C to abort
^C


3. ここでは、Fonera 2202のIP addressを192.168.0.1、tftpserverのIP addressを192.168.0.100と設定します。

RedBoot> ip_address -l 192.168.0.1/24 -h 192.168.0.100

4. tftp serverより、firmwareをダウンロードし、設定を行います。resetで再起動し、新規firmwareが機動します。

RedBoot> load –r –b %{FREEMEMLO} openwrt-fonera2.image

RedBoot> fis delete image

RedBoot> fis create image

RedBoot> reset

 

Firmwareが更新されますと、それまでの設定がクリアされてしまいます。Foneraの自動更新スクリプトでは、/etc/以下のファイルの一部を保存して、更新後に戻してしいるようです。

pl2303をbuiltin したkernel/firmwareが起動すると以下のメッセージが記録されます。

# dmesg

usbserial: USB Serial support registered for pl2303
usbcore: registered new interface driver pl2303
pl2303: Prolific PL2303 USB to serial adaptor driver

USB Hub経由で WSIMをFonera 2202に接続したときのメッセージは以下のようになります。

WSIM接続の構成は以下のようになります。

Fonera 2202:
USB port – USB 2.0 Hub – IO Data WSIM – NetIndex W-SIM

# dmesg

pl2303 1-1.1:1.0: pl2303 converter detected
usb 1-1.1: pl2303 converter now attached to ttyUSB0
ttyusb -> 1 ttyUSB0 pl2303 04BB0940

 

参考リンク

変更履歴

  • 2010/07/29: yum installとcpanについて記載を追加

2010年7月21日水曜日

Fonera 2202でWillcom/Emobile PPP接続  その1

1. はじめに

Fonera 2202にて、USB接続modemを利用したdialup PPP接続と設定編集のGUI(Lua/Luci)を作成してみました。現在テスト中ですが、なんとか動いているようです。USB接続のdialup modemの情報とdialup PPPの設定(account, 電話番号等)を登録しておくと、該当のUSB dialup modemが接続された際にhotplug inのキックからPPPで接続できるようになります。IO Data WSIM(W-SIM)とemobile H12HWにて接続テストをしています。emobileは当初D02HWにて行っていましたが、突然赤LEDの点灯状態(圏外表示)のままとなり、壊れてしまいました。そのため、H12HWにてテストを実施しています。D02HWでも問題なく動作するものと思われます。

2. 各設定の概要

2-1. Kernel/Firmwareの構築

WSIMとH12HWの認識ために、USB serial driverのpl2303/optionのソースに設定を追加してkernel/firmwareをbuildします。


(1) pl2303 driverにIO Data WSIMの設定を追加し、kernel/firmwareに組込ます。

(2) H12HW用のoption driverはkernel/firmwareに組込済みであるため、H12HWの設定のみをoption driverに追加します。

(3) build完了したfirmwareをtftpserver経由でFonera 2202に流し込みます。このときRedbootに入り込むためにFonera 2202にSerial port接続します。

folder file descriptions
drivers/usb/serial pl2303.h WSIMのproduct idを追加
  pl2303.c WSIMのvendor id, product idをid_tableに追加
  option.c H12HWのproduct id
を追加し、vendor id/product idの組をoption_idsに追加。D02HW(E220)は登録されている。
 

 

2-2. PPP接続

USBのhotplug in処理からPPP(pppd)を起動する処理については、日経Linux 2009/09月号「新FONルーターを改造する」の記事を参考にしました。記事と異なる点は以下の通りです。
3GUMTSのdaemon方式と異なり、hotplug in / unplug をベースにしたPPP接続・切断となります。

(1) 複数のUSBモデムを利用できるようにするため、/etc/config/ttyusbにUSB dialup modemの設定ファイルを用意し、USB hostplug in処理 (/etc/hotplug.d/ttyusb/11-dialup)にて、VIDPID (USBモデムのVendor IDとProduct IDを合わせた 16進8桁の値)をキーに /etc/config/ttyusbから/etc/config/networkのppp sectionに接続に必要な値をコピーするようにしました。


(2) pppdを起動する場合に、speed parameterによるInterface speedの指定がないと9600bpsでの接続になってしまうことがあるようです。ttyおよびpppdの初期化処理のソースを見てみましたが、原因の確定ができないためにspeed parameterを指定するようにしました。ちなみにWSIMは115200としました。これ以上のInerface sppedの設定では、WSIMがchat scriptに反応しないようです。/lib/network/ppp.shの修正となります。


(3) pppd接続後のfirewall設定をする必要があります。日経Linuxの記事では /etc/config/firewallにpppの設定を追加していますが、ここでは既存のWAN設定を利用します。そのためpppのlinknameとipparmを”wan”とします。


(4) Fonera 2202では 3GUMTSがimplementされています。emobile D02HWは3GUMTSの設定画面にてカスタム設定を選択し、必要なparamterを 個別設定することで接続できるようになります。ですが、今回hotplug inからPPPの接続を有効してしまうと、dialupと3GUMTS間での /dev/ttyUSB0のportの取り合いとなってしまうため、dialup接続の場合には、3GUMTSの起動を押さえるように/etc/config/ttyusbのmodemtypeを設定しました。この値を’dialup’としたUSB modemについては/etc/hotplug.d/ttyusb/10-umtsを修正して、3GUMTSの処理がキックされないようにしました。modemtypeの値を ‘3gumts’としたものについては、今回のdialup PPPではなく3GUMTSが起動するはずです。/etc/hotplug.d/ttyusb/11-dialupおよび/etc/hotplug.d/usb/11-dialupでは、modemtypeが’dialup’であるものについてのみ処理を行います。


(5) pppのdialup chat script (/tmp/chat_dialup)は、hotplug処理の中で作成します。USB modem のunplugでchat scriptも削除します。


(6) PPPのoption parameter (/etc/ppp/options)のうち hardware flow controlの設定とlcp-echo-intervalの調整が必要なようです。nocrtsctsをコメントにして、crtsctsを追加します。lcp-echo-interval はdefaultの1のままですと、WSIMの場合、頻繁にlcp timeoutが発生します。こちらの値は3程度にしておくと、だいぶLCP timeoutの発生頻度が減ります。

Folder file descriptions
/etc/config network ppp接続情報の追加
  ttyusb 各USB dialup modemの設定情報
/lib/network ppp.sh ppp接続コマンド
/etc/ppp options PPPオプション設定ファイル。crtsctsとlcp-echo-intervalを修正
/etc/hotplug.d ttyusb/10-umts VIDPIDに対応したttyusbのmodemtypeが”3gumts”のときに実行されるようにする。
  ttyusb/11-dialup VIDPIDに対応したttyusbのmodemtypeが”dialup”のときに実行されるようにする。
  usb/10-umts 何もしない。
  usb/11-dialup VIDPIDに対応したttyusbのmodemtypeが”dialup”のときに実行されるようにする。
/tmp/ chat_dialup pppdからchat scriptとして起動される。/etc/hotplug.d/ttyusb/11-dialupで作成される。
/lib/uci/schema/defaults network /etc/config/networkに追加した項目定義
  ttyusb /etc/cnfig/ttyusbに追加した項目の定義
 
2-3. USB dialup modem設定のGUI

今回、もっとも苦労した点です。基本はFoneraのWeb GUIから/etc/config/ttyusbのentry追加・編集・削除です。ですが、luciのMVC modelに不慣れなため、entryの追加・編集の画面がmodelの記述で簡単にできるであろう所をviewで記述してしまうような格好のよろしくないGUIとなっています。画面のスタイルを合わせるためにcssの設定などもmodelが生成した画面のhtmlソースを参考にview内に埋め込んでいます。
他にも 「入力した値のチェックがない」、「削除ボタン押下げ後の確認dialogがない」、「設定内容の表示がない」、「PPP接続状態の表示がない」などの手抜きがあります。


category File descriptions
Controller diaup.lua dialup GUIのメイン。各画面の記載。
View dialup/dialup.htm dialup設定のメイン画面。各設定の編集・削除と新規追加。
  dialup/addentry.htm 設定の新規追加の入力画面。「保存」を押すとmodelのttyregist.luaに処理が移る。
  dialup/edit.htm 設定の編集画面。「保存」を押すと、modelのttyregist.luaに処理が移る。
model cbi/dialup/remove.lua 指定の設定を削除する。
  cbi/dialup/ttyregist.lua 設定を登録する。VIDPIDが変更されたときは、削除・新規登録となる。
i18n dialup.en.lua 英語のメッセージファイル
  dialup.ja.lua 日本語のメッセージファイル

3. 参考資料

 

4. 更新履歴

  • 2010/07/28: 2-2. PPP 接続の表に/lib/uci/schema/defaultsの行を追加