ブログネタ
Linux Tips に参加中!
FedoraやubuntuなどのLinuxで無線LANカードが認識しなくて困っていませんか?

Linuxのカーネルkernelや"Fedora"や"ubuntu"が対応していなくても大丈夫です。
LANカード、無線LANカードをWindowsドライバで動作させるndiswrapperというツールがあります。

Fedora 7でndiswrapperを使って無線LANを使う方法を紹介します。
ubuntuでも、カーネルのインストールの部分だけubuntu用の
インストールをすれば、動作しますので参考にしてください。

Fedora 11,12 Ubuntu 9.06 9.10 10.04で使う場合は
こちらへ

この文書を見て分からない部分、
間違いなどありましたら、質問してください。








この文書では、Fedora 7のインストール時にアプリケーションの
インストールをデフォルトのままででインストールした場合を想定しています。

無線LANを設定しているときは、

ネットに接続できない可能性もあるので、
このファイルを保存しておくことをお薦めします。


結論を先に書くと、Fedora Core 6の場合と違って、
そのまま使用してもうまく動きませんでした。

ポイントはカーネルをFedora 7のカーネルから
Fedora Core 6の時のカーネルに変更することで
無線LANカードの動作に成功しました。

ndiswrapperとは?



ndiswrapperとは、


LinuxからNDISの技術を使用できるように、
したモジュール(簡単に言えば部品)です。

NDISとは、ネットワークドライバのインターフェイスです。
(規格と思ったら良いのかな?)

このndiswrapperを使用すると、
Linuxで対応していないネットワークカードでも、
Windowsのドライバを使用して、
Linuxでも該当するネットワークカードを
利用できるようにするツールです。

参考:Ascii IT用語時点 NDIS

1. 準備



使用した無線LANカードと接続環境は以下の通りです。
とりあえず、接続できるようにするため、
暗号化していません。
必要な場合は、

$ su
# /etc/init.d/NetworkManager start

として、NetworkManagerをお使い下さい。
起動時にNetworkMangerを起動したい場合は、

$ su
# chkconfig NetworkManager on

とします。





無線LANカードWLCB-54GT
接続方法DHCP or 固定IPアドレス(後述)
ESSIDcorega
WEPなし


参考サイト
ndiswrapper本家サイト
Fedora Core ndiswrapper インストール解説サイト





2. 16k スタックのカーネル、カーネルソースのインストール



ndiswrapperを使うためには、
まずカーネルのアップデート、
カーネルのソースをインストールをします。

本来は、最新のカーネルとカーネルのソースを使って
ndiswrapperをコンパイル、動作させるのですが、
私の場合、Fedora 7のカーネルでは
ndiswrapperはうまく動作しませんでした。
(恐らく、ndiswrapperが
新しいカーネルに完全には対応できていないのだと思います。)

なので、Fedora 7のカーネルでうまく動作しなければ、
Fedora Core 6でのカーネルで
試してみてください。

よく分からなければ、
Fedora Core 6のカーネルを使用すれば、
間違いないと思います。


さらに、
Linuxのカーネル2.6では、
4kスタックサイズが有効/無効にできるオプションが付いています。
(スタックが何か筆者は分かっていません^^;)

しかし、FedoraもしくはFedora Coreのカーネルでは無効にされています。

このオプションを無効にされているカーネルを使用すると、
無線LANカードの種類によっては
うまく動作しない場合があります。

そこで、16kスタックサイズを有効にした
カーネルがあるのでインストールします。

(今回の無線LANカードcorega WLCB-54GTでは、必要ありませんでした。)

つまり、16kスタックサイズのFedora Core 6
のカーネル、カーネルのソースをインストールすれば
間違いがないと思います。
2.1 節に進み、2.2 節は飛ばしてください。。


以下、

2.1節では、
16kスタックサイズのFedora Core 6のカーネルのインストール、
カーネルのソースのインストールをする方法を紹介します。

