Fedora Coreで認識してくれない無線LANを使うためには、ndiswrapperを使います。

ndiswrapperを使って無線LANカードを認識させる方法を解説します。

注意!!:
Fedora 11,12でのndiswrapperの使い方はこちら



キーワード:kernel-devel,ndiswrapper,WLCB-54GT,corega,/etc/modprobe.conf,depmod,modprobe,prism54,,firmware,eth0: could not upload firmware,iwconfig,dhclient, /etc/sysconfig/networking/device,ifup,linux





Fedora Core logo





Fedora Core 4で認識してくれない無線LANを使うためには、ndiswrapperを使います。
この文書では、Fedora Core 4のインストール時にデスクトップの利用でインストールした場合を想定しています。
また、Fedora Core 5にアップグレードしても、
この方法で、無線LANを接続することも成功しています。
無線LANを設定しているときは、
ネットに接続できない可能性もあるので、
このファイルを保存しておくことをお薦めします。


1. 準備








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


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


2. カーネルのソースのインストール



ndiswrapperを使うために、まずカーネルのソースコードをインストールをします。

$su
#yum -y install kernel-devel


また、上でインストールしたカーネルのソースコードが、
カーネルよりも新しい場合は、
カーネルも最新のものにします。

#yum -y upgrade kernel


再起動して、新しいカーネルのバージョンを選んで起動し、インストールしたカーネルのバージョンを確認すると、

#uname -r
2.6.15-1.1833_FC4


Fedora Core 5の場合、

#uname -r
2.6.15-1.2054_FC5


以上の作業が終了したら、再起動して、新しいバージョンのカーネルで起動します。


3. 4k カーネルスタックサイズの問題の解決



カーネル2.6では、4kスタックサイズが有効/無効にできるオプションが付いています。
しかし、Fedora Core 4のカーネルでは、まったく無効にされています。
しかも、4kスタックサイズでは、Windowsのドライバーでは不十分です。
modprobe ndiswrapperを実行して、フリーズした場合は、16スタックサイズのカーネルを導入する必要があります。
Fedora Core 5のカーネルスタック問題を解決したカーネルは、
2006年3月26日現在まだ、出ていません。

(今回の無線LANカードcorega WLCB-54GTでは、必要がないことが後でわかりました。)

3.1 スタックサイズの問題の解決したカーネルのダウンロード

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

#ls
kernel-2.6.15-1.1833_FC4.stk16.i686.rpm
kernel-devel-2.6.15-1.1833_FC4.stk16.i686.rpm


3.2 スタックサイズの問題を解決したカーネルのインストール

そして、ダウンロードしたrpmファイルをインストールします。
 
#rpm -ivh kernel-2.6.15-1.1833_FC4.stk16.i686.rpm
#rpm -ivh kernel-devel-2.6.15-1.1833_FC4.stk16.i686.rpm


再起動して、新しくインストールしたスタックサイズの問題を解決したカーネル
"2.6.15-1.1833_FC4.stk16"を選んで起動します。
確認のため、

#uname -r
2.6.15-1.1833_FC4.stk16

となっているか確認します。


4. ndiswrapperの導入


4.1 ndiswrapperのダウンロード


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

#mkdir download
#cd download
#wget http://keihanna.dl.sourceforge.net/sourceforge/ndiswrapper/ndiswrapper-1.10.tar.gz

現在、ndiswrapper-1.11が出ています。


4.2 ndiswrapperのインストール


/usr/src/kernel/
/lib/module//buildからシンボリックリンクを張り、
ndiswrapperをインストールします。
(最近のカーネルのソースは、シンボリックリンクが最初から張られています。)

#ln -s /usr/src/kernel/2.6.15-1.1833_FC4.stk16 /lib/modules/2.6.15-1.1833_FC4.stk16/build
#tar xvzf ndiswrapper-1.10
#cd ndiswrapper-1.10
#su
#make distclean
#make install

とすると、コンパイルエラーが出た。

そのため、パッケージの追加から"開発ツール"をインストール

そして、念のため、
インストールしている全てのアプリケーションをアップデートして、
(恐らく、アップデートは不要)
もう一度ndiswrapperのインストールをします。

#yum -y update
#make install

して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ドライバの解凍

coregaのサイトから、Windowsドライバをダウンロードします。

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

Windowsドライバを解凍します。
ファイルは、自己解凍ソフトだが、大抵は、lhaなので(それかzip)、

$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


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

ndiswrapperを使って、ドライバをインストールする。

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



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



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

起動時にndiswrapperを読み込むために、
/etc/modprobe.confに以下の内容を追加します。

