Linux のシリアルポート名は、 UNIX の流儀に従っています。 ですから、 最初のシリアルポートは /dev/ttyS0 というファイル名で、 二番目のシリアルポートは /dev/ttyS1 等というようになります。
しかし IBM PC のやり方は違います。 この場合は、 最初のシリアルポートの名前は COM1: となり、 二番目のシリアルポートは COM2: 等々、というような具合です。 IBM PC/AT コンピュータとその後継機には、 一台あたりシリアルポートが 4 つまで搭載できます。
さらに大抵のブートローダーには、また別の命名規則があります。 最初のシリアルポートは 0、 二番目は 1、等々となります。
自分の Linux ディストリビューションで、 devfs というデバイスマネージャを使用している場合は、 シリアルポートには、さらにまた別の名前があります。 最初のシリアルポートは /dev/tts/0、 二番目のシリアルポートは /dev/tts/1 等々、というようになります。
結局、IBM PC のシャーシにあるシリアルポートは COM1: になっていますが、 それが Linux では /dev/ttyS0 となり、 devfs が使えるように設定している Linux では、それが /dev/tts/0 となります。 さらに多くのブートローダーでは、 ポート 0 になっています。
この HOWTO に載せている例では、 この最初のシリアルポート(訳注:/dev/ttyS0)を使っています。 というのは、ほとんどの読者が使いたいと思っているのが、 そのシリアルポートだからです。
Table 2-1. 同じシリアルポートに対する様々な名前
IBM PC | Linux カーネル | devfs 付き Linux カーネル | 大半のブートローダー |
---|---|---|---|
COM1: | /dev/ttyS0 | /dev/tts/0 | 0 |
COM2: | /dev/ttyS1 | /dev/tts/1 | 1 |
COM3: | /dev/ttyS2 | /dev/tts/2 | 2 |
COM4: | /dev/ttyS3 | /dev/tts/3 | 3 |
シリアルポートをコンソール用に使うと、 そのシリアルポートは他のデバイスと割り込みを共有できなくなります。 IBM PC のデバイスは、 普通 Table 2-2 で示すように設置されています。 ですからもしコンソール用にシリアルポート /dev/ttyS0 を使う場合は、 PC にシリアルポート /dev/ttyS2 を設置しないようにして、割り込み 4 を共有しないようにして下さい。 /dev/ttyS2 が物理的に取り外せない場合は、 Figure 2-1 で示しているように、 setserial コマンドを使ってそのポートを無効にして下さい。
Table 2-2. IBM PC/AT の RS-232 ポート用に使用する割り込み
デバイス | 割り込み | ポート |
---|---|---|
/dev/ttyS0 | 4 | 0x3f8 |
/dev/ttyS1 | 3 | 0x2f8 |
/dev/ttyS2 | 4 | 0x3e8 |
/dev/ttyS3 | 3 | 0x2e8 |
Figure 2-1. /etc/rc.serial で setserial コマンドを使い、 シリアルポート /dev/ttyS2 を 無効にする。
# /dev/ttyS2 を無効にしているので、割り込み 4 は共有されない。 # というわけで、/dev/ttyS0 はシリアルコンソールに使える。 setserial /dev/ttyS2 uart none port 0x0 irq 0 |
ソースコードを読んでいる限りでは、 割り込み共有の制約はたんに Intel Architecture-32 だけではなく、 すべてのコンピュータアーキテクチャにあてはまるように思えます。