この章は Stanislav Sokolov さんの提供によります。
この章では、Linux マシンと PocketPC デバイスを接続する方法について扱います。 前の章「Linux と WinCE を接続する」(これは CEwindows にも置かれています) は、Microsoft が WinCE 3.0 から直接 IrDA と接続するためのサポートを削除する挙にでているため、使えません。 私はまず "Linux to Windows CE Connection" (これは The Gadgeteer にあります) を出発点にしましたが、さまざまな場所で変更と簡素化を行う必要がありました。 この説では、PocketPC と Linux 間で ping ができるところまでを扱います。 ネットワーク用アプリケーションは、以下のサイトでいろいろ見つかるはずです。 PDAcentral、 CAM、 WinCEcity
私が試したシステムは、
Compaq iPAQ に PocketPC Version 3.0.9348 を搭載したもの (これが PocketPC 2002 で動作するかどうかはわかりません。なんと言っても、 Microsoft はバージョン間で標準を変更するのが大好きなので)。
Linux 側は、Slackware Linux 7.1 を載せた Compaq LTE5250 ラップトップ。
Kernel 2.4.19
PPP 2.4.1 (PPP は kernel 2.4.x と組み合わせる場合、2.4.0 以前のものは不可です)
PocketPC 側では、 Start -> Settings -> Connection -> Modem (英語版は。日本語版は不詳ですが、これを参考にしてください) を開き、 新しい接続 (new connection) を作成し、適当な名前を付け (私は Linux-m としました)、汎用のモデム (Generic IrDA modem) を選択し、ボーレートを 115200 に設定します。ポート設定 (Port Settings) では、8-N-1-Hardware を選択し、手動でダイアルする (Enter dialing commands manually) にチェックを入れます。これは、必要もないのに PocketPC に電話のダイアルをさせないようにするためです。 ほかの二つのチェックボックスはチェックしないままとしてください。 TCP/IP 設定では、サーバからの IP アドレスを使用する (Use server-assigned IP address) を選択し、Slip を使用する (Use Slip) はチェックせず、ソフトウェア圧縮を行う (Use software compression) と、IP ヘッダ圧縮を行う (Use IP header compression) をチェックします。 ネームサーバ (name Servers) の項では、サーバの指定したアドレスを用いる (Use server-assigned addresses) を選択します。"OK"、"次へ" の順に叩きます。 ここで電話番号を聞かれることがないはずです (聞かれた場合には、最初に戻って 高度な設定 (Advanced) セクションの "手動でダイアル" コマンドが選択されているか再チェックしてください。 呼び出しをキャンセルする (Cancel call...) と、ダイアルトーンを待つ (Wait for dial tone...) がチェックされていてはいけません。 これで、PocketPC 側の設定は完了です。
Linux 側では、まず必要なモジュールがすべてロードされていることを確認してください。 以下が、通信が成功するためにロードされ、使われるモジュールの一覧です。
Module Size Used by Not tainted ircomm-tty 31040 2 ircomm 13448 0 [ircomm-tty] irtty 7616 2 ppp_async 6688 1 ppp_generic 15740 3 [ppp_async] slhc 4592 1 [ppp_generic] |
crw------- 1 root root 161, 0 Nov 25 15:09 /dev/ircomm0 crw-r--r-- 1 root root 161, 1 Nov 22 19:30 /dev/ircomm1 |
これで IrDA ポートがログインターミナル有効となったはずです。 私はログイン用に agetty を使っていますが、お好みの getty 相当プログラムが利用できます。/etc/inittab に以下の行を追加します。
s3:2345:respawn:/sbin/agetty ircomm0 115200 vt100 |
init 2; sleep 3 ; init 3 |
#!/bin/sh /usr/sbin/pppd -detach noauth local lock 192.168.55.1:192.168.55.2 ircomm0 115200 & |
さて接続を行いましょう。まず赤外線ポートの位置あわせを行い、PocketPC 側で "開始 (Start)" -> "プログラム" -> "接続 (Connections)" から、作成した接続 (Linux-m) を叩きます。現れる "接続先 (Connect To)" ダイアログでは、何も入力せずただ "接続 (Connect)" を叩きます。 "手動ダイアルターミナル (Manual Dialing Terminal)" が現れて、Linux マシンのログインプロンプトがでるはずです (すぐにログインプロンプトがでない場合には、 仮想キーボードを立ち上げて "Enter" を押してください)。 ログインする必要はありません (これは お ま け です。 究極のリモートコントローラという訳です :)
Linux マシン側では、PocketPC ターミナルにゴミが出たらすぐに pppd コマンドを実行し、PocketPC 側で "ファイル(File)" -> "続行 (Continue)" を行います。 pppd では以下のメッセージがでるはずです。
Using interface ppp0 Connect: ppp0 <--> /dev/ircomm0 Cannot determine ethernet address for proxy ARP local IP address 192.168.55.1 remote IP address 192.168.55.2 |
PING 192.168.55.2 (192.168.55.2): 56 data bytes 64 bytes from 192.168.55.2: icmp_seq=0 ttl=32 time=62.5 ms 64 bytes from 192.168.55.2: icmp_seq=1 ttl=32 time=310.0 ms 64 bytes from 192.168.55.2: icmp_seq=2 ttl=32 time=59.9 ms 64 bytes from 192.168.55.2: icmp_seq=3 ttl=32 time=59.8 ms 64 bytes from 192.168.55.2: icmp_seq=4 ttl=32 time=60.0 ms --- 192.168.55.2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 59.8/110.4/310.0 ms |
LCP terminated by peer Modem hangup Connection terminated. Connect time 2.6 minutes. Sent 1336 bytes, received 1274 bytes. |
ここまでの手順がうまくいかないなら、以下をチェックしてください。
getty が開始している。/dev/ircomm0 が設定されていない場合には、開始できません。これは getty 起動の前に modprobe ircomm-tty を行う必要があるということです。
手動でダイアルする (Enter dialing commands manually) がチェックされている。 PocketPC に電話番号をダイアルさせてはいけません!
非同期 PPP サポートがカーネルに組み込まれているかを確認します。 modprobe ppp_async が正しくロードされない場合、非同期 PPP サポートがカーネルに組み込まれていません。組み込まれていない場合、 "Couldn't set tty to PPP discipline: Invalid argument" というエラーメッセージが出力されます。
pppd は setuid root でなければいけません。 chmod u+s /usr/sbin/pppd.