MELCO ( BUFFALO ) LUA-KTX を Linux で使う

安かったので思い切って買ってきたが、やはりそのままでは使えなかった。環境は RedHat Linux 7.3

webを検索すると、ここの情報がヒット。しかしもはや、ここからリンクされたサイトからはソースをダウンロード出来ない模様。 ソースツリーを確認すると、rtl8150.c は存在したが、ありがちなことに、VENDOR-ID, DEVICE-ID が設定されていないようだ。また、redhatのカーネルに取りこまれたことで、ソースがだいぶ変更されているようで、上記サイトのパッチもそのまま適用することはできない。

さらに、rtl8150.c をキーワードにweb全体を検索。色々なところにソースがあった。

ここの、rtl8150.c は、上記のものに近いようだ。しかも、すでにデバイスのリストに LUA-KTX が含まれている!! 早速これを


   gcc -D__KERNEL__ -I/usr/src/linux/include -DMODULE -c -o rtl8150.o rtl8150.c

っとやって、コンパイル。あとは

んで、USBポートに LUA-KTX を差しこんで再起動すると … 起動中に "Unresolved symbol" とエラーがでるものの、通信ができるようになっており、モジュールは正常に動いているようだ。

しかし、起動時のエラーが気にくわないし、せっかくカーネルにソースが含まれているのだから、これを使えるように挑戦してみる。

まず、/usr/src/linux/drivers/usb/rtl8150.c を適当な場所にコピーして、


    /* table of devices that work with this driver */
    static struct usb_device_id rtl8150_table [] = {
            { USB_DEVICE(VENDOR_ID_REALTEK, PRODUCT_ID_RTL8150) },
            { USB_DEVICE(0x0411, 0x0012) },  /* この行を追加 */
            { }
    };

のように、LUA-KTX の ID を追加して、上記と同じように単体でコンパイルしてみた。コンパイルは通るものの、モジュールを組みこもうとするとエラー。なので、あっさりこの方法はやめにして、目茶苦茶ええかげんやなあと思いつつも


    /*#define VENDOR_ID_REALTEK             0x0bda*/  /*この行と次の行をコメントアウト*/
    /*#define PRODUCT_ID_RTL8150            0x8150*/
    #define VENDOR_ID_REALTEK               0x0411    /*この行と次の行を追加*/
    #define PRODUCT_ID_RTL8150              0x0012

のように、元々定義されているIDの部分を置き換えてごまかしたらうまく動いた。(どなたかまっとうな方法を教えてください…)。しかしながら、やはり起動中にエラーが出て気持ち悪いので、今度はソースツリーの中のファイル /usr/src/linux/drivers/usb/rtl8150.c を直接上記のように編集して、

とやって、モジュールを作成(時間かかったぁ…)。でき上がった rtl8150.o を使ったら 問題なくエラーも出さずに動くようになった。

しかし、今後 kernel のアップデートなんかがある度に毎回この作業をやるのはたまらないので、 上記コンパイル作業のログから、コンパイルオプションを確認すると


  cc -D__KERNEL__ -I/usr/src/linux-2.4.18-5/include -Wall -Wstrict-prototypes \
     -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -Wno-unused \
     -pipe -mpreferred-stack-boundary=2 -march=i686 -DMODULE -DMODVERSIONS \
     -include  /usr/src/linux-2.4.18-5/include/linux/modversions.h -DKBUILD_BASENAME=rtl8150 \
     -c -o rtl8150.o rtl8150.c

となっており、これを試すと、単体でも正常なモジュールをコンパイル出来た。

ちなみにこのデバイス、「USBハブに未対応」とあるが、今のところ ELECOM の UH-V4SWH 経由で問題無く使用できている。

2002/8/22: 追記

redhatからカーネルのアップデート kernel-2.4.18-10 が出たので入れ替えた。さて、rtl8150も作り直さねば…でももう大丈夫だもんねっ…っと思ったら、何もせんと動いた。rtl8150.cを見てみると、

    static struct usb_device_id rtl8150_table [] = {
            { USB_DEVICE(VENDOR_ID_REALTEK, PRODUCT_ID_RTL8150) },
            { USB_DEVICE(VENDOR_ID_MELCO, PRODUCT_ID_LUAKTX) },
            { }                             
    };

となっておりましたとさ。ちゃんちゃん。


[ 戻る ]