Last-modified: Monday, 26-Apr-2004 23:16:55 JST

筆者の SL-C700 を REX-CFU1 経由で何かとつなぐ話。 まずは REX-CFU1 ドライバとモジュールを ZaurusCfu1_distから入手しないと話が始まりませんよ。

au A1402S と U-Cable type A3 (AS64LX)

履歴

A1402S -USB- SL-C700

はじめに

諸般の事情により au の携帯電話、 Sony Ericsson A1402S (PacketOne 高速パケット通信可能)を購入しました。 SL-C700 と au の端末をつないでインターネット接続する方法としては、 CF 接続型の通信ケーブル サン電子 AS-10Cがあるようですが、 先日某所で探したときは見つからず、その代わりに面白いモノを発見しました。 同じ サン電子の U-Cable type A3 (AS64LX)は、 au の PacketOne と DDI ポケットの Air H" の2種類に対応した USB ケーブル。 しかも MacOS X にも正式に対応しています。 これはいろいろな場面で役立ちそうです。


つなぎ方(暫定版)

筆者の環境は、下記の通り special kernelのちょっと古いバージョン v13e です。 ここに REX-CFU1 ドライバ cfu1-driver_0.0.2-3_arm.ipk と、 モジュール集 usb-modules_0.0.3_arm.ipk をインストールしました。 ただし今回使うモジュールは acm.o です。

% cat /proc/version
Linux version 2.4.18-rmk7-pxa3-embedix-021129 (v13e@tetsu.homelinux.org) (gcc version 2.95.2 19991024 (release)) #7 Sun, 08 Feb 2004 22:48:54 +0900 

次に USB modem 用のデバイスファイル /dev/ttyACM0 を作ります。 ただ作っても再起動すると消えてしまうので、ひと工夫が必要です。 インターネット接続時にいちいち mknod する手もありますが、 ここでは Linux の起動時に mknod するように仕込んでみました。

# mount -o remount,rw /  ← ルートファイルシステムを書き込み可に
# cd /root/etc/rc.d
# cp -p rc.rofilesys rc.rofilesys.orig  ←念のためバックアップ
# vi rc.rofilesys  ← こいつが起動時にいろいろする

rc.rofilesys には下記の 1 行目が 2 カ所あるので探して、 それぞれ下 2 行を追加します。

tar xf /root/.dev_default.tar
# for usb modem
mknod /dev/ttyACM0 c 166 0
(ちなみにこの rc.rofilesys で /tmp の容量の設定しています。 3 カ所の "1m" を "3m" に文字列置換すると 3Mbytes にできます。)

で、再起動すると、 /dev/ttyACM0 ができているハズです。 おもむろに U-Cable がつながった REX-CFU1 を SL-C700 に挿してみます。 そして root にて、モジュール acm をロードします。

# insmod acm
Using /lib/modules/2.4.18-rmk7-pxa3-embedix/kernel/drivers/usb/acm.o

ちなみに REX-CFU1 を CF スロットから抜くときは、 (CF アイコンでの「カード取り出し」は失敗するので) いったん電源を OFF してからカードを抜くようにします。 電源 ON のままカードを抜くと OS ごとフリーズしてしまうことがあります。

ちなみにモジュール一覧はこんな感じ。

# lsmod
Module                  Size  Used by
acm                     5744   0  (unused)
pxa_bi                 21328   0  (unused)
net_fd                 25024   0  (unused)
usbdcore               34544   0  [pxa_bi net_fd]
usbdmonitor             5248   0
sl811_cs                3088   0  (unused)
hc_sl811               13056   0  [sl811_cs]
usbcore                50976   0  [acm hc_sl811]
sharp_mmcsd_m          26208   3                     

ちなみに dmesg にはこんな記録が残ります。

# dmesg
(省略)
cf_usb0: index 0x04: Vcc 3.3, irq 39, io 0xf6000000-0xf6000007
usb.c: new USB bus registered, assigned bus number 1
hc_sl811.c: USB SL811 at f6000000,f6000001, IRQ 39
hub.c: USB hub found
hub.c: 1 port detected
hub.c: USB new device connect on bus1/1, assigned device number 2
ttyACM0: USB ACM device

次はダイアルアップ接続の設定です。赤外線の設定をダマして使います。

設定メニューの「ネットワーク設定」をクリックします。 「ダイアルアップ接続」を「新規作成」し、 「PPPダイアルアップ接続[赤外線]」を選択します。 編集ダイアログで下記の設定をします。

接続先タブ
    名前       au-usb ← 任意の名前
    ユーザー名 (ダイアルアップ用ユーザ名)
    パスワード ********
    電話番号   9999#05 ← U-Cable による高速パケット通信の場合
モデムタブ
    初期化コマンド  ATZ ← とりあえずこれだけに

上記の設定はディレクトリ /etc/ppp/peers/ に ファイル名 IRDAnnnnnnnnnn で保存されます( n は数字)。 root になって、こいつを探してエディタで開き、 デバイスファイル名 /dev/ttyACM0 を 2 行目として挿入します。 ちなみに「ネットワーク設定」で設定を再編集すると、 ここでの変更が上書きされてしまい消えてしまいますので、 デバイスファイル名の挿入をやり直してください。

# cd /etc/ppp/peers

# vi IRDAnnnnnnnnnn
noipdefault
/dev/ttyACM0  ←これを追加!!
115200
connect '/usr/sbin/chat -s -v -t 60 ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT "BUSY" "" "ATZ" OK "ATDT9999#05" CONNECT "¥¥d¥¥d"'
crtscts                                              
(以下省略)

これで、いわゆる地球アイコンのクリックにより、 この接続先を選んで「接続」することができるようになります。 パチパチパチ!!

接続を切ってからの再接続に失敗するようですが、 接続を切ったあと、電源 OFF、電源 ON をするだけで、 再接続ができるようになります。 当面の回避策ということで。

ちなみに、 下記のように直接 pppd を叩いて PPP 接続することもできるようです。 私は接続の切り方までは知りません (^^;

# pppd call IRDAnnnnnnnnnn

もっと楽な方法を募集中

モジュールの自動ロード&デバイスファイル自動生成とか、 ダイアルアップ接続設定の自動書き換えとか、 電源 OFF/ON しなくても再接続できる方法とか、 間違いとか勘違いとか、なんでも教えてください。

usbmgr を使う方法

(2004-04-26 追記)

REX-CFU1 ドライバの総本山、 humorum さんのページに動作報告をしたところ、 moro さんより、 LinuxZaurus 向け usbmgr を使った、 よりスマートな方法が公開されました。 ここに引用させていただきます。

  私はA5404Sを使っていますが、
  高速パケット通信はどこでも使えて高速なのですが、思ったよりパケット代がかかります。
  その後は usbmgrを利用してときどき使っています。

  
  /etc/usbmgr/usbmgr.confに追加
  # SUNTAC U-Cable Type A3 PS64LX
  vendor 0x5db product 0xb script ttyACM.sh module acm


  /etc/usbmgr/ttyACM.shを作成
  # /dev/ttyACM0 mknod
  case $ACTION in
  add)
       if [ ! -f /dev/ttyACM0 ]; then
           mknod /dev/ttyACM0 c 166 0
       fi
       ;;
  remove)
       ;;
  esac

参考文献