BAYCOM モデム用 Linux ドライバ

Thomas M. Sailer, HB9JNX/AE4WA, <sailer@ife.ee.ethz.ch>

!!NEW!!(04/98)各種 BAYCOM モデム用ドライバはそれぞれコードを共有しない
ので別々のドライバに分割されました。よってドライバ名とデバイス名は変更
されています。

この文書は BAYCOM タイプのシンプルなアマチュア無線用モデムのための 
Linux カーネルドライバについて述べています。

以下のドライバが利用できます。

baycom_ser_fdx:

このドライバは SER12 モデムの全二重もしくは半二重通信をサポートしてい
ます。ボーレートはモジュールパラメータの "baud" で変更することができる
ので、シリアルポート上のありとあらゆるタイプのモデム
(every bit bang modem)をサポートしています。
デバイス名は bcsf0 から bcsf3 です。SER12 タイプのモデムにお薦めですが、
もし delta status ビットを使わないような駄目な UART クローンをお持ちで
したら baycom_ser_hdx の方を使ってみてください。

baycom_ser_hdx:

これは SER12 モデム用のもう一つのドライバです。1200 ボーの半二重通信だ
けをサポートしています。デバイス名は bcsh0 から bcsh3 です。このドライ
バは baycom_ser_fdx があなたの持っている UART で動かなかったときだけ使
ってください。

baycom_par:

このドライバは par96 モデムと picpar モデムをサポートしています。デバ
イス名は bcp0 から bcp3 です。

baycom_epp:

このドライバは epp モデムをサポートしています。デバイス名は bce0 から 
bce3 です。このドライバは開発作業中のものです。


以下のモデムがサポートされています。

ser12:

これはとてもシンプルな 1200 ボー AFSK モデムです。このモデムは変調・復
変調チップ（通常は TI の TCM3105）だけからできています。HDLC プロトコ
ルの扱いだけでなく受信ビットクロックの再生までコンピュータが行います。
モデムはシリアルポートに接続します（これがドライバ名の由来です）。シリ
アルポートは非同期としては使わないので、カーネルのシリアルポートドライ
バは使えません。またこのドライバは標準的なシリアルポートのハードウェア
（8250, 16450, 16550）だけをサポートしています。

par96:

これは G3RUH 方式とコンパチブルな 9600 ボー FSK モデムです。モデムがフ
ィルタリングや受信クロックの再生といった全ての事をします。データはシフ
トレジスタを通して PC との転送が行われます。シフトレジスタが 16ビット
埋まると割り込みがかけられます。すると PC はバースト的に(訳注： 16ビッ
トまとめてという意味)シフトレジスタから値を読み込むます。このモデムは
パラレルポートに接続します（これがドライバ名の由来です）。このモデムは
HDLC やスクランブル多項式(? scrambler polynomial)の実装は PC に任せま
す。

picpar:

これは Henning Rech, DF9IC が par96 モデムを設計しなおしたものです。
par96 とプロトコルコンパチブルですが、低消費電力 IC が3つだけからでき
ており、パラレルポートから電力を供給されることで、外部電源を必要としま
せん。さらにキャリア検出回路を内蔵しています。

epp:

これは拡張パラレルポートに接続する高速モデムです。高速ハブ越しに作業を
するような使い方をターゲットとしています。(76.8kbit/s)

eppfpga:

これは epp アダプタを設計しなおしたものです。


上記の全モデムは半二重通信しかサポートしていません。しかしドライバ自身
は KISS （下記参照）による全二重通信に対応しています。送信パケットがあ
ると直ちに送信をはじめ DCD は監視しません。つまり他の誰かが送信中でも
送信を始めてしまうのです。この機能(command)は DAMA チャネルアクセスプ
ロトコルなどの実装で必要とされています。


ドライバインターフェイス

以前とは違い、これらのドライバはキャラクタデバイスではなくカーネルのネ
ットワークインターフェイスとなりました。よってインストールは簡単です。
インストールすると bc{sf,sh,p,e}[0-3] という名前の4つのインターフェイ
スが使えるようになります。ax25 ユーティリティ集の sethdlc を使えばドラ
イバの状態等を設定することができます。userland の AX.25 スタックを使っ
ている人は net2kiss というユーティリティ（これも ax25 ユーティリティ集
に含まれています）を使ってネットワークインターフェイス上のパケットを仮
想端末の KISS ストリームに流し込むことも出来ます。また WAMPES 用には私
のパッチをあてることでカーネルのネットワークインターフェイスを直接割り
当てることも出来ます。（訳注：このパッチは既に WAMPES のソースに取りこ
まれているそうです）


