`parport' コードは Linux におけるパラレルポートのサポートを 受け持ちます。このコードでは、一つのポートを複数のデバイス ドライバで共有することも可能になっています。 parport にはパラメータを渡すことができ、ハードウェアの自動検出 結果を上書きできます。これは IRQ を使いたい場合に特に便利です。 IRQ の自動検出は一般にはうまくいきませんので。デフォルトでは プローブ *できた* IRQ も利用されないことになっています。パラレル ポートと同じ IRQ をサウンドカードやネットワークカードに割り当てて いるユーザもたくさんいるからです。 parport は二つの部分に別れています。ポート共有を処理するジェネ リックな部分と、実際にポートを扱う機種依存の部分です。 モジュールで parport を使う =========================== parport のコードをモジュールとしてロードする場合は、まず # insmod parport.o としてジェネリックな方をロードします。次に機種依存の方をロード する必要があります。以下はその例。 # insmod parport_pc.o io=0x3bc,0x378,0x278 irq=none,7,auto ここでは parport コードに「PC スタイルのポートを 3 つ使うこと、 一つは 0x3bc で IRQ なし、二つめは 0x378 で IRQ 7 を使い、 三つめは 0x278 で IRQ を自動検出すること」といった指示を しています。現在のところでは、PC スタイルのハードウェア (parport_pc) と Sun Ultra/AX のハードウェア (parport_ax) がサポートされています。 kmod で使う ----------- kmod を使っている場合は、 /etc/conf.modules を編集してやると 便利でしょう。次の例のような行を追加します: alias parport_lowlevel parport_pc options parport_pc io=0x378,0x278 irq=7,auto こうすると kmod はパラレルポートのデバイスドライバ (lp など) が ロードされるたびに、自動的に parport_pc をロードするようになります (オプション "io=0x378,0x278 irq=7,auto" が用いられます)。 parport の自動検出 [オプション] ------------------ parport の機種依存コードをカーネルにロードした後になら、 parport_probe モジュールをロードすることもできます。 # insmod parport_probe.o こうすると IEEE1284 プローブが接続されている全てのデバイスに対して 行われ、以下のようなログメッセージが出力されます。 parport0: Printer, BJC-210 (Canon) (kmod を使っていて parport_probe をモジュールで使うように 設定した場合は、このようになるでしょう。) プローブの結果は /proc/parport/?/autoprobe で見ることができます。 parport をカーネルにスタティックにリンクする ============================================ parport のコードをカーネルにスタティックにリンクした場合は、 カーネルのブートパラメータを用いれば上記と同様のことができます。 LILO のコマンドラインに以下のような指定を追加してください。 parport=0x3bc parport=0x378,7 parport=0x278,auto `parport=...' 行は複数指定できます。追加したいポート一つごとに 一行を指定します。カーネルのコマンドラインに `parport=0' を追加 すると、 parport のサポートはずっと無効になります。 `parport=auto' をカーネルコマンドラインに追加すると、自動検出された IRQ ラインや DMA チャネルを全て用います。 /proc のファイル ================ /proc ファイルシステムのサポートをカーネルに設定してある場合は、 /proc/parport というディレクトリエントリが現れるはずです。この ディレクトリには、 parport に扱うように指定したパラレルポート それぞれに対応するサブディレクトリがあります。それらサブディレクトリ にはそれぞれ 4 つのファイルがあり、これらを通してパラレルポートの 状態を知ることができます。 ファイル 内容 /proc/parport/0/devices このポートを使っているデバイスドライバの リスト。現在ポートを使っているドライバ の名前の脇には "+" がつく (この機能は 全てのドライバでサポートされているわけ ではない)。 /proc/parport/0/hardware パラレルポートのベースアドレス、 IRQ ライン、 DMA チャネル。 /proc/parport/0/irq そのポートに対して parport が使っている IRQ。別ファイルになっているのは、この ファイルに書き込む (IRQ 番号または "none") ことによって変更を可能にしているため。 /proc/parport/0/autoprobe 取得された IEEE-1284 デバイス ID 情報 デバイスドライバ ================ parport コードが初期化されたら、各ポートにデバイスドライバをアタッチ することができます。普通はこれは自動的に行われるでしょう。例えば lp ドライバは、ロードされると見付かったポートそれぞれに対して lp デバイス を生成します。ただしこの動作は lp ドライバのロード時にパラメータを 用いれば上書き可能です。 # insmod lp.o parport=0,2 あるいは LILO のコマンドラインで: lp=parport0 lp=parport2 上記の二つの例は、 lp に対して /dev/lp0 を一番目のパラレルポートに 割り当て、 /dev/lp1 を *三番目の* パラレルポートに割り当てるように 指定しています。二番目のポート (parport1) には lp ドライバは割り当て ません。これは以前のカーネルの動作の仕方とは異なっていることに注意 してください。以前は I/O ポートアドレスとデバイス名はスタティックに 関連づけられており、例えば /dev/lp0 は常に 0x3bc のポートでした。 今後はこれは通用しません - 例えばもしポートが一つしかなければ、その ポートはデフォルトでは /dev/lp0 になります。これはそのポートの ベースアドレスには依存しません。 さらに: * IEEE-1284 自動検出をコンパイル時に選択した場合は、カーネルの コマンドラインで `ip=auto' を指定できます。すると lp はプリンタが 接続されていると判断されたポートに対してのみデバイスを生成します。 * PLIP に `timid' パラメータを指定すると (コマンドラインで `plip=timid' あるいはモジュールなら `insmod plip timid=1')、他のデバイスによって 利用中であると判断されたポートを PLIP は避けるようになります。 * IRQ 自動検出が動作するポートのタイプは現時点ではあまり多く ありません。 -- Philip.Blundell@pobox.com tim@cyberelk.demon.co.uk # 本文書は linux kernel 2.2.10 の Documentation/parport.txt # の日本語訳です。複写・改変・再配布は GPL2 の条件を満たせば可能です。 # 翻訳は中野武雄 (nakano@apm.seikei.ac.jp) が JF Project の協力の下に # 行いました。ご意見等は JF@linux.or.jp までお寄せください。 $Id: parport.txt,v 1.1 2001/01/21 05:46:11 mdk Exp $