emobile D12HW を FreeBSD 7.1 Rで使う

たけおか

初出: 2008/MAY/01


イーモバイルのUSB接続の端末D12HWを FreeBSD 7.1R で使う。
このD12HWは、モデムの他に、CDに見えるROMと、 MicroSDカードをUSBメモリに見せるインターフェースの3つが一つになっている。
普通に、FreeBSD7.1に刺すと、 CDROMは見えるが、モデムが見えないという悲しい状態に…
しかし、すでに先人が、似たような機種で、問題を解決してくれている。

isherの日記 [FreeBSD]FreeBSD7.0でemobile(D02HW)を使う
MavEtJu's Distorted View of the World; FreeBSD and the Huawei E220 USB G3 Modem
上のページを見るだけで、バージョンが近いFreeBSDなら、普通、うまく行く。

解決法は、 端的に言うと、CDROM(umass)を、カーネル・ローダブル・モジュールにしておき、 先にモデムを見つけさせるということ。

一応、D12HWのデバイスのidを調べたら、他機種(D02HW)と同じ 0x1003 。 なんという手抜き!
形とモデムの性能は違えど、ソフトウェアは同じでいいという判断か。
一つの、手抜きと賢さを見た。いさぎ良くて素敵だぞ > emobile



わたくしの使用機材

具体的なやりかた
  1. configファイル(/usr/src/sys/i386/conf/GYOPO)をいじって、 umassを、カーネルから外す。
    具体的には、umass をコメントアウトするだけ。
  2. /usr/src/sys/dev/usb/ubsa.cに追加。
    
    *** ubsa.c.org	Tue Nov 25 11:59:29 2008
    --- ubsa.c	Sat May  2 23:48:23 2009
    ***************
    *** 236,241 ****
    --- 236,243 ----
      	{ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GPLUS },
      	/* Huawei Mobile */
      	{ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE },
    + 	/* Huawei E220 G3 Modem */ /*take@takeoka.org */
    + 	{ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E220 },
      	/* Sierra Wireless LENOVO UMTS card */
      	{ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8755_3 },
      	/* Qualcomm, Inc. ZTE CDMA */
     
    ubsa.c diff
    ubsa.cファイル全体


  3. /home/ncvs/src/sys/dev/usb/usbdevs に追加。
    先に述べたように、D12HWもデバイスのidが 0x1003なので、逆らわず、 先人と同じ「HUAWEI E220」というデバイス定義のまま使う。
    
    *** usbdevs.org	Tue Nov 25 11:59:29 2008
    --- usbdevs	Sat May  2 23:46:22 2009
    ***************
    *** 1403,1408 ****
    --- 1403,1409 ----
    
      /* HUAWEI products */
      product HUAWEI MOBILE		0x1001	Huawei Mobile
    + product HUAWEI E220		0x1003	Huawei E220 G3 Modem
      
      /* HUAWEI 3com products */
      product HUAWEI3COM WUB320G	0x0009	Aolynk WUB320g
     
    usbdevs diff
    usbdevsファイル全体


  4. カーネルのmakeを行う。
    
    # config GYOPO
     
    して、
    
    # cd ../compile/GYOPO/
    # make cleandepend && make depend
    # make
      (コンパイル)
    # make install
     
  5. カーネル・モジュールのロードの指定の追加。
    /boot/loader.confに以下を追加。
    
    ubsa_load="YES"
    umass_load="YES"
    umodem_load="YES"
     
  6. 新しいカーネルでリブート。

新しいカーネルが起動したら、 D12HWを刺してみる。

今回の場合、恥ずかしながら、一回目は、認識に失敗する。
一度、D12HWを抜いて、再度、差し込む。すると、umodemとして認識される。
/dev/cuaU0ができる。


モデムの最初の確認

モデムが動いているかどうかは、やはりモデムと対話するのが一番。
モデムと対話するにはtipかcuコマンドを使う。
昔BSD人間としては、圧倒的にtipを使用する。
(cuは、SystemV由来のコマンドなのだ。tipもAT&T UNIX由来だが、古さが違う)