options ndiswrapper if_name=eth0
alias eth0 ndiswrapper


なお、dmesgコマンドで見たときに、
認識させるカードがeth0として認識されず、
他のeth1などとして認識されるようであれば、
便宜変更してください。

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


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

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


ドライバの認識に成功していれば、LEDランプが付いてまた消える。
Fedora Core ndiswrapper インストール解説サイト
に書いてありましたが、
そうならなかったです。

6.3 firmwareの導入


/var/log/messagesを見てみると、

eth0: could not upload firmware ('isl3890')

と出ていました。

そこで、prism54のサイトからダウンロードします。

#wget http://prism54.org/firmware/2.7.0.0.arm
#mv 2.7.0.0.arm isl3890

/etc/hotspot/firmware.agentにFIRMWARE_DIR=/lib/firmwareとなっていることから、

#cp isl3890 /lib/firmware

として、firmwareを導入します。

もう一度、"6.2 ndiswrapperモジュールの読み込み"を繰り返します。

もし、合っていないバージョンのファームウェアであれば、
/var/log/messagesに以下のメッセージが出ます。

Mar 15 22:33:44 localhost cardmgr[1450]: executing: 'modprobe -r 8390 2>&1'
Mar 15 22:33:44 localhost cardmgr[1450]: + FATAL: Module 8390 is in use.
Mar 15 22:33:44 localhost cardmgr[1450]: modprobe exited with status 1
Mar 15 22:33:48 localhost kernel: pccard: CardBus card inserted into slot 0
Mar 15 22:33:48 localhost kernel: Loaded prism54 driver, version 1.2
Mar 15 22:33:48 localhost kernel: PCI: Enabling device 0000:02:00.0 (0000 -> 0002)
Mar 15 22:33:52 localhost kernel: eth0: timeout waiting for mgmt response
Mar 15 22:33:52 localhost kernel: eth0: mgt_commit_list: failure. oid=ff020008 err=-110
Mar 15 22:33:53 localhost kernel: eth0: timeout waiting for mgmt response
Mar 15 22:33:53 localhost kernel: eth0: mgt_commit_list: failure. oid=ff020003 err=-110
Mar 15 22:33:54 localhost kernel: eth0: timeout waiting for mgmt response
Mar 15 22:33:54 localhost kernel: eth0: mgt_commit_list: failure. oid=10000000 err=-110

このような、場合は異なるバージョンのファームウェアをファームウェアのサイト
からダウンロードしてください。

異なるバージョンのファームウェアをダウンロードしたら、
"6.3 firmwareの導入"を繰り返します。

6.4 カードが認識されなかったら


何回か、試していると、
上手くカードを認識してくれないことがありました。
その場合は、
上にも書きましたが、
ファームウェアのバージョンを変える。
ndiswrapperのバージョンを変える。
などを試してみてください。
googleで検索してみたところ、
バージョンによって、
認識したり、
しなかったりするようです。

また、

#tail -f /var/log/messages

を実行した状態で、
カードを挿してエラーが出ていないか確認するといいと思います。

また、/var/log/messagesに次のようなエラーメッセージが出る事があります。

prism54: Your card/socket may be faulty, or IRQ line too busy :(

このようなメッセージが出た場合は、
/etc/modprobe.confを、

options ndiswrapper if_name=eth0
install prism54 /sbin/modprobe ndiswrapper

とします。
参考サイト:Zaid's Personal Web Site



6.5 カードの認識


ドライバの認識に成功していれば、LEDランプが付いてまた消えます。
さらに、iwconfigを実行すると、

#iwconfig eth0
eth0 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: eth0: vendor: 'CG-WLCB54GT'
Mar 20 19:52:22 localhost kernel: eth0: 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: eth0: 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のように、
イーサネットアドレスが取得できていれば成功です。


7. 接続



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

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

7.1 DHCP

7.1.1 DHCP接続(コマンド編)


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

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

Listening on LPF/eth0/00:0a:79:5a:30:8b
Sending on LPF/eth0/00:0a:79:5a:30:8b
Sending on Socket/fallback
DHCPREQUEST on eth0 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-eth0に、

DEVICE=eth0 #無線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 eth0

とします。


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 eth0 essid corega
#ifconfig eth0 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-eth0に、

GATEWAY=192.168.1.1
TYPE=Wireless
DEVICE=eth0: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 eth0

とします。

8. エラーの対処方法



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


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

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

とすれば接続できます。


また、

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

というエラーが出たら、


#killall dhclient
#ifup eth0

とすれば接続できます。

けんけんのお薦め

お勧めのFedora Coreの書籍