CentOS 6.2 でBUFFALOの無線LAN子機 WLI-UC-G301N を使う方法

事前準備
以下を事前に準備しておく。
●lha コマンドのインストール(バッファローのドライバexeを展開する用) ↓こんな感じでインストール。
# wget http://iij.dl.sourceforge.jp/lha/22231/lha-1.14i-ac20050924p1.tar.gz
# tar zxvf lha-1.14i-ac20050924p1.tar.gz
# cd lha-1.14i-ac20050924p1
# make
# make install
●コンパイル環境のインストール(Ndiswrapperをコンパイルする用)
●kernel-devel のインストール(?
●BUFFALO Windows用 無線LANドライバ(エアナビゲータライト等)をダウンロード
Ndiswrapperの導入
まずは、Ndiswrapperという Windows用のドライバを Linux で使用できるようにするフリーソフトをインストールする。
リポジトリからは提供されていないようなので、ソースからコンパイルしてインストールする。
★カレントディレクトリにダウンロード
# wget http://sourceforge.net/projects/ndiswrapper/files/latest/download?_test=goal
★展開する
# tar zxvf ndiswrapper-1.58rc1.tar.gz
★展開したフォルダに移動
# cd ndiswrapper-1.58rc1
★コンパイルする
# make
★インストールする(配置)
# make install
無線LAN子機ドライバの導入
無線LAN子機のドライバはバッファローのサイトから エアナビライト(airnavilite-1301.exe)をダウンロードした。
★ダウンロードしたexeを展開する。
# lha -e airnavilite-1301.exe
★展開するとディレクトリが現れるので、対象ドライバ(xxx.infファイル)が格納されているディレクトリへ移動する。
# cd AIRNAVILITE-1301/driver/UCG300N/WinXP/ ←今回使用する「WLI-UC-G301N」らしき名前は無かったが、近いと思われる「UCG300N」を使用してみた。
# ls
netucg3n.inf  ucg300n.cat  ucg300n.sys
★ドライバを取り込む
# ndiswrapper -i netucg3n.inf ←ちなみに削除する場合は【# ndiswrapper -r ドライバ名】
installing netucg3n ...
★ドライバの取り込み状況を確認
# ndiswrapper -l
netucg3n : driver installed ←ドライバがインストールできたようだ。
        device (0411:016F) present ←無線LAN子機を挿していて、認識しているとこの行も表示される。挿していてもこの行が表示されない場合はドライバが違う可能性あり。
# ndiswrapper -m
adding "alias wlan0 ndiswrapper" to /etc/modprobe.d/ndiswrapper.conf ...
★ドライバをロード
# modprobe ndiswrapper
★iwconfig/ifconfigコマンドで wlan0 が表示されるか確認する。ドライバがロードされてインターフェースが登録されると wlan0 が表示されるようだ。
# iwconfig
# ifconfig
★が、wlan0 が表示されない。なぜだろうと、検索しまくる…。

★そこで、無線LAN子機を抜き差しする際のログを採ってみた。(自動採取するので、ログ採取を停止する場合は【Ctrl+C】キー)
# tail -f /var/log/messages
May 18 00:20:03 samba kernel: usb 2-1.4: USB disconnect, address 8 ←無線LAN子機を外した
May 18 00:20:06 samba kernel: usb 2-1.4: new high speed USB device using ehci_hcd and address 9 ←無線LAN子機を挿した
May 18 00:20:06 samba kernel: usb 2-1.4: New USB device found, idVendor=0411, idProduct=016f
May 18 00:20:06 samba kernel: usb 2-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May 18 00:20:06 samba kernel: usb 2-1.4: Product: 802.11 n WLAN
May 18 00:20:06 samba kernel: usb 2-1.4: Manufacturer: Ralink
May 18 00:20:06 samba kernel: usb 2-1.4: SerialNumber: 1.0
May 18 00:20:06 samba kernel: usb 2-1.4: configuration #1 chosen from 1 choice
May 18 00:20:06 samba kernel: usb 2-1.4: reset high speed USB device using ehci_hcd and address 9
May 18 00:20:06 samba kernel: ndiswrapper (import:232): unknown symbol: ntoskrnl.exe:'MmGetSystemRoutineAddress'
May 18 00:20:06 samba kernel: ndiswrapper (load_sys_files:199): couldn't prepare driver 'netucg3n'
May 18 00:20:06 samba loadndisdriver: loadndisdriver: load_driver(364): couldn't load driver netucg3n
May 18 00:20:06 samba kernel: ndiswrapper (load_wrap_driver:102): couldn't load driver netucg3n; check system log for messages from 'loadndisdriver'
このログ(又は # dmesg|grep ndiswrapper で表示されるログ)に ndiswrapper (import:232): unknown symbol: ntoskrnl.exe:'MmGetSystemRoutineAddress'のような表示がある場合は、ndiswrapper にパッチを当てると解決できる場合があるとの情報を得たので、試してみた。
上に書いた「Ndiswrapperの導入」の手順でソースをダウンロードし、ソースを修正します。
★カレントディレクトリにソース一式をダウンロード
# wget http://sourceforge.net/projects/ndiswrapper/files/latest/download?_test=goal
★展開する
# tar zxvf ndiswrapper-1.58rc1.tar.gz
★展開したフォルダに移動
# cd ndiswrapper-1.58rc1
# vi driver/ntoskernel.c ←「ndiswrapper-1.58rc1/driver/ntoskernel.c」 をviエディタで開く
このソースファイルの最後に以下の赤字部分を追加して保存する (点線は含まない)
---------------------------------------------------------------------------------------------------------------
wstdcall void* WIN_FUNC(MmGetSystemRoutineAddress,1) (struct unicode_string *name)
{
    struct ansi_string ansi;
    if (RtlUnicodeStringToAnsiString(&ansi, name, TRUE) == STATUS_SUCCESS) {
        WARNING("MmGetSystemRoutineAddress: %s", ansi.buf);
        RtlFreeAnsiString(&ansi);
    }
    return 0;
}
------------------------------------------------------------------------------------------------------------
★コンパイルする
# make distclean
# make 
★エラーが無さそうならインストールする(配置)
# make install
★ドライバを一旦アンロード
# rmmod ndiswrapper
★ドライバをロード
# modprobe ndiswrapper
★ログを見てみる
# dmesg|grep ndiswrapper
ndiswrapper version 1.58rc1 loaded (smp=yes, preempt=no)
ndiswrapper: driver netucg3n (BUFFALO INC.,11/26/2008, 1.03.00.0000) loaded ←こんな行があればロード成功!
ndiswrapper (MmGetSystemRoutineAddress:2684): MmGetSystemRoutineAddress: RtlGetVersion
usbcore: registered new interface driver ndiswrapper

これでiwconfig/ifconfigコマンドでもwlan0が表示されるようになった。

あとは無線LAN用のネットワーク設定(GUIで設定)をしたら接続できました!