FreeBSD ハンドブック
前のページ | 第 19章シリアル通信 | 次のページ

# 19.2. はじめに

## 19.2.1. 用語解説

bps

  Bits per Second の略で、 データの転送速度を表す単位。

DTE

  Data Terminal Equipment の略。 たとえばコンピュータ本体のこと

DCE

  Data Communications Equipment の略で、具体的にはモデムのこと。

RS-232

  EIA (米電気産業協会) のハードウェアシリアル通信の標準規格

通信におけるデータ転送速度に関して、 このセクションでは “ボー” (baud) という用語は使いません。 ボーというのは一定時間に生じうる電気的状態の変化の数を表すにすぎず、 “bps” (bits per second) という単位の方が正しいからです (少なくとも、こういう表現をしておけば、 意地の悪い人に怒られることもないのではないかと思います)。

## 19.2.2. ケーブルとポート

モデムまたはシリアル端末を FreeBSD システムに接続するためには、 コンピュータ上のシリアルポートと、 シリアルデバイスに接続する適切なケーブルが必要です。 ハードウェアとそれが必要とするケーブルについてよく理解しているなら、 この節は飛ばしても問題ありません。

### 19.2.2.1. ケーブル

シリアルケーブルにはさまざまな種類があります。 我々の目的にあうもっとも一般的な 2 種類は、 ヌルモデムケーブル[1] と、スタンダード (ストレート) RS-232 ケーブルです ハードウェアの説明文書に必要なケーブルの種類が記載されているはずです。

#### 19.2.2.1.1. ヌルモデムケーブル

ヌルモデムケーブル (またはリバースケーブルあるいはクロ スケーブル) は、たとえば “signal ground” 信号のように、いくつかの信 号はそのまま通しますが、 他の信号は途中で入れ替えて通します。たとえば、“send data” 信号のピンは、反対側のコネクタの “receive data” 信号の ピンと繋がっています。

自分で使うケーブルは自分で作りたいということであれば、 端末で使うヌルモデムケーブルを作成できます。この表では、 RS-232C の信号線の名前と、DB-25 コネクタ上のピンの番 号を示しています。

Signal | Pin # |  | Pin # | Signal
--- | --- | --- | --- | ---
TxD | 2 | connects to | 3 | RxD
RxD | 3 | connects to | 2 | TxD
DTR | 20 | connects to | 6 | DSR
DSR | 6 | connects to | 20 | DTR
SG | 7 | connects to | 7 | SG
DCD | 8 | connects to | 4 | RTS
RTS | 4 |  | 5 | CTS
CTS | 5 | connects to | 8 | DCD

> 注意: DCD と RST では、コネクタ内部でピン4を5に接続し、 そして逆側のコネクタのピン8と接続します。

#### 19.2.2.1.2. スタンダード RS-232C ケーブル

スタンダードシリアルケーブル (またはストレートケーブル) の場合は、すべての RS-232C 信号をそのまま通します。つまり、片方の “send data” 信号のピンは、逆側の “send data” 信号のピンと繋がっています。モデムを FreeBSD に接続するときや、一部の端末を接続するときにこのタイプの ケーブルを使用します。

### 19.2.2.2. ポート

シリアルポートは、FreeBSDが動作しているホスト コンピュータと端 末の間でデータのやりとりを行うために用いるデバイスです。 ここでは、現在存在するポートの種類と FreeBSD でのポートのアクセス方法について解 説します。

#### 19.2.2.2.1. ポートの種類

シリアルポートには何種類かのものがあります。 ケーブルを購 入したり自作したりする前に、 そのケーブルのコネクタの形状が端末および FreeBSD システムのポートの形状と一致していることを 確認してください。

ほとんどの端末は DB25 ポートを搭載しています。 FreeBSDが動作しているも のを含めて、PCは DB25 または DB9 ポートを搭載しています。マルチポート のシリアルカードの場合は、RJ-12 や RJ-45 のポートを搭載しているかもし れません。

利用されているポートの種類に関しては、 ハードウェアについてきたドキュメントを参照してください。 また、多くの場合、ポートの形状から判断することもできるでしょう。

#### 19.2.2.2.2. ポートの名前

FreeBSDでは、`/dev` ディレクトリ内のエントリを介 してシリアルポートへのアクセスがおこなわれます。 2種類の異なったエン トリがあります。

- 着信用のポートの名前は、 `/dev/ttyd`N`` (`N` は 0から始まるポート番号) となっています。一般に端末の接続には 着信用ポートを用います。着信用のポートでは、 シリアルラインのデータ キャリア検出 (DCD) 信号がオンになっている必要があります。