2.2節では、
16kスタックサイズのFedora 7のカーネル、カーネルのソースを
インストールする方法を紹介します。


2.1 16kスタックサイズのFedora Core 6のカーネル、カーネルのソースのインストール




Fedora Core 6のカーネル、カーネルソースを使った場合の
インストールの仕方を説明します。


2.2.1 ダウンロード


16kスタックサイズのサイト
からカーネルに合うファイルをダウンロードします。
大抵の方はi686版でOKです。
ダウンロードしたファイルは以下の二つ。

$ ls ~/Desktop
kernel-2.6.20-1.2952.fc6.stk16.i686.rpm

kernel-devel-2.6.20-1.2952.fc6.stk16.i686.rpm


2.2.2 インストール


そして、ダウンロードしたrpmファイルをインストールします。
 
$ cd ~/Desktop
$ su
# rpm -ivh --force kernel-2.6.20-1.2952.fc6.stk16.i686.rpm
# rpm -ivh --force kernel-devel-2.6.20-1.2952.fc6.stk16.i686.rpm


再起動して、新しくインストールしたスタックサイズの問題を解決したカーネル
"Fedora (2.6.20-1.2952.fc6.stk16)"を選んで起動します。
起動したら、

# uname -r
2.6.20-1.2952.fc6.stk16

と後ろにstk16kが付いているか確認しておきます。







2.2 16kスタックサイズのFedora 7のカーネル、カーネルのソースのインストール


(玄人用)
念のため、Fedora 7のカーネル、カーネルソースを使った場合の
インストールの仕方を説明します。

くれぐれも自身のない方は、
2.1 節のFedora Core 6のカーネル、カーネルソースを
使ったインストールにして下さい!

2.2.1 ダウンロード


16kスタックサイズのサイト
からカーネルに合うファイルをダウンロードします。
大抵の方はi686版でOKです。
ダウンロードしたファイルは以下の二つ。

$ ls ~/Desktop
kernel-2.6.21-1.3194.fc7.stk16.i686.rpm
kernel-devel-2.6.21-1.3194.fc7.stk16.i686.rpm


2.2.2 インストール


そして、ダウンロードしたrpmファイルをインストールします。
 
$ cd ~/Desktop
$ su
# rpm -ivh kernel-2.6.21-1.3194.fc7.stk16.i686.rpm
# rpm -ivh kernel-devel-2.6.21-1.3194.fc7.stk16.i686.rpm


再起動して、新しくインストールしたスタックサイズの問題を解決したカーネル
"Fedora (2.6.21-1.3194.fc7.stk16)"を選んで起動します。
起動したら、

# uname -r
2.6.21-1.3228.fc7.stk16

と後ろにstk16kが付いているか確認しておきます。





rpm コマンドの詳しい使い方は、
Fedora パッケージ管理
Japanese FAQ:RPMによるパッケージ管理




4. ndiswrapperの導入


4.1 ndiswrapperのダウンロード



ndiswrapperをndiswrapperダウンロードサイトから最新のversionをダウンロードします。

2007年 6月 23日 土曜日 現在、ndiswrapper-1.47.tar.gzです。



4.2 ndiswrapperのインストール



4.2.1 開発環境Development toolsのインストール



ndiswrapperをインストールするための環境を整えます。
ndiswrapperは、ソースコードからコンパイルする必要があるので、
Development toolsをインストールします。


$ su
# yum install "Development Tools" "Development Libraries"

として、コンパイルができるようにします。

ちなみにこの作業をする事によって、
ndiswrapper以外のアプリケーションをソースコードから
インストールする事が可能になります。

4.2.2 ndiswrapperのインストール



ndiswrapperをインストールします。

手順は、
1. ダウンロードしたファイルを解凍
2. 以前のバージョンのndiswrapperをアンインストール
3. ソースコードをコンパイル
です。


$ tar xvzf ndiswrapper-1.47
$ cd ndiswrapper-1.47
$ su
# rmmod ndiswrapper
# mkdir -p /root/ndis_old
# mv /etc/ndiswrapper /root/ndis_old
# make distclean
# make distclean
# make distclean
# make uninstall
# make uninstall
# make uninstall


