CORY's twilight zone > 98備忘録 (tips)[an error occurred while processing this directive] > FreeBSD(98) で USB キーボードを使う

FreeBSD(98) で USB キーボードを使う

since 2000.06.29 / CORY

USB とはあまり縁のなさそうな(ハードウェアメーカーはほとんどサポートしてくれませんし(;_;)) PC-98 シリーズですが、巷で売られている拡張ボードをPCIバスに搭載することで、標準でUSB I/Fを搭載している機種でなくても、USBを使用することができます。また、極一部ではありますが USB を標準搭載した機種もあります。(※)

VALUESTARCEREBPC-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キーボードの使用方法を記します。

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

usbugen は必須、キーボード・マウスを使うときは uhidukbdums も必要、その他(※)は必要に応じて組み込みます。 使用している拡張ボード (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 で認識されていますねぇ(^^)。

USBマウスを使う

ums を入れたカーネルを再構築して再起動すると、認識されて使えるようになっています(※)。ums0 として認識された場合は、試しに

# moused -p /dev/ums0 -t auto

としてみて、マウスを動かしたときにコンソール上でマウスカーソルが動くか確かめてみましょう。

※FreeBSD 4系列以前では初回のみ MAKEDEV が必要になります。下記参照。

% su
# cd /dev
# ./MAKEDEV ums0
# moused -p /dev/ums0 -t auto

USBキーボードを使う

カーネル再構築

ここでは、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

その後、dmesgukbd0 が認識されていることを確認(※)。おそらく追加されたUSBキーボードは kbd1 として認識されていると思います(この場合、dmesg に kbd1 at ukbd0 と表示されています)

※この後、FreeBSD 4系列以前では初回のみ MAKEDEV が必要になります。下記参照。

% su
# cd /dev
# ./MAKEDEV kbd1

ただし、これだけでは動きません。FreeBSD では 1つのコンソールにつきキーボードを 1つ選んで使いますので、標準キーボードと入れ替えで使用することになります。

kbdcontrol < `tty` -k /dev/kbd1 -l jp.106.kbd

これでキーボードが入れ替わったはずです(同時にキーマップも設定し直しています)。元に戻したいときは同様に、

kbdcontrol < `tty` -k /dev/kbd0 -l jp.pc98.kbd

とします。

`tty` の部分には、/dev/ttyv0 などコンソールで現在使っている端末名を入れます。現在使っているコンソールのキーボードを変える場合には < `tty` の部分は省略できます。 操作を間違える、うっかり [COPY] キーを押した(※)などでキーボードが使えなくなった時には、ssh などで接続して他の端末から変えることができます。

仮想コンソール使用時、[COPY] や [GRPH] + ファンクションキーを押してコンソールを切り替えると、予めキーボードも切り替えておかないと、標準キーボードに戻ります。

改版履歴

2010.01.12
サーバ更新に伴う変更、8.0-RELEASE までに対応し古い記述を更新、注釈を少し追加。
2005.05.15
FreeBSD 5系列に対応、補足
2000.06.29
初版:原題「FreeBSD(98) 4.0R でUSBマウス・キーボードを使う」

更新日 : 2010年01月12日 (336)

CORY's twilight zone > 98備忘録 (tips)[an error occurred while processing this directive] > FreeBSD(98) で USB キーボードを使う

[an error occurred while processing this directive]
Copyright © 1996-2019 CORY / ISAKA Yoji. Some rights reserved:
Creative Commons Attribution-Share alike 2.1 Japan.