USB Keyboard & Mouse を使う。


まえがき

USB port を増設した SPARC で USB Keyboard & Mouse を使えるようにする話。
ちょっと、役立たず。

うーんって感じ。
SunPCi で使うつもりで購入した、Sun Type 6 USB keyboard & Mouse ですが、このような USB keyboard & Mouse は、SPARC で使えるのか? と、チャレンジしてみました。

まずは、結論から。
USB Keyboard は、使えないことはないが、console が使えなくなるので、却下。

なぜかというと、SPARC は、boot 時に keyboard が接続されていないと、ttya を console にしてしまうという仕様になっています。
(eeprom でいうとこの、output-device と input-device を ttya にしてしまう)

OBP 上で、devalias あるいは nvalias を叩いてもらえばわかると思うのですが、 Keyboard という alias がすでに存在しています。
SPARC で USB Keyboard を使えるようにするためには、この keyboard alias の device path を USB Keyboard の device path に書き換えてあげなければいけない のですが、これを USB keyboard の device path に書き換えてしまうと、どーゆー わけか keyboard が見つからない扱いになり、console が ttya になってしまうのです。

ここらへん、Sun Blade に搭載される OBP 4.x では、対策が施されていると思う のですが、USB Keyboard & Mouse をサポートしていない、OBP 3.x では、どーし ようもないということで。

たぶん、keyboard alias の device path を probe しにいくけど、OBP 3.x には USB keyboard 対策のコードが入っていないので、確認しようがないんじゃないかと。
しかし、OS が起動してしまえば、USB 関連の driver が load されるので、 consconfig_dacf module がきちんと、処理をおこなってくれるのかなと。
これが、さとうの予想です。

しかーし、Window System は、console 上ではなく、frame buffer を利用するので そのような場合でも、きちんと、起動してくれます。
というわけで、console は使えなくなるけど、Window System 上であれば USB Keyboard はきちんと、使えるのです。
実際に、このような環境下で動作する Ultra 10 と、それに接続された Sun Type 6 USB Keyboard で、このネタを書いています。
でも、こんなのは、受け入れようと思う人は、まず、いないと思うので却下という ことで。

一方、USB Mouse は、使えます。問題ないっす。
おきにな mouse を使えるのではないかと。

と、言うわけで、いーみなーいじゃーんって匂いがすでに漂っていますが、どうすれば 使えるか書こうかなと。
Mouse だけが無難。
まず、USB port に keyboard と Mouse を接続します。 その後、/devices 配下から、目的の USB keyboard & Mouse の device path を見つけだします。
一番、手っ取り早いのは、dmesg に出力されるメッセージからかな。

USB Kyeboard を挿すと、
usba: [ID 855233 kern.info] USB-device: keyboard@3, hid6 at bus address 5
genunix: [ID 936769 kern.info] hid6 is /pci@1f,0/pci@1/usb@2/hub@1/keyboard@3
genunix: [ID 408114 kern.info] /pci@1f,0/pci@1/usb@2/hub@1/keyboard@3 (hid6) online

USB Mouse を挿すと、
usba: [ID 855233 kern.info] USB-device: mouse@4, hid5 at bus address 6
genunix: [ID 936769 kern.info] hid5 is /pci@1f,0/pci@1/usb@2/hub@1/mouse@4
genunix: [ID 408114 kern.info] /pci@1f,0/pci@1/usb@2/hub@1/mouse@4 (hid5) online

こんな感じのメッセージが出力されるけど、各出力の 2 行目の
/pci@1f,0/pci@1/usb@2/hub@1/keyboard@3
/pci@1f,0/pci@1/usb@2/hub@1/mouse@4
が、目的の device path っす。
故に、さとうの環境では、以下のようになります。
USB keyboard
/pci@1f,0/pci@1/usb@2/hub@1/keyboard@3

USB Mouse
/pci@1f,0/pci@1/usb@2/hub@1/mouse@4
この device path をメモって、お使いの SPARC を PROM モードにしてください。
ここで、nvalias コマンドを利用して、keyboard alias と mouse alias を作成し、先ほどメモった USB keyboard と Mouse の device path それぞれの alias にブチ込みます。

すでに、keyboard alias と mouse alias は存在しますが、同名の alias が存在する場合は、あとから追加した alias のほうが有効になるようです。
(じゃないと、使えないよな)
それから、device path は、決めうちなので、挿すポートによって変わります。あわてないように。
以下のような感じで nvalias を実行します。

USB keyboard の場合
ok nvalias keyboard /pci@1f,0/pci@1/usb@2/hub@1/keyboard@3

USB Mouse の場合
ok nvalias mouse /pci@1f,0/pci@1/usb@2/hub@1/mouse@4
設定した、値を NVRAM に保存するため、nvstore コマンドを実行します。
これを忘れると、リセット時に無効になってしまいます。
ok nvstore
いじょ。
あとは、reset 実行するか、boot するだけ。
これで、起動時に、consconfig_dacf が USB Keyboard と Mouse を使えるように設定してくれます。
しかし、冒頭でも書きましたが、USB Keyboard を使うようにしてしまうと、console というか OBP も使えなくなって  しまうので戻したくなった場合に注意が必要です。
普通の Keyboard & Mouse を使いたくなった場合は、普通のキーボードをつないで、電源を入れ、ピーっとなったら  banner が出るまで、STOP + N を押し続けます。
これは、NVRAM の初期化にあたる操作で、普通の keyboard を使うためには、kyeboard alias を消さなければならな  いので、こーするしかありません。
なにか、変数をいじってある場合は、きちんとメモっておいてくださいね。
 あとは、eeprom コマンドで、#eeprom nvramrc= 実行するくらいかな。

また、USB keyboard & Mouse は動作中に抜き差ししても、システムが落ちることはありません。(多分)