|
次のページ
前のページ
目次へ
3. カーネルのプリンタデバイスパラレルポートのデバイスドライバは、全く異なるものが二つ存在しています。
あなたがどちらをお使いかは、
そのカーネルのバージョン ( これら二つのドライバには似ているところもあります。 特に気をつけておくべきは、PC BIOS の "Plug and Play" を無効にしておかないと、 Linux はパラレルポートを検知しない、ということでしょう (驚くことじゃありません。 Windows などでの非 PCI デバイスの PnP 接続追跡情報はある意味災厄でしたから...)。
3.1 lp デバイス (2.1.32 以前)2.1.32 以前のカーネルでは、lp デバイスを組み込むかロードしておけば
(ロードされてれば 何人かのユーザからの報告によれば、単方向 (unidirectional) 用の古い プリンタケーブルを使っていると、双方向 (bidirectional) の lp ポートが 認識されないことがあるそうです。ちゃんとしたケーブルを使っているか 確かめておきましょう。 plip ドライバと lp ドライバは、一つのポートに同時に使うことは できません (2.0 以下では)。しかし、必要に応じて どちらかのドライバを選択してロードすることは可能です。 これは手動で、あるいは 2.x (及び 1.3.x の後期) カーネルなら kerneld を使って行うことができます。割り込みなどを注意深く設定すれば、 おそらく plip を一つのポートで、 lp を別のポートで動作させることが 可能でしょう。こいつをうまいことコマンドラインだけで成功させた例が あるようなら、私はその話がとても聞きたいです。 さて、世の中には tunelp という小さなユーティリティがあります。 これを root 権限で用いれば、 Linux 2.0 lp デバイスに対して、 割り込みの利用法やポーリングレートなどのオプションを 調整することができます。 lp ドライバがカーネルに直接組み込まれているときは、
カーネルは
この機能を使ったときは、必要となるポートを *ぜんぶ* 指定 しなければいけません。デフォルトで有効となるポートはありません。 なお lp=0 とすれば組み込みのドライバを無効にすることもできます。 モジュールとしてロードされる場合には、
I/O アドレスと割り込みを insmod のコマンドラインから
(あるいは /etc/conf.modules で kerneld に設定して)
通常のモジュール引数の指定方法で設定できます。
パラメータは
必要なときに標準のポート番号を思い出せない人 (わたしもそうです) のためにコメントを。 二つは上記の二番目の例に出ています。もう一つ (lp0) は 0x3bc に あります。標準の割り込み、に関しては、ちょっと知識がありません。 Linux 2.0 パラレルポートドライバのソースコードは /usr/src/linux/drivers/char/lp.c にあります。
3.2 parport デバイス (kernel 2.1.33 以降)カーネル 2.1.33 から (カーネル 2.0.30 用のパッチもありますが)、 lp デバイスは新たに導入された parport デバイスの単なるクライアントに なりました。 parport デバイスが追加されたことによって、 以前の lp デバイスドライバにあった多くの問題が是正されました。 lp が他のドライバとポートを共有できるようになりましたし、 利用できるパラレルポートをデバイス番号に動的に割り当てることも 可能になりました (以前は I/O アドレスとポート番号の関係は 固定されていました)。 parport デバイスの登場によって、 Zip ドライブや Backpack CD-ROM, ディスクなど、新たなパラレルポートデバイスが何でも利用できるように なりました。これらのうちのいくつかは 2.0 カーネルでもバージョンに よっては利用できます。 web を捜し回ってみてください。 お気づきになると思いますが、印刷に関連する主な違いは、 parport ベースのカーネルでは lp デバイスがパラレルポートに 動的に割り当てられる、と言うことです。 ですから Linux 2.0 で lp1 だったポートが Linux 2.2 では lp0 になるかもしれません。 lp ドライバのカーネルから parport ドライバのカーネルに アップグレードするときは、この点のチェックを忘れないようにしてください。
このデバイスについて一番ありがちな問題は、 設定のミスから起こるようです:
カーネルソースの Documentation/parport.txt を読むか、 parport web site に目を通してみてください。
3.3 シリアルデバイスLinux ではシリアルデバイスには /dev/ttyS1
のような名前がつきます。 遅いシリアルプリンタにフロー制御を使うと、 プリントジョブが捨てられてしまうことがあります。 これはおそらくシリアルポートのせいで、 デフォルトの動作では送信されなかった文字を、 ポートがクローズされた 30 秒後にバッファにから捨ててしまうからです。 バッファは 4096 文字まで保持できますが、 プリンタでフロー制御が使われており、 かつプリンタの速度が遅くて、印刷を行ったソフトウェアがポートを クローズした後 30 秒の間にデータを受け切れない場合には、 バッファの内容の末尾の部分が失われることになります。 コマンド
を行って、短いファイルなら完全にプリントアウトされ、
長いファイルでは尻切れになるようなら、
おそらくこの状況にあります。
30 秒のインターバルは setserial (バージョン 2.12 以降) の "closing_wait" コマンドラインオプションによって調整できます。 通常マシンのシリアルポートは rc.serial というブートファイルから setserial を呼び出すことによって初期化されています。 問題になっている印刷用シリアルポートへのこの setserial の 実行を修正して、そのポートへの他のパラメータの設定と同時に closing_wait も設定するようにすれば良いでしょう。
次のページ 前のページ 目次へ |
[ |