2005/01/05
・ KURO-BOX/HG(玄箱HG)の情報は、KURO-BOX に比べて少なめ。プリントサーバにする手順も、KURO-BOX 用の情報がほとんどなので混乱し易い。
# modprobe usb-ohci # modprobe printer
・ 「とやってモジュールを組み込む」なんて情報があって、modprobe?モジュールって何?というところから始まる。デバイスドライバはカーネルのローダブル・モジュールになっていて、それを modprobe で操作するものと理解。で、usb-ohci.o、printer.o はどこに?
・ モジュールを作るにはカーネルをコンパイルする必要があるなんて記述を見て、あらら玄人志向にソースを申し込まなきゃいかんの?と思ったら、Debian化キットを作って下さっている玄箱うぉううぉう♪に、「玄箱用モジュール詰め合わせ」を発見。これには usb-ohci.o、printer.o が含まれていた。
・ Debian化玄箱では、モジュール・ファイルは /lib/modules/2.4.17_kuro-box/ にあり、「玄箱用モジュール詰め合わせ」も同じパスに展開されるもの。しかし、modprobe や depmod を実行すると、/lib/modules/2.4.17_mvl21/ が無いと文句を言う。
・ モジュール・ファイルの位置を誤魔化しても、バージョンが合わないと言われる。
$ sudo insmod -f usb-ohci.o
Warning: kernel-module version mismatch
usb-ohci.o was compiled for kernel version 2.4.17_kuro-box
while this kernel is version 2.4.17_mvl21
Warning: loading usb-ohci.o will taint the kernel: forced load
usb-ohci.o: init_module: No such device
Hint: insmod errors can be caused by incorrect module parameters, including inva
lid IO or IRQ parameters
・ 「玄箱用モジュール詰め合わせ」と一緒に、.o ファイルのバージョン名文字列を HG 用にバイナリ置換する perl スクリプトがあったのを思い出す。でも今見ると玄箱うぉううぉう♪からは消えている。何か問題あったかな?と思ったけれど、同等の ruby スクリプトでまとめて置換。/etc/modules.conf をいじって、depmod などがモジュール・ファイルを探す場所を変更して、depmod -a。
$ sudo depmod -ae depmod: *** Unresolved symbols in /lib/modules/kuro_modules_2004_12_19/kernel/dr ivers/block/floppy.o depmod: blk_ioctl depmod: register_disk depmod: __wake_up <たくさん続く>
・ KURO-BOX 用モジュールは、パッチしたくらいでは KURO-BOX/HG には使えないらしいとようやく諦める。Debian化キットは非HG玄箱で作られていて、モジュール構成が違うのだ。でもそれで悪影響は?
$sudo lsmod Module Size Used by Not tainted
・ ローダブルモジュールを(今のところ)使ってないから問題ないらしい。
・ ん?そもそも Debian化直前のバックアップや、最新ファームウェアに該当モジュールがあるはず。と気づいて探す。でも /lib/modules/2.4.17_mvl21/kernel/drivers/usb/ にはこれだけ。usb-ohci.o、printer.o が無い。
-rw-rw-rw- 1 user group 10804 Oct 19 17:23 acm.o -rw-rw-rw- 1 user group 21876 Oct 19 17:23 bluetooth.o -rw-rw-rw- 1 user group 7236 Oct 19 17:23 dc2xx.o -rw-rw-rw- 1 user group 14440 Oct 19 17:23 mdc800.o -rw-rw-rw- 1 user group 15532 Oct 19 17:23 scanner.o -rw-rw-rw- 1 user group 27204 Oct 19 17:23 usb-midi.o -rw-rw-rw- 1 user group 21320 Oct 19 17:23 usbnet.o
・ これで USB 接続のプリンタが動く?玄人志向の BBS には動かない事例が。Debian化前に、プリンタをつないでみなかったのが悔やまれた。
・ プリンタをつないで /var/log/messages を見てみると、ある程度は認識している様子。
Jan 4 17:15:48 ****** kernel: hub.c: new USB device 00:0e.1-1, assigned address2 Jan 4 17:15:48 ****** kernel: printer.c: usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x04A9 pid 0x1061
・ ここに来て、KURO-BOX/HG では USB プリンタ・ドライバなどはローダブル・モジュールではなく、カーネルに内蔵されているのでは?と思い始めた。
・ ならば他に必要なものは?まずはプリンティング・システムが入ってない。オリジナルの玄箱には lprng が入っていた事がわかり、これを入れる。/etc/samba/smb.conf をいじって、Windows マシンからプリンタドライバをインストールできるようになった。しかしジョブ一覧窓のタイトルに「lp (***** 上)アクセス拒否 - 接続できません」と表示される。プリンタのプロパティ・ダイアログが出て来るまでが異常に遅い。プリンタウインドウに「アクセス拒否」と表示されるという事例を見つけるが、「印刷自体は正常に行なわれます。」とある。ここでは印刷はできていない。
・ 玄箱ローカルの印刷ジョブはキューに投入できているので、そこからプリンタまでの間がつながっていないらしい。その辺りを司っているものは?名前からはさっぱり何だかわからなかった murasaki が関係ありそうだと思い始め、槻ノ木隆のPC実験室 Gigabit Ethernet対応「玄箱」(Part2)〜USBを使えるようにするで学習。ここから開発者のページ Murasaki (another HotPlug) にもたどり着いた。
・ 知識を得た上でオリジナル玄箱のディレクトリ・ツリーを調べてみると、/etc/murasaki/murasaki.preload というファイルに、usb-ohci、printer の記載が見つかった。/var/log/messages にもこれらの名前が現れているのが見えてくる。
Jan 5 13:40:49 ****** kernel: usb-ohci.c: USB OHCI at membase 0xc9006000, IRQ 19 Jan 5 13:40:49 ****** kernel: usb-ohci.c: usb-00:0e.1, NEC Corporation USB (#2) Jan 5 13:40:49 ****** kernel: printer.c: v0.11: USB Printer Device Class driver
・ そこで apt-get install murasaki。/etc/murasaki/ の下をオリジナル玄箱と見比べて、オリジナルの内容をそっくりコピーすれば良さそうと判断。
・ プリンタの USB ケーブルを抜差しして /var/log/daemon.log を観察。
抜いたとき: Jan 5 15:35:10 ****** murasaki.usb[281]: device is removed Jan 5 15:35:10 ****** murasaki.usb[281]: vendor:0x4a9 product:0x1061 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x7 Isubclass:0x1 Iprotocol:0x2 Jan 5 15:35:10 ****** murasaki.usb[281]: MATCH(printer) -> match_flags:0x80 vend or:0x0 product:0x0 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x7 Isubclass:0 x0 Iprotocol:0x0
挿したとき: Jan 5 15:36:21 ****** murasaki.usb[282]: device is added Jan 5 15:36:21 ****** murasaki.usb[282]: vendor:0x4a9 product:0x1061 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x7 Isubclass:0x1 Iprotocol:0x2 Jan 5 15:36:21 ****** murasaki.usb[282]: MATCH(printer) -> match_flags:0x80 vend or:0x0 product:0x0 Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0x7 Isubclass:0 x0 Iprotocol:0x0 Jan 5 15:36:21 ****** modprobe: modprobe: Can't locate module printer
・ 「Can't locate module printer」って言ってる。
・ /var/log/daemon.log にこんなのが出ていた。char-major-6 のデバイスってパラレルポートだってよ?
Jan 5 15:36:21 ****** modprobe: modprobe: Can't locate module printer Jan 5 15:49:50 ****** modprobe: modprobe: Can't locate module char-major-6
・ ああ、この事なのね。
現状の lp デバイス。 crw-rw---- 1 root lp 6, 0 4月 25 2004 /dev/lp0 Debian化前。 drwxr-xr-x root/root 0 2003-05-12 17:38:57 dev/usb/ crw-rw-rw- root/lp 180,0 2002-04-11 23:25:15 dev/usb/lp0
$ sudo mkdir /dev/usb $ sudo mknod /dev/usb/lp0 c 180 0 $ sudo chown root:lp /dev/usb/lp0 $ sudo chmod 660 /dev/usb/lp0
・ これに合わせて /etc/printcap を修正。テストページ印刷ができるようになった。
・ 今の悩みは、印刷済みジョブが削除されない事。/etc/samba/smb.conf で、print command を明示して lpr に -r を指定しているのだけど。
print command = /usr/bin/lpr -Plp -r %s
・ と思ったら、どんどん印刷していると、古い印刷済みジョブは消えている。1〜2個消え残るという現象らしい。