Kernel 2.2.10〜2.2.13 において、 旧型 VAIO 505 (無印,X,EX,GX)でUSBを使う方法とUSBドライバのパッチを紹介します。 旧形 VAIO に限らず、BIOSがIntel 82371AB PIIX4 の USB Controller に IRQを割り当ててくれないマザーボードなら試してみください。なお開発版カーネル(2.3.xx)では、Intel 82371AB PIIX4 に IRQ を割り当ててくれるので、ここで紹介するパッチは不要です。Kernel 2.2.13 に Kernel 2.3.28 の USBバックポートパッチをあてる場合には、 PCIデバイスドライバ用パッチ をお使い下さい。
USBドライバ・パッチ
USBドライバへあてるパッチは こちらです。('99/09/07修正)
このパッチは無保証です。自分の責任でご利用下さい。
パッチの当て方は、
cd /usr/src/linux/です。 無事にパッチがあたったら、 USB Mania を参考にして、Kernelを再構築し uhciデバイスファイルを作成すれば、 USBデバイスが使えるようになります。
patch -p1 < usb-irq.patch
パッチ作成環境は以下のとおりです。
BIOSアップデートプログラムは、 SONYのサイトからダウンロードできます。
OS Vine Linux 1.1 , Kernel 2.2.10 H/W VAIO PCG-505X/64 BIOS R3128R0にアップ済み, Plug&Play OS=Noに設定 USBデバイス USB Mouse(ELECOM GRAST USB ver.)
使い方
デフォルトではUSBコントローラに IRQ 10 を割り当てています。 割り当てる IRQ を変える場合には、 "irq=n" と引数をつけてモジュールをロードします。 IRQ 11 を割り当てる例を以下に示します。
/sbin/modprobe usb-uhci irq=11割り当て可能な IRQ は、3,4,5,6,7,9,10,11,12,14,15 です。 IRQの重複チェックはしていないので、気をつけましょう。
USBドライバ動作実績
動作実績リストです。
H/W BIOS OS 傾向 対策 Abit BH6
LinuxMandrake 6.1 BTC の USB キーボード(型名7932) が動作
VAIO PCG-505X/64 R3128R0にアップ済み Vine Linux 1.0beta, Kernel 2.2.9 IRQが11になる
VAIO 505X アップデート無し RedHat6.0, Kernel 2.2.9 IRQが15になる。
USBマウスは使えるが、動作が鈍くなる。hdparm -c 1 /dev/hda で解消
理由は不明。VAIO 505EX R3128にアップ済み debian2.1, Kernel 2.2.10 IRQが11になる
Let's note CF-A44
LogitechのホイールMouseが使用可能
無印 VAIO 505 アップデート無し TLJ3.0, Kernel 2.2.10-ac2 IRQが15になる
Arvel DASH MOUSE MINIが使用可能
Let's note CF-S51
Kernel 2.2.10
VAIO 505GX/4G アップデートなし
Kernel 2.2.10 & Kernel 2.3.10
USB Mouse(ELECOM GRAST USB ver.)
情報を下さった皆さん、ありがとうございます。
USBドライバ・パッチの簡単な説明
たいしたことは書いてませんが、これからデバイスドライバをハックしようという人の参考になれば幸です。
VAIO 505のUSBコントローラのデータシートは、 ftp://download.intel.com/design/intarch/datashts/29056201.pdf で入手できます。
VAIO 505Xでは、USBコントローラへ割り込み(IRQ)が割り当てられていません。 IRQの割り当て等は、本来 BIOS や PnP OS が行うべき処理であり、デバイスドライバが勝手にやるのはいけないことです。
このパッチは、FreeBSDのPCI初期化ルーチンにおいて Intel 82371AB PIIX4 の PCI to ISA/EIO Bridge を初期化している手順をまねたものです。 ただし PCI 初期化ルーチンに手を入れるのが面倒くさかったので、USBドライバの初期化ルーチン内で、同じことをやってるだけです。
FreeBSDのパッチは、 こちらで参照 できます。
このパッチは、Intelの82371AB PIIX4 を搭載したPCで、BIOSによりUSBコントローラへIRQが割り当てられていない場合に有効です。
具体的には、
/sbin/modprobe usb-uhci としたときに、 Device or resouce busy というメッセージが出て、 lspci -vv としたときに、 00:01.2 USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01) Interrupt: pin D routed to IRQ 0 ^^^^^^^ と表示されて、IRQが割り当てられていない場合です。パッチしたコードでは、空いているIRQを探したりせずに、無条件にIRQ=10を割り当てるようにしています。
よってIRQが衝突する可能性があるもしくは衝突した場合には、割り当てるIRQを変更しなければなりません。 割り当てるIRQを替える場合は、
route = 0x0a;
としている個所の0x0a(=10)を、替えたいIRQの値に変更してください。 ただし、パッチはIRQ=9,10,11,12,14,15しか考慮していません。わかる人はわかると思います。(^^;; 適当に修正しましょう。
USBドライバにパッチをあてるまで、試行錯誤したメモを こちら においてます。
リンクはご自由にどうぞ。
当ホームページに誤り,不適切な内容等がございましたら、 khiyama@d1.dion.ne.jp までメールにてお知らせ下さい。