この作業後、
念のためシャットダウン(再起動ではなく!!)して下さい。

(前のバージョンのndiswrapperをインストールしてある場合、
モジュールを外す必要があるが、
ndiswrawpperがクラッシュした場合は外せないため。)

電源が切れたら、
PCの電源をつけてFedoraを起動させます。

# make install

とすればインストールできます。

途中で
make distcleanmake uninstallを複数回実行している理由は、
アンインストールを確実にするためです。

このアンインストールを完了させておかないと、
ndiswrapperを使用したときにカーネルがクラッシュする場合が
あるので必ず実行しておくこと。


5. ndiswrapperの利用



ndiswrapperのインストールができたので、
Windowsドライバーを使って、ドライバをインストールします。

今回使用したカードの情報




無線LANカードcorega WLCB-54GT
corega サイトhttp://corega.jp/
corega WLCB-54GT のドライバのサイトhttp://corega.jp/support/download/wl_adp.htm#wlcb54gt


5.1 Windowsドライバのダウンロード



使用している無線LANカードのドライバをダウンロードします。
Windows98系とWindows2000/XP系とがある場合、
Windows2000/XP系をダウンロードして下さい。

$wget http://corega.jp/support/download/driver/wlcb54gt_202.exe



5.2 lhaのインストール



ndiswrapperをインストールできたので、
Windowsドライバをインストールします。
そのためには、Windowsドライバを解凍する必要があります。

(Windows上で解凍してもいいですが・・・)

大抵のソフトは.lhaか.zipか.exeで配布されています。
.exeはほとんどの場合、zipかlhaで解凍できます。

lhaを使う場合は(使わなくてもインストールした方がいいですが^^; )、
Fedora 7では、yumにlhaは含まれていないので
ソースからコンパイルします。


(古いバージョンのFedora Core用のlhaを
インストールできますが、
ライセンス違反なのでやめておきましょう。)


lha本家サイト




5.2.1 ダウンロード


lha本家サイト
から"ダウンロード"をクリック

"lha-1.14i-ac20050924p1.tar.gz"をクリック

もしくは、

$ cd ~/Desktop
$ wget http://keihanna.dl.sourceforge.jp/lha/22231/lha-1.14i-ac20050924p1.tar.gz




5.2.2 インストール


lhaをインストールするには、

$ cd ~/Desktop
$ tar xvzf lha-1.14i-ac20050924p1.tar.gz
$ cd lha-1.14i-ac20050924p1
$ ./configure
$ make
# make install

とします。


5.3 Windowsドライバの解凍


Windowsドライバを解凍します。
上でも述べたようにドライバのファイルは、
自己解凍ソフトですが、
大抵はlhaなので(それかzip)Linuxでも解凍できます。

5.3.1 lhaで解凍する場合


lhaで解凍する場合は、

$ lha -x wlcb54gt_202.exe
$ lha -x setup.exe
$ ls
setup.exe version.txt wl54cb.sys wlcb54gt_202.exe
utility wl54cb.inf wl54cb5.sys wlsetup.exe

として、解凍します。
今回の無線LANカードでは、
lhaで解凍できました。

5.3.2 zipで解凍する場合


念のため、
zipで解凍する方法を説明しておきます。

$ unzip wlcb54gt_202.exe
$ unzip setup.exe
$ls
setup.exe version.txt wl54cb.sys wlcb54gt_202.exe
utility wl54cb.inf wl54cb5.sys wlsetup.exe

として、解凍します。



5.2 ドライバのインストール


5.2.1 ドライバのインストール手順


ndiswrapperを使って、ドライバをインストールします。
Windows98系とWindows2000/XP用のドライバがある場合は、
Windows2000/XP用のドライバを使用しましょう。

