Linux用 無線LANドライバ 「zd1211rw」「ndiswrapper」を解説します
【環境】
OS:CentOS5.3
無線LAN子機(USB):WLI-U2-KG54L
【ツール】
■zd1211rw
上記環境の場合だと 無線LANドライバ はデフォルトで「zd1211rw」が使用されます
このドライバは最初からインストール済みですが、WLI-U2-KG54L はチップが zd1211b なので、正常に動作させるには「zd1211-firmware」も必要となります
□zd1211-firmwareインストール手順
1.zd1211-firmware をダウンロードする(現時点では1.4が最新)
2.ダウンロードしたファイルを解凍する
tar -xvf zd1211-firmware-1.4.tar.bz2
3./lib/firmware/ に zd1211 とリネームして保存する
mv zd1211-firmware /lib/firmware/zd1211
4.インターフェースは手動で作成する必要がある
touch /etc/sysconfig/network-scripts/ifcfg-ethX
例:ifcfg-ethXの設定 (WEP128、Wep64 の場合)
DEVICE=ethX
ONBOOT=***
BOOTPROTO=***
HWADDR=xx:xx:xx:xx:xx:xx
TYPE=Wireless
ESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
KEY=xxxxxxxxxxxxxxxxxxxxxxxxxx
□無線LAN子機を接続したときの “dmesg | grep zd1211rw” の結果
>>zd1211-firmware を導入していない場合
zd1211rw 2-1:1.0: eth1
usb 2-1: Could not load firmware file zd1211/zd1211b_ub. Error number -2
zd1211rw 2-1:1.0: couldn’t load firmware. Error number -2
usb 2-1: Could not load firmware file zd1211/zd1211b_ub. Error number -2
zd1211rw 2-1:1.0: couldn’t load firmware. Error number -2
usb 2-1: Could not load firmware file zd1211/zd1211b_ub. Error number -2
zd1211rw 2-1:1.0: couldn’t load firmware. Error number -2
usb 2-1: Could not load firmware file zd1211/zd1211b_ub. Error number -2
zd1211rw 2-1:1.0: couldn’t load firmware. Error number -2
usb 2-1: Could not load firmware file zd1211/zd1211b_ub. Error number -2
zd1211rw 2-1:1.0: couldn’t load firmware. Error number -2
>>zd1211-firmware を導入している場合で正常時
zd1211rw 2-1:1.0: ethX
zd1211rw 2-1:1.0: firmware version 4725
zd1211rw 2-1:1.0: zd1211b chip 0411:00da v4810 full 00-1d-73 AL2230S_RF pa0 g–N-
zd1211rw 2-1:1.0: Unrecognised regulatory domain: 0x49. Defaulting to FCC.
>>上手く接続できていない場合は以下のメッセージが出力されている
zd1211rw 2-1:1.0: error ioread32(CR_REG1): -22
>>無線LAN子機 を一旦取り外し再認識させた場合
zd1211rw 2-1:1.0: error ioread32(CR_REG1): -11
■ndiswrapper
多くの 無線LAN子機 のドライバ は Windows用 は有ったとしても Linux用 は無かったりします
そこで、Windows用ドライバ を Linux で使用することのできる「ndiswrapper」というツールを使用します
□ndiswrapperインストール手順
1.ndiswrapperを使用する為に、カーネルのアップデートを行う(“yum -y install kernel kernel-devel”)
尚、カーネルのアップデートを行わないでインストールしようとすると下記のエラーメッセージが出る
make -C driver
make[1]: ディレクトリ `/root/Desktop/wireress-TOOL/ndiswrapper-1.55/driver’ に入ります
Makefile:34: *** Cannot find kernel version in /usr/src/kernels/2.6.18-53.el5-i686, is it
configured?. 中止.
make[1]: ディレクトリ `/root/Desktop/wireress-TOOL/ndiswrapper-1.55/driver’ から出ます
make: *** [all] エラー 2
2.再起動をしてアップデートされたか確認する
>reboot
>uname -r
3.ndiswrapper-X.XX.tar.gz をダウンロードする(現時点では1.55が最新)
4.ダウンロードしたファイルを解凍する
>tar -xzvf ndiswrapper-1.55.tar.gz
5.解凍したディレクトリ(ndiswrapper-1.55)に移動し、インストールをする
cd ndiswrapper-1.55
make install
6.Windows用ドライバ をダウンロードする(現時点では11.40が最新)
7.自己解凍形式の「airnavilite-1140.exe」を Windows上で解凍する(CentOS上では解凍できない為)
8.解凍したファイル(エアナビライト1140) の該当ドライバ(エアナビライト1140\driver\U2KG54L)を Windows → Linux へアップロードする
9.Windows用ドライバ (U2KG54L/WinXX)をインストールする
>cd U2KG54L/WinXX
>ndiswrapper -i NETU2KGL.INF
installing netu2kgl …
※同じフォルダに “U2KG54L.sys”、”NETU2KGL.INF” があることが前提
尚、ドライバは “Win2000″、”WinXP” は正常にインストールできたが、”WinVista” はインストール時にエラーが発生する
10.正常にインストールされたか確認する
> # ndiswrapper -l
netu2kgl : driver installed
device (0411:00DA) present (alternate driver: zd1211rw)
※”device (XXXX:XXXX) present” と表示されていない場合は無線LAN子機を一旦取り外し再認識させる
それで改善されない場合は PC自体 をリブートし、”modprobe.conf” を再読み込みさせる
11.OS起動時 にドライバを読み込むよう、”modprobe.conf”、”modprobe.d/ndiswrapper” に登録
vi にて編集
> # vi /etc/modprobe.conf
#alias eth1 zd1211rw ← ethXに zd1211rwドライバを割り当てる設定をコメントアウトする
alias eth1 ndiswrapper ← ethXに ndiswrapperドライバを割り当てる設定を記述する
※”ndiswrapper -m” にて “/etc/modprobe.d/ndiswrapper” に追記する方法もあるらしいが、実は意味がない
また、今回は インターフェース名を “ethX” で定義しているが “wlanX” でも可能
12.上記の設定を行っても、なぜか OS起動時 に「ndiswrapper」ドライバより「zd1211rw」ドライバが割り当てられてしまうので blacklist に「zd1211rw」ドライバを記述してそれを回避する
(“vi /etc/modprobe.d/blacklist” → “blacklist zd1211rw”)
13.インターフェースは事前に手動で作成する必要がある (“touch /etc/sysconfig/network-scripts/ifcfg-ethX“)
例:ifcfg-ethXの設定 (WEP128、Wep64 の場合)
DEVICE=ethX
ONBOOT=***
BOOTPROTO=***
HWADDR=xx:xx:xx:xx:xx:xx
TYPE=Wireless
ESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
KEY=xxxxxxxxxxxxxxxxxxxxxxxxxx
■正常接続時の “dmesg | grep ndiswrapper” の結果
ndiswrapper version 1.55 loaded (smp=yes, preempt=no)
usbcore: registered new driver ndiswrapper
ndiswrapper: driver netu2kgl (BUFFALO INC.,08/24/2006,6.19.0.0) loaded
ndiswrapper: changing interface name from ‘wlan0’ to ‘ethX‘
ndiswrapper (wrap_procfs_add_ndis_device:398): ethXalready registered?
■比較してみる
「zd1211rw」と「ndiswrapper」の動作検証を実施しました
インターフェースの UP/DOWN 及びリブートを繰り返しテストしてみたところ、「ndiswrapper」はほぼ問題ありませんでしたが「zd1211rw」に関しては OS起動時に正常にリンクアップすることはありませんでした
これは起動時にインターフェースを上手く認識しなかったことが原因のようです
尚、この時の対応策としては、ログイン後、無線LAN子機 を一旦抜き差して、”ifup ethX” にてリンクアップさせます
また、この時に dhclient が 動いてる場合は以下のメッセージが出力される場合があります
ethXのIP情報を検出中…dhclient(3173) is already running – exiting.
exiting.
その場合はdhclientプロセス を一旦停止させ、再度インターフェースを起動させます
> killall dhclient
> ifup ethX