【無線LAN】ドライバ

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

タイトルとURLをコピーしました