最近のノートには赤外線ポートがついてますよね。カタログを見ていると 4Mbps とかひと昔前のノートでも 115Kbps とかの速度が出ると書いてあります。 これってホントに実用に耐えるんだったら便利そうですよね。 というわけで、ここでは赤外線通信で遊ぶのを目標に、NetBSD に おけるシリアル通信についてまとめてみようかと思います。おまけとして serial console もできたりしてしまいます。Serial console を使うと ディスプレイのないサーバマシンのメンテナンスなどに威力を発揮するので 便利です。頑張りましょう。
/etc/ttys
...
tty00 "/usr/libexec/getty std.57600" unknown on secure local
..
# ttyflags tty00
# kill -HUP 1
${HOME}/.kermrc
set line /dev/tty00
set speed 57600
あと kermit
を実行する人が /dev/tty00
を
r/w で open できるように設定します。setuid を使うのも良し、
permission を変えるのもよしですが、サイトの security policy に
従って下さい。
Server の tty00 で getty(8)
が走ってるかどうか確認します。
[server]# ps xauww | grep getty | grep tty00 root 367 0.0 0.7 48 356 00 Ss+ 5:16PM 0:00.04 /usr/libexec/getty std.57600 tty00
TTY(出力の7番目) が指定した tty (この場合は 00) になっていない場合、
初期化? がうまく出来ていません。一度 getty を off にして、
ttyflags
を実行しましょう。
client で kermit
を実行します。
[tamp]~% kermit C-Kermit 6.0.192, 6 Sep 96, for NetBSD Copyright (C) 1985, 1996, Trustees of Columbia University in the City of New York. Default file-transfer mode is TEXT Type ? or HELP for help. [/var/users/tacha] C-Kermit>c Connecting to /dev/tty00, speed 57600. The escape character is Ctrl-\ (ASCII 28, FS) Type the escape character followed by C to get back, or followed by ? to see other options. NetBSD/i386 (tera1.trun.org) (tty00) login:
つながっちゃいました。:-) あとは細かなパラメータを設定すれば いいんじゃないでしょうか?
赤外線ポートはハードウェアレベルで com に見えるようになっているらしいです。
実際、dmesg では
com1 at isa0 port 0x2f8-0x2ff irq 3: ns16550a, working fifo
のように普通の com として認識されている様子が見られます。
つまり、有線で通信がうまくいった場合、赤外線でうまくいかない理由は
ありません。ただし、赤外線の場合は、full duplex ではなくて、half duplex
らしいので、 kermit
の設定で
set duplex half
を加えます。実際に
ThinkPad 560Eと
ThinkPad 570 (2644-AAJ)で
/netbsd を転送してみたところ compression を有効にして
距離 | 転送レート | timeout | dameged | 再送 |
6cm | 6463cps | 0 | 0 | 0 |
50cm | 5263cps | 16 | 8 | 0 |
100cm | 5726cps | 12 | 0 | 0 |
150cm | 5279cps | 18 | 6 | 2 |
160cm | 1527cps | 24 | 3 | 1371 |
有線(参考) | 5459cps | 17 | 5 | 0 |
位になりました。これくらいで使えるのならば、まぁよしとしましょう。
測定条件はです。高さが違っていたり、赤外線ポートの向きがずれてたりすると もっと近くで苦しくなります。
- speed=115200bps (com driver の上限)
- 二台の計算機は同一水平面内に置き、赤外線ポートは向かい合わせる
シリアルコンソールにするためには kernel の configuration file に
options "CONSDEVNAME=\"com\"" options CONADDR=0x3f8 options CONSPEED=57600
を加えます。最後の CONS_OVERRIDE
を付け加えないと console の
設定は boot loader から与えられた値か初期値になるようです。最初化け化けで
泣いてしまいました。初期値は、マニュアル console(4) に書かれているので参考に
して下さい。
boot loader も /sys/arch/i386/stand/
の下に
biosboot_com0
とか biosboot_ser
が
あるので作り直せば、single user mode で立ち上げたいときも
メニューがシリアルに出てくるようになるので OK です。
Return to Comfortable Life With NetBSD