CORY's twilight zone > 98備忘録 (tips)[an error occurred while processing this directive] > FreeBSD(98) で USB キーボードを使う
USB とはあまり縁のなさそうな(ハードウェアメーカーはほとんどサポートしてくれませんし(;_;)) PC-98 シリーズですが、巷で売られている拡張ボードをPCIバスに搭載することで、標準でUSB I/Fを搭載している機種でなくても、USBを使用することができます。また、極一部ではありますが USB を標準搭載した機種もあります。(※)
※VALUESTAR、CEREB、PC-9821F200 (Fine) など。
USB の普及期にあたる Windows 98 の全盛期には PC-9800 シリーズ自体の新規開発が打ち切られてしまった事もあり、残念ながら本体に標準搭載された機種は極わずかに留まりますが、VALUESTAR シリーズなどは他社に比べても早くから採用していたようです。他の機種でも PCI スロット(または Nr シリーズの CardBus スロット)に空きのある機種の場合は、市販の USB 拡張ボードを使って手軽に増設することができます。
FreeBSDは、UNIX系では極めて早く、3.1Rの頃よりUSBをサポートしており、近頃のバージョンのusbdはかなり安定してきているようです。USB機器も増えてきた昨今、PC-98でも、この恩恵にあずからない手はありません(^^)。
ちなみに、今回使用したUSB機器は全て、PC-98シリーズは動作対象外ですが、ちゃんと動いてくれますね(^^)。興味のある方は試してみてください。あくまで自己責任で、ですが。
ここでは、USBマウスとUSBキーボードの使用方法を記します。
PC-98 用 GENERIC カーネルでは USB は無効化されているので、まずはカーネルを再構築しておきましょう。FreeBSDハンドブック第8章「FreeBSD カーネルのコンフィグレーション」を参考に、カーネル再構築を行います。
# USB support device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface device ehci # EHCI PCI->USB interface (USB 2.0) device usb # USB Bus (required) device ugen # Generic device uhid # "Human Interface Devices" device ukbd # Keyboard device ums # Mouse
usb と ugen は必須、キーボード・マウスを使うときは uhid と ukbd・ums も必要、その他(※)は必要に応じて組み込みます。 使用している拡張ボード (I/F) が UHCI か OHCI か判らない場合は、とりあえず uhci / ohci の両方を有効にしておくこともできます。増設ボードの場合は、説明書などに書いてあると思います。なお、後付けの USB 1.1 対応 I/F には OHCI が多いようです。
※uhci/ohci は、USB I/F により異なります。また、OS と I/F がUSB 2.0 に対応している場合は ehci も入れておくとよいでしょう。なお、今回関係のないデバイスは省略していますが、他の USB 機器を使う場合はそれらも有効にしておきましょう(先頭の # を外す)。
ちなみに、ukbdを有効にする場合には、次々項を参照してください。
カーネルを構築して再起動すると、次のように認識されます。 FreeBSD 6.2-RELEASE が稼働する PC-9821St15 に NEC μPD720100 (OHCI/EHCI) を搭載したPCIボード(玄人志向 USB2.0PCI、EHCI も認識しているがボードの不具合により USB 2.0 は動作しない^^;)を増設した場合の例を以下に示します。
ohci0: <NEC uPD 9210 USB controller> mem 0x20002000-0x20002fff irq 9 at device 9.0 on pci0 ohci0: [GIANT-LOCKED] usb0: OHCI version 1.0 usb0: <NEC uPD 9210 USB controller> on ohci0 usb0: USB revision 1.0 uhub0: NEC OHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub0: 3 ports with 3 removable, self powered ohci1: <NEC uPD 9210 USB controller> mem 0x20003000-0x20003fff irq 10 at device 9.1 on pci0 ohci1: [GIANT-LOCKED] usb1: OHCI version 1.0 usb1: <NEC uPD 9210 USB controller> on ohci1 usb1: USB revision 1.0 uhub1: NEC OHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub1: 2 ports with 2 removable, self powered ehci0: <NEC uPD 720100 USB 2.0 controller> at device 9.2 on pci0 ehci0: Could not allocate irq device_attach: ehci0 attach returned 6 ukbd0: NEC PC98KEY USB KBD/M, rev 1.00/1.00, addr 3, iclass 3/1 kbd1 at ukbd0 ums0: NEC PC98KEY USB KBD/M, rev 1.00/1.00, addr 3, iclass 3/1 ums0: 3 buttons ums1: Adomax Adomax USB Mouse, rev 1.00/0.00, addr 4, iclass 3/1 ums1: 3 buttons and Z dir.
#なにげに、98配列USBキーボードに搭載されているPS/2ポートも ums0 で認識されていますねぇ(^^)。
ums を入れたカーネルを再構築して再起動すると、認識されて使えるようになっています(※)。ums0 として認識された場合は、試しに
# moused -p /dev/ums0 -t auto
としてみて、マウスを動かしたときにコンソール上でマウスカーソルが動くか確かめてみましょう。
※FreeBSD 4系列以前では初回のみ MAKEDEV が必要になります。下記参照。
% su # cd /dev # ./MAKEDEV ums0 # moused -p /dev/ums0 -t auto
ここでは、NEC PK-KB002 98配列USBキーボードを例に説明します(ぉぃ。
#だってこれ書いた当時は98配列キーボードしか持っていなかったんだもの(笑)
標準キーボード(pckbd)とUSBキーボード(ukbd)を併用する場合は、カーネル構築時に KBD_INSTALL_CDEV オプションが必要です。最近のバージョンでは既に有効になっていますが、念のため前述のカーネル再構築をする前に確認しておきましょう。
# keyboard driver device pckbd # PC98 keyboard options KBD_INSTALL_CDEV # install a CDEV entry in /dev
なお、FreeBSD(98) 4.0R-Rev01 で確認したときは、カーネル構築を行う際、make depend の最中に
../../dev/usb/ukbd.c:45: opt_ukbd.h: No such file or directory mkdep: compile failed *** Error code 1 Stop in /usr/src/sys/compile/YAKKO.
とエラーを吐いて止まってしまいました(^^;。そのときは make depend の前に touch opt_ukbd.h としてやりましょう。
無事に make できたら、新しいカーネルを make install し、reboot します。
新しいカーネルで起動した後、まずは現在(PC-9800標準キーボード)のキーマップを保存しておきます。
※たとえ98配列キーボードであっても一般に日本語配列USBキーボードは106/109互換キーボードとして動作するため、FreeBSD(98) では keymap を変更する必要があるのです。 逆に、AT互換機で98配列キーボードを使うときは keymap を変える必要はありません。
なお、FreeBSD の大抵のバージョンでは /usr/share/syscons/keymaps/jp.pc98.kbd がすでに存在すると思います。これが確認できれば保存は不要ですが、無かったときに後々面倒なので、念のためにどこかに保存しておくと良いかもしれません。
% su # kbdcontrol < /dev/ttyv0 -d > ~/jp.pc98.kbd
その後、dmesg で ukbd0 が認識されていることを確認(※)。おそらく追加されたUSBキーボードは kbd1 として認識されていると思います(この場合、dmesg に kbd1 at ukbd0 と表示されています)。
※この後、FreeBSD 4系列以前では初回のみ MAKEDEV が必要になります。下記参照。
% su # cd /dev # ./MAKEDEV kbd1
ただし、これだけでは動きません。FreeBSD では 1つのコンソールにつきキーボードを 1つ選んで使いますので、標準キーボードと入れ替えで使用することになります。
これでキーボードが入れ替わったはずです(同時にキーマップも設定し直しています)。元に戻したいときは同様に、
とします。
`tty` の部分には、/dev/ttyv0 などコンソールで現在使っている端末名を入れます。現在使っているコンソールのキーボードを変える場合には < `tty` の部分は省略できます。 操作を間違える、うっかり [COPY] キーを押した(※)などでキーボードが使えなくなった時には、ssh などで接続して他の端末から変えることができます。
※仮想コンソール使用時、[COPY] や [GRPH] + ファンクションキーを押してコンソールを切り替えると、予めキーボードも切り替えておかないと、標準キーボードに戻ります。
更新日 : 2010年01月12日 (2259)
CORY's twilight zone > 98備忘録 (tips)[an error occurred while processing this directive] > FreeBSD(98) で USB キーボードを使う
[an error occurred while processing this directive]