/etc/remoteに、次の一行を加える。
cuau0|com8:dv=/dev/cuaU0:br#115200:pa=none:
 
そして、shellで、rootになり、
# tip cuau0
 
とやると、モデムと対話できる。
接続されても何も表示されない。表示されていないところで、
at「リターン」
 
と打つと、
OK
 
とプロンプトが返る。
セッション全体は以下
# tip cuau0
connected
t
OK
at
OK
ati
Manufacturer: huawei
Model: D12HW
Revision: 11.315.11.00.00
IMEI: 359015020799354
+GCAP: +CGSM,+DS,+ES

OK
[EOT]
#
 
一番最初の「a」のエコーバックが無いのは、モデムの単純なバグだろう。
(蛇足: tip を終わるには、空で「リターン」を叩いて、その直後に「~.」と打鍵。 rlogin, sshと同じシーケンス)

余談だが、/etc/remoteには、電話番号を書いたりするので、それが読めないように、 特権ユーザしかアクセスできないようになっている。
よって、現在は、tipは事実上 root しか使用できない。
これは、馬鹿げた話だ。
仕方が無いので、わたくしは、普段 chmod 4555 tip として、tipをsetuidしている (ユーザは、当然root)。
今時の若い人には怒られるのかも知れないが、tipのセキュリティ・ホールというのも あんまり想像できないので、まぁ、これでいいでしょ。僕、昔人間だし。




ppp.confの設定

/etc/ppp/ppp.confにエントリを追加する。
先人のをほぼそのままパクる。

emobile:
 set device /dev/cuaU0
 set speed 115200
 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \
           \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT"
 set timeout 180                        # 3 minute idle timer (the default)
 set phone "*99***1#"
 set authname "em"
 set authkey "em"

 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
 delete ALL
 add default HISADDR                    # Add a (sticky) default route
 enable dns                             # request DNS info (for resolv.conf)
 
ppp.confファイル全体

そして、

# ppp -background emobile
 
として使う。
pppは、rootで使うのでいいでしょう。
(考え方はいろいろあるが…全ユーザにコネクションを提供するので)



ifconfig、netstatでみると…

% ifconfig
lo0: flags=8049 metric 0 mtu 16384
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
	inet6 ::1 prefixlen 128 
	inet 127.0.0.1 netmask 0xff000000 
tun0: flags=8051 metric 0 mtu 1500
	inet 114.51.144.176 --> 10.0.0.2 netmask 0xffffff00 
	Opened by PID 798
 

% netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            10.0.0.2           UGS         0        6   tun0
10.0.0.2           114.51.144.176     UGH         1        0   tun0
127.0.0.1          127.0.0.1          UH          0        0    lo0

Internet6:
Destination                       Gateway                       Flags      Netif Expire
::1                               ::1                           UHL         lo0
fe80::%lo0/64                     fe80::1%lo0                   U           lo0
fe80::1%lo0                       link#1                        UHL         lo0
ff01:1::/32                       fe80::1%lo0                   UC          lo0
ff01:2::/32                       link#2                        UGC        tun0
ff02::%lo0/32                     fe80::1%lo0                   UC          lo0
 

% ping www.freebsd.org
PING www.freebsd.org (69.147.83.33): 56 data bytes
64 bytes from 69.147.83.33: icmp_seq=0 ttl=50 time=499.686 ms
64 bytes from 69.147.83.33: icmp_seq=1 ttl=50 time=408.122 ms
64 bytes from 69.147.83.33: icmp_seq=2 ttl=50 time=447.127 ms
^C
--- www.freebsd.org ping statistics ---
4 packets transmitted, 3 packets received, 25.0% packet loss
round-trip min/avg/max/stddev = 408.122/451.645/499.686/37.517 ms
% 
 

たけおかのホームページ