$ su
# /usr/sbin/ndiswrapper -i wl54cb.inf
# /usr/sbin/ndiswrapper -l
Installed drivers:
wl54cb driver installed, hardware present


5.2.2 alternateと表示される



5.2.1でndiswrapper -lとした時に下のように(alternate driver: ドライバ名)
となる場合があります。

$ su
# /usr/sbin/ndiswrapper -l
wl54cb : driver installed
device ((1260:3890) present (alternate driver: prism54)

これは、Linuxカーネルが自動で組み込んだドライバ名です。
つまり、ndiswrapperを使ってカードを認識したのではなく、
他のドライバ(この例の場合はprism54)を使ったという事です。

これを防ぐには、
/etc/modprobe.d/
の以下にndiswrapper_blacklist(名前は任意)

blacklist prism54

とします。
その上で、6.ndiswrapperをモジュールとして読み込むへお進み下さい。

参考:ndiswrapper本家サイトWiki: Troubleshooting


6. ndiswrapperをモジュールとして読み込む



6.1 起動時に読み込むための設定


起動時にndiswrapperを読み込むために、
以下のコマンドを実行します。

# ndiswrapper -ma

6.2 確認


上でのコマンドが成功しているか確認します。

# cat /etc/modprobe.d/ndiswrapper
alias pci:v00001260d00003890sv00000000sd00001260bc*sc*i* ndiswrapper
alias pci:v00001260d00003890sv0000C104sd00001259bc*sc*i* ndiswrapper
alias pci:v00001260d00003890sv*sd*bc*sc*i* ndiswrapper

上記のように表示されたら、
起動時に読み込むための設定が完了しています。
内容は無線LANカードの種類によって異なります。


6.2 ndiswrapperモジュールの読み込み



モジュールを読み込むために、以下のコマンドを実行します。

# /sbin/depmod -a
# /sbin/modprobe ndiswrapper


ドライバの認識に成功していれば、LEDランプが付いてまた消えます。
Fedora Core ndiswrapper インストール解説サイト


6.4 カードの認識


ファームウェアのバージョンが合っていれば、
ドライバの認識に成功していれば、LEDランプが付いてまた消えます。
さらに、iwconfigを実行すると、

# iwconfig wlan0
wlan0 IEEE 802.11g ESSID:"corega" Nickname:"localhost.localdomain"
Mode:Managed Frequency:2.437 GHz Access Point: 00:0A:79:52:65:40
Bit Rate=54 Mb/s
RTS thr=2432 B Fragment thr=2432 B
Encryption key:off
Power Management:off
Link Quality:100/100 Signal level:-59 dBm Noise level:-256 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0


また、/var/log/messagesには、

# tail /var/log/messages
Mar 20 19:52:20 localhost kernel: pccard: \
CardBus card inserted into slot 0
Mar 20 19:52:20 localhost kernel: ndiswrapper: \
driver wl54cb (corega,10/09/2003, 2.1.15.0) loaded
Mar 20 19:52:20 localhost kernel: PCI:\
Enabling device 0000:02:00.0 (0000 -> 0002)
Mar 20 19:52:20 localhost kernel: ndiswrapper: using irq 9
Mar 20 19:52:22 localhost kernel: wlan0: vendor: 'CG-WLCB54GT'
Mar 20 19:52:22 localhost kernel: wlan0: \
ndiswrapper ethernet device 00:0a:79:5a:30:8b \
using driver wl54cb, 1260:3890:1259:C104.5.conf
Mar 20 19:52:22 localhost kernel:
wlan0: encryption modes supported: WEP; TKIP with WPA; AES/CCMP with WPA


このように、無線LANカードが認識されていて、
ethernet device 00:0a:79:5a:30:8b using driver wl54cb, \
1260:3890:1259:C104.5.confのように、
イーサネットアドレス00:01:79:5a:30:8bが取得できていれば成功である。


7. 接続



デバイスが認識されたら、普通にネットに接続する設定をするだけです。
一番簡単な方法は、[デスクトップ]→[システム設定]→[ネットワーク]からの設定でしょう。

念のため、手動で設定する場合を以下に説明します。
DHCPで接続したい場合は、"7.1 DHCP"を、
固定IPアドレスで接続したい場合は、"7.2 固定IPアドレス"
参照してください。
それぞれ、コマンドで接続する方法と設定ファイルによる接続方法を
解説しています。

参考:Fedora ビギナー用

7.1 DHCP


7.1.1 DHCP接続(コマンド編)



接続に、DHCPを使う場合は、

# iwconfig wlan0 essid corega
# dhclient wlan0
Copyright 2004 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/products/DHCP

Listening on LPF/wlan0/00:0a:79:5a:30:8b
Sending on LPF/wlan0/00:0a:79:5a:30:8b
Sending on Socket/fallback
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPACK from 192.168.1.1
bound to 192.168.1.11 -- renewal in 103296 seconds.


7.1.2 DHCP接続(設定編)



起動時にDHCP接続されるようにするためには、
/etc/sysconfig/networking/device/if-wlan0に、

DEVICE=wlan0 #無線LANカードの認識カード
ONBOOT=yes
BOOTPROTO=dhcp #DHCP接続なら
TYPE=Wireless
MODE=Managed
ESSID=corega
CHANNEL=6
DOMAIN=
USERCTL=no
PEERDNS=no
IPV6INIT=no
RATE=Auto
HWADDR=00:0a:79:5a:30:8b #イーサネットアドレス
DHCP_HOSTNAME=


DHCPの場合には、BOOTPROTOをdhcpに設定します。
HWADDRには、イーサネットアドレスを登録します。
イーサネットアドレスは、dmesgから取得します。

もし、再起動せずに接続したい場合は、

# ifup wlan0

とします。


7.2 固定IPアドレス


7.2.1 固定IPアドレス(コマンド編)



接続環境は、




IPアドレス192.168.1.11
ゲートウェイ192.168.1.1
ネームサーバー192.168.1.1


DNSを設定するために、/etc/resolv.confに、
(resolve.confではなく、resolv.conf)

nameserver 192.168.1.1

とし、

IPアドレスと、ゲートウェイを設定するためには、

# iwconfig wlan0 essid corega
# ifconfig wlan0 192.168.1.11 netmask 255.255.255.0
# route add default 192.168.1.1


で接続可能になります。

7.2.2 固定IPアドレス(設定編)



DNSの登録をするために、
/etc/resolv.confに

nameserver 192.168.1.1

が記述してあるかを確認すること。

起動時に固定IPアドレスで接続されるようにするには、
/etc/sysconfig/networking/device/if-wlan0に、

GATEWAY=192.168.1.1
TYPE=Wireless
DEVICE=wlan0:1
HWADDR=00:0a:79:5a:30:8b
BOOTPROTO=none
NETMASK=255.255.255.0
DHCP_HOSTNAME=
IPADDR=192.168.1.11
DOMAIN=
IPV6INIT=no
ONBOOT=no
USERCTL=no
PEERDNS=yes
ESSID=corega
CHANNEL=1
MODE=Managed


もし、再起動せずに接続したい場合は、
DHCPを使った接続と同様に、

# ifup wlan0

とします。

8. エラーの対処方法



wlan0のカードが他にある場合は、
if-wlan0をif-corega0など、他の名前にし、
ifup if-corega0などとすればOKです。


さらに、wlan0のカードがこの無線LANカードの他にある場合は、
場合によっては、起動時に接続に失敗します。
(僕の環境では)
その場合は、カードを一度抜いて挿入しなおすと、
接続できるます。
コマンドでする場合は、

# ifdown 使用しないカードの設定ファイル
# ifup 使用するカードの設定ファイル

とすれば接続できます。


また、

# ifup wlan0
wlan0 のIP情報を検出中...dhclient(11346) is already running - exiting.
exiting.
失敗

というエラーが出たら、


# killall dhclient
# ifup wlan0

とすれば接続できます。