ドライバの設定

ドライバがカーネルに組み込まれる時点で、どのモデムがどのポートを使うべ
きかの情報をドライバが知らなければなりません。これは setbaycom ユーテ
ィリティを使うことでできます。もしモデムをひとつだけ使うのなら、insmod
のコマンド行（あるいは /etc/conf.modules ）にオプションを記述してドラ
イバを設定することができます。

例：
insmod baycom_ser_fdx mode="ser12*" iobase=0x3f8 irq=4
sethdlc -i bcsf0 -p mode "ser12*" io 0x3f8 irq 4

上の2行はともに1番目のシリアルポート(DOS での COM1)の ser12 モデムを 
bcsf0 に設定するものです。モードパラメータの部分の * はドライバにソフ
トウェア DCD（下記参照）を使うように指定する意味を持ちます。

insmod baycom_par mode="picpar" iobase=0x378
sethdlc -i bcp0 -p mode "picpar" io 0x378

上の2行はともに1番目のパラレルポート(DOS での LPT1)の picpar モデムを 
bcp0 に設定するものです。（注意： picpar はハードウェア DCD を意味し、
par96 はソフトウェア DCD を意味しています。）

チャンネルアクセスパラメータは sethdlc -a か kissparms を使って設定で
きます。それぞれのユーティリティで値の意味が若干違うことに注意してくだ
さい。


ハードウェア DCD 対ソフトウェア DCD

送信中のパケットの衝突を避けるためにドライバはいつチャンネルが使われて
いるのか知らなければなりません。これは DCD 回路/ソフトのお仕事です。ド
ライバはソフトウェア DCD アルゴリズム(options=1)かハードウェアからの 
DCD 信号(options=0)のどちらかを使うことができます。

ser12:

もしソフトウェア DCD を使うなら無線機のスケルチは開きっぱなしにしてお
きます。ハードウェアのスケルチ回路を使うよりもかなり速いのでソフトウェ
ア DCD を使うことを強くお薦めします。短所はシステムの負荷がわずかに高
くなることです。

par96:

このタイプのモデム用のソフトウェア DCD アルゴリズムはやや貧弱です。ソ
フトウェアがモデムが適当な DCD アルゴリズムを実装するために必要とする
情報をモデムは提供しません。よってもし par96 モデムの DCD 入力用の出力
が無線機にあるなら、ハードウェア DCD 回路の使用をお薦めします。

picpar:

picpar モデムは DCD 回路を内蔵しています。これはかなりお薦めです。


Linux カーネルの他の部分との適合性

シリアルドライバと baycom シリアルドライバは同一のハードウェアリソース
について競合しています。もちろん一つのインターフェイスについて同時に使
えるドライバは一つだけです。ところが、シリアルドライバは起動時にシリア
ルインターフェイスが見つかるとそれら全てを占領します。そうなると baycom
ドライバは引き続いてシリアルポートにアクセスすることが出来ません。その
ためシリアルドライバに占領されているポートを 
"setserial ／dev／ttyS＃ uart none" （# はインターフェイスの番号）とし
て開放してある必要があるかもしれません。insmod のコマンドラインで特に
指定しない限り、baycom ドライバが起動時にポートを予約することはありま
せん。この問題を解決するもうひとつの方法は全てのドライバをモジュールと
してコンパイルして後は kmod がアプリケーションに対して正しいドライバを
ロードするのに任せることです。

パラレルポートのドライバ(baycom_par, baycom_epp)は parport subsystem 
を使って異なるクライアントドライバ間でポートを仮想化(?)出来るようにな
っています。

vy 73s de
Tom Sailer, sailer@ife.ee.ethz.ch
hb9jnx @ hb9w.ampr.org

（訳注：BAYCOMモデムについての詳しい情報は http://www.baycom.org で得
られます。）

（翻訳：JL3OXR <coda@post.kek.jp>  Jun. 17, 1999)
（翻訳校正：武井さん＠高知大、谷口さん＠ASAHI-NET）
