Messages in cipher reflected in the looking glass
[ Yasuhiro Fujitsuki's Weblog ]
http://blogs.sun.com/thaniwa/date/20081129 2008年 11月 29日 土曜日

(JA) USB-Gigabit on CentOS 5.2

個人で所有しているノートPCの1台(49,800の安物^-^;)に搭載のEthernetは Gigabit Ethernetだと思っていたのですが、 実は Fast Ethernet (100Mbps) だったというオチがありました。orz
それで、どうしてもGigabit環境が欲しかったので、USB Gigabit を導入してみました。 USBの最高速が 480Mbps なので、 Gigabit のフルスピードは出ませんが、 Fast Ethernet よりは出るだろうということで。
今回買ってみたのは Buffalo LUA2-U2-KGT です。


このPCには CentOS 5.2 をインストールしているのですが、標準では認識しないので ドライバをインストールしてみました。
Fedora 10 とか Ubuntu 8.10 とか最新の Linux では不要です。 (既に上記のデバイスがそのまま使えるようになっています。)

このUSB-Gigabitは AX88178 を使っているらしいです。 LinuxのカーネルにはAX8817*系のドライバが組み込んであるのですが、 AX88178に対応しているのは 2.6.19 以降でした。
CentOS 5.2 は 2.6.18 なので、対応していないようです。 ということで、kernel 2.6.19 からこのドライバをいれるという方法を取りました。 (一応、バージョンが近いものを利用するということで。)

まず、kernel.org から linux-2.6.19.tar.gz をダウンロードし、解凍。
linux-2.6.19/drivers/usb/net/asix.c を編集し、LUA2-U2-KGT の情報を追加します。 (下記は現時点での最新カーネル 2.6.27.7 から引用。 LUA2-U2-KGT も LUA-U2-GT も中身が同じです。

        // Buffalo LUA-U2-GT 10/100/1000
        USB_DEVICE (0x0411, 0x006e),
        .driver_info =  (unsigned long) &ax88178_info,
}, {

ここではデバイス情報を登録しているのですが、 デバイス情報は lsusb で確認できたりします。
Logitech(Logicool) の VX Revolution を使っているのですが、CentOS は MX610 だと認識してますが…。^-^;

# lsusb
Bus 003 Device 001: ID 0000:0000  
Bus 004 Device 001: ID 0000:0000  
Bus 001 Device 001: ID 0000:0000  
Bus 001 Device 003: ID 0411:006e MelCo., Inc. 
Bus 006 Device 001: ID 0000:0000  
Bus 005 Device 001: ID 0000:0000  
Bus 002 Device 001: ID 0000:0000  
Bus 002 Device 002: ID 046d:c518 Logitech, Inc. MX610 Laser Cordless Mouse

あとは、ビルドです。下記のような感じで行えば、最小限のビルドで済みますので、 すぐにビルドできます。ビルド後、asix.ko, usbnet.ko を /lib/modules にコピーし、ロード。

ドライバのビルド
# cd linux-2.6.19/drivers/usb/net/
# make -C /lib/modules/`uname -r`/build SUBDIRS=`pwd` modules

ドライバのコピー
# cp asix.ko usbnet.ko /lib/modules/`uname -r`/drivers/usb/net/.

ドライバのロード
# modprobe asix
# modprobe usbnet

その後、デバイスを登録すれば起動時に認識するようになります。
下記は dmesg の該当部分を抜き出してみたところです。

eth0: Generic Marvell Yukon chipset Ethernet device
      PrefPort:A  RlmtMode:Check Link State


usbnet: no version for "struct_module" found: kernel tainted.
eth0: register 'asix' at usb-0000:00:13.5-3, ASIX AX88178 USB 2.0 Ethernet, 
usbcore: registered new driver asix
eth0: link down
eth0: link up, 1000Mbps, full-duplex, lpa 0xC5E1