----------
はじめに
----------

Morphy 企画で作っていた USB-IO を Linux 2.6 で使うためのドライ
バです。成松宏さんが作成された musbio-1.01 (Linux 2.4.9) に手
を加えて Linux 2.6 対応にしたものになっています。

Morphy 企画は無くなってしまいましたが、Km2Net や Techno Kit で
同じものが手に入ります。このドライバはこれらの全てで動きます。

自分が Linux 2.6 で使いたいがために手を加えたものですので、成松さ
んの元のドライバにあったいろんな機能は、port1:port0 を連結した12
ビットの2進での入出力以外、ばっさり削ってしまいました。もしも、他の
機能が欲しい方は、そのためにソースが公開されているのですから、ご自
分でアレンジしてみてはいかがでしょうか。それだけなら難しくないはずで
す。

今回、このドライバを公開するにあたって、成松宏さんが快く許可してく
ださったうえ、ライセンスも GPL とすることを認めてくださいました。
ありがとうございました。

----------
インストール
----------

(1) Linux 2.6.x のカーネル(x の所には実際には数字が入ります)の
ソースコードをダウンロードします。Linux 2.6.x のカーネルのソースは, 
例えば
      http://www.kernel.org/
からダウンロードできます。

(2) ダウンロードしたファイルを展開し、root になってから、
       ln -s 'kernel-directory' /usr/src/linux-2.6 
('kernel-directory' の所には実際に展開したディレクトリ名を、例えば
       ln -s /usr/src/linux-2.6.9 /usr/src/linux-2.6
のように、フルパスで書いてください)とします。この結果、
/usr/src/linux-2.6/ へ行くとカーネルのソースが見れるようになった
はずです。

(3) /usr/src/linux-2.6/drivers/usb/input/hid-core.c を次のよう
に編集します:まず、

static struct hid_blacklist {
        __u16 idVendor;
        __u16 idProduct;
        unsigned quirks;
} hid_blacklist[] = {

        { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01, HID_QUIRK_IGNORE },
        { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10, HID_QUIRK_IGNORE },
        { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_20, HID_QUIRK_IGNORE },
        { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_21, HID_QUIRK_IGNORE },
        { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22, HID_QUIRK_IGNORE },
        { USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, HID_QUIRK_IGNORE },
...(似たような行がたくさんつづいている)...

という部分を探し出し、このリストのどこでもいいですから,

        { 0x1352, 0x0100, HID_QUIRK_IGNORE },
        { 0x0BFE, 0x1000, HID_QUIRK_IGNORE },
        { 0x0BFE, 0x1001, HID_QUIRK_IGNORE },
        { 0x0BFE, 0x1002, HID_QUIRK_IGNORE },
        { 0x0BFE, 0x1003, HID_QUIRK_IGNORE },
        { 0x12ED, 0x1003, HID_QUIRK_IGNORE },

を追加してください。ただし, このリストの最後は
        { 0, 0 }
でなければならないので、そこには触らないようにしましょう。

この変更をほどこさないと、USB-IO は hiddev がぶんどってしまい、
制御することができません。

(4) カーネルを作り直し、新しいカーネルで起動しましょう。
注意: カーネルを作り直すときに、rio500 をサポートする場合、下記の注
意も読んでください。

(5) morphy-usbio.ko を作り, インストールします: この README
があるディレクトリで
        make
とすると morphy-usbio.ko というファイルができるはずです。root に
なってから、morphy-usbio.ko を /lib/modules/'kernel-name'/ とい
うディレクトリ('kernel-name' の部分には実際にはあなたのカーネルの
名前が入ります)へコピーし、このディレクトリで
        /sbin/depmod -a
を実行してください。これでインストールは終りです。

(6) USB-IO を差したときに自動的にモジュールがインストールされるように
するには、/etc/hotplug/usb.usermap に

morphy-usbio         0x0003      0x1352   0x0100    0x0000       0x0000       0x00         0x00            0x00            0x00            0x00               0x00               0x00000000
morphy-usbio         0x0003      0x0BFE   0x1000    0x0000       0x0000       0x00         0x00            0x00            0x00            0x00               0x00               0x00000000
morphy-usbio         0x0003      0x0BFE   0x1001    0x0000       0x0000       0x00         0x00            0x00            0x00            0x00               0x00               0x00000000
morphy-usbio         0x0003      0x0BFE   0x1002    0x0000       0x0000       0x00         0x00            0x00            0x00            0x00               0x00               0x00000000
morphy-usbio         0x0003      0x0BFE   0x1003    0x0000       0x0000       0x00         0x00            0x00            0x00            0x00               0x00               0x00000000
morphy-usbio         0x0003      0x12ED   0x1003    0x0000       0x0000       0x00         0x00            0x00            0x00            0x00               0x00               0x00000000

という6行を追加してください。

rio500 サポートをカーネルに入れたい方への注意:
usb デバイスの minor 番号が足りない状況にあります。
rio500 (minor = 64〜79) を使うことにする場合は、minor 番号がぶつかる
ので、このディレクトリにある morphy-usbio.c の中の MUSBIO_MINOR の
定義を変える必要があります。MUSBIO_MINOR の値は16の倍数でなければなりま
せんが、変更したことにより、ぶつかるものがでてきますので、それはカーネル
を作る際にサポートを入れないようにしてください。

-------
使いかた
-------

USB-IO デバイスを USB のプラグに差すと, /dev の下に /dev/usbio0 とい
うデバイスファイルが自動的に現れます(2つ以上の USB-IO を差した場合は、
順番に /dev/usbio1, /dev/usbio2 などが現れます)。USB-IO を USB から
抜くとデバイスファイルは自動的に無くなります。

echo 010101010101 >/dev/usbio0

で 12ビットの出力ができます。上位4ビットが port1, 下位8ビットが port0 
への出力となります。

head -1 /dev/usbio0

で 12ビットの入力ができます。上位4ビットが port1, 下位8ビットが port0
からの入力となり、2進数で表示されます。

注意: /dev/usbio0 への読み書きは root でないとできません。root ではな
い人が読み書きしたい場合は、C などでプログラムを書き、コンパイルしたファイ
ルを root の持ち物にした上で setuid ビットを立てるとよいと思います。

---------------------------------------------------------------------------

2004/12/10 いとーひさし (kuro at neko dot ac)