- 発信用のポートの名前は、 `/dev/cuaa`N`` となっています。 発信用のポートは普通モデムの接続に用い、端末の接続には 利用しません。ただ、 ケーブルまたは端末がキャリア検出信号を使えない タイプのものの場合は、 発信用のポートを使うとよいでしょう。

たとえば、端末を一つ目のシリアルポート (MS-DOS でいうところの `COM1`) に接 続したとすると、`/dev/ttyd0` がこの端末を指すことになります。また、 二つ目のシリアルポート (`COM2`) ならば `/dev/ttyd1` となり、 以下この形式のデバイスエントリを使います。

## 19.2.3. カーネルの設定

デフォルトでは、FreeBSD は 4 つのシリアルポートに対応しています。MS-DOS の世界では、 `COM1`, `COM2`, `COM3` および `COM4` と呼ばれています。 FreeBSD では、現在のところ BocaBoard の 1008 や 2016 などの、 “単純な”マルチポートシリアルインタフェースや、 Digiboard や Stallion Technologies が製造しているよりインテリジェントなマルチポートカードにも対応しています。 しかしながら、デフォルトのカーネルは、標準の COM ポートしか見ません。

搭載されているシリアルポートのいずれかを、 カーネルが認識しているかどうか確認したい場合は、 カーネルの起動時のメッセージを注意深く見るか、あるいは `/sbin/dmesg` コマンドを使って、 起動時の出力メッセージを確認してください。特に、 `sio` で始まるメッセージをよく見てください。

> ティップ: 以下のコマンドで `sio` という文字列を含むメッセージだけを表示できます。

>     # /sbin/dmesg | grep 'sio'

たとえば、シリアルポートを四つ持つシステムの場合は、 以下のようなシリアルポートに関するメッセージがカーネルによって表示されます。

    sio0 at 0x3f8-0x3ff irq 4 on isa
    sio0: type 16550A
    sio1 at 0x2f8-0x2ff irq 3 on isa
    sio1: type 16550A
    sio2 at 0x3e8-0x3ef irq 5 on isa
    sio2: type 16550A
    sio3 at 0x2e8-0x2ef irq 9 on isa
    sio3: type 16550A

もし、カーネルに正常に認識されないポートがある場合は、 おそらくカスタマイズした FreeBSD カーネルを構築する必要があるでしょう。 カーネルコンフィグレーションの詳細については 第9章 をご覧ください。

カーネルコンフィグレーションの該当するデバイス行は、 次のようになります。

    device		sio0	at isa? port "IO_COM1" tty irq 4 vector siointr
    device		sio1	at isa? port "IO_COM2" tty irq 3 vector siointr
    device		sio2	at isa? port "IO_COM3" tty irq 5 vector siointr
    device		sio3	at isa? port "IO_COM4" tty irq 9 vector siointr

システムに搭載されていないデバイスに関する記述は、 コメントアウトまたは削除してしまってかまいません。 sio(4) のマニュアルを見て、 マルチポートのボードのためのコンフィグレーションファイルの記述の仕方を確認してください。 デバイスのフラグの指定方法がバージョンによって異なりますので、 別のバージョンの FreeBSD で利用していたコンフィグレーションファイルを流用する場合には十分注意してください。

> 注意: なお、`port "IO_COM1"`, `IO_COM2`, `IO_COM3` および `IO_COM4` は、 それぞれのポートの一般的なアドレスである `0x3f8`, `0x2f8`, `0x3e8` および `0x2e8` を表します。また、割り込み番号 4, 3, 5 と 9 は、それぞれ `COM1:` から `COM4:` のポートで一般的に使用される IRQ です。また、ISA バスのコンピュータの場合、 一般的なシリアルポートは複数のポートで一つの IRQ を共有することが できませんので注意が必要です (マルチポートのシリアルボードの場合は、複数の 16550A ベースのポートで一つまたは二つの IRQ を共有するための機構を備えています)。

## 19.2.4. デバイススペシャルファイル

カーネルに組み込まれているほとんどのデバイスは、 `/dev` ディレクトリにある、 “デバイススペシャルファイル”を介してアクセスされます。 `sio` デバイスの場合は、着信用の `/dev/ttyd`N`` および、発信用の `/dev/cuaa`N`` が利用されます。さらに、FreeBSD は、初期化デバイス (`/dev/ttyid`N`` と `/dev/cuai0`N``) およびロッキングデバイス (`/dev/ttyld`N`` と `/dev/cual0`N``) も用意しています。 初期化デバイスは、通信ポートがオープンされる度に、 そのポートの初期設定を行うために使われます。たとえば、 `RTS/CTS` によるフロー制御を行うモデムが接続されている場合の `crtscts` などのパラメータの初期化が行われます。 ロッキングデバイスは、ポートの設定をロックし、 他のユーザやプログラムにこれらを変更されることのないようにするために利用されます。 通信ポートの設定、デバイスのロックと初期化および設定の変更に関しては、 それぞれ termios(4), sio(4) と stty(1) のマニュアルをご覧ください。

### 19.2.4.1. デバイススペシャルファイルの作成

> 注意: FreeBSD 5.0 には、 必要に応じてデバイスノードを自動的に作成する `devfs` ファイルシステムがあります。 `devfs` が有効になっているバージョンの FreeBSD を動かしているなら、 この節は飛ばしてかまいません。

デバイススペシャルファイルの管理は、ディレクトリ `/dev` にあるシェルスクリプト `MAKEDEV` で行います。 `MAKEDEV` を使って、 `COM1` (ポート 0) をダイアルアップのポートとして利用するための デバイススペシャルファイルを作るには、 `/dev` に `cd` してから、 `MAKEDEV ttyd0` と実行してください。 同様に、`MAKEDEV ttyd1` とすることで、 `COM2` (ポート 1) 用のデバイススペシャルファイルを作成できます。

`MAKEDEV` は、 `/dev/ttyd`N`` のデバイススペシャルファイルだけでなく、 `/dev/cuaa`N``, `/dev/cuaia`N``, `/dev/cuala`N``, `/dev/ttyld`N`` および `/dev/ttyid`N`` ノードも作成します。

デバイススペシャルファイルの作成後、 これらのファイルの許可属性が適切に設定されていて、 これらのデバイスを利用してもよいユーザのみが読み書きできるようになっていることを確認してください (特に `/dev/cua*` の許可属性には注意を払ってください)。 この確認を怠ると、 一般のユーザがあなたのモデムを使うことができるようなことになりかねません。 デフォルトの `/dev/cua*` の許可属性は、以下のようになっていて、 たいていの場合適切なものだと思います。

    crw-rw----    1 uucp     dialer    28, 129 Feb 15 14:38 /dev/cuaa1
    crw-rw----    1 uucp     dialer    28, 161 Feb 15 14:38 /dev/cuaia1
    crw-rw----    1 uucp     dialer    28, 193 Feb 15 14:38 /dev/cuala1

上の設定では、ユーザ `uucp` と、グループ `dialer` に属するユーザが発信用のデバイスを利用できます。

## 19.2.5. シリアルポートの設定

`ttyd`N`` (または `cuaa`N``) デバイスは、 アプリケーション上でシリアルポートをオープンする時に使用する、 標準的なデバイスです。プロセスがデバイスをオープンする際、端末 I/O 設定のデフォルトセットが適用されます。これらの設定内容は、 次のコマンドで確認することができます。

    # stty -a -f /dev/ttyd1

このデバイスの設定を変更した場合、 その設定はデバイスがクローズされるまで有効です。 デバイスが再びオープンされる時、デフォルトの設定値に戻ります。 デフォルトの設定を変更するためには、“初期状態” を設定したいデバイスをオープンして調節できます。 たとえば、`ttyd5` というデバイスに対して、デフォルトで `CLOCAL` モード, 8 bits, `XON/XOFF` フロー制御を設定したい場合は、 次のように入力してください。

    # stty -f /dev/ttyid5 clocal cs8 ixon ixoff

システム全体のシリアルデバイス初期化は `/etc/rc.serial` で制御されています。 このファイルは、シリアルデバイスのデフォルトの設定を決めます。

また、“ロック状態”のデバイスに調節を加えることで、 アプリケーションがある種の設定を変更してしまうことを防げます。 たとえば、`ttyd5` の速度を 57600 bps に固定したい場合には、次のように入力してください。

    # stty -f /dev/ttyld5 57600

これで、`ttyd5` をオープンして、 シリアルポートの転送スピードを変更しようとするアプリケーションは 57600 bps で頭打ちになります。

本来、初期状態やロックされているデバイスに書き込めるのは `root` アカウントだけにすべきです。

### 注意

[1] | 訳注: リバースケーブル、 もしくはクロスケーブルと呼ばれることもあります。

前のページ | ホーム | 次のページ
シリアル通信 | 上に戻る | シリアル端末

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。