2.2. シリアルポートを選択する

2.2.1. シリアルポートの名前

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 PCLinux カーネル devfs 付き Linux カーネル大半のブートローダー
COM1:/dev/ttyS0/dev/tts/00
COM2:/dev/ttyS1/dev/tts/11
COM3:/dev/ttyS2/dev/tts/22
COM4:/dev/ttyS3/dev/tts/33

2.2.2. コンソールのシリアルポート用割り込みが共有できない

シリアルポートをコンソール用に使うと、 そのシリアルポートは他のデバイスと割り込みを共有できなくなります。 IBM PC のデバイスは、 普通 Table 2-2 で示すように設置されています。 ですからもしコンソール用にシリアルポート /dev/ttyS0 を使う場合は、 PC にシリアルポート /dev/ttyS2 を設置しないようにして、割り込み 4 を共有しないようにして下さい。 /dev/ttyS2 が物理的に取り外せない場合は、 Figure 2-1 で示しているように、 setserial コマンドを使ってそのポートを無効にして下さい。


Table 2-2. IBM PC/ATRS-232 ポート用に使用する割り込み

デバイス割り込みポート
/dev/ttyS040x3f8
/dev/ttyS130x2f8
/dev/ttyS240x3e8
/dev/ttyS330x2e8

Figure 2-1. /etc/rc.serialsetserial コマンドを使い、 シリアルポート /dev/ttyS2 を 無効にする。

# /dev/ttyS2 を無効にしているので、割り込み 4 は共有されない。
# というわけで、/dev/ttyS0 はシリアルコンソールに使える。
setserial /dev/ttyS2 uart none port 0x0 irq 0

ソースコードを読んでいる限りでは、 割り込み共有の制約はたんに Intel Architecture-32 だけではなく、 すべてのコンピュータアーキテクチャにあてはまるように思えます。