ノートPC内蔵の無線LAN(2915ABG)を使う
作成 : 2005/04/09 追記 : 2005/04/16
ノートPC内蔵の無線LAN(2915ABG)を使う
Fedora Core 3をインストールしたノートPC(Panasonic CF-R3)で、内蔵の無線LANを使用できるようにする。
ノートPC内蔵の無線LANとドライバ
最初に、lspciでデバイスの種類を確認しておく。 Intel PRO/Wireless 2915ABGであることがわかる。
# lspci 00:00.0 Host bridge: Intel Corp. 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02) 00:00.1 System peripheral: Intel Corp. 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02) 00:00.3 System peripheral: Intel Corp. 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02) 00:01.0 PCI bridge: Intel Corp. 82852/82855 GM/GME/PM/GMV Processor to AGP Controller (rev 02) 00:02.0 VGA compatible controller: Intel Corp. 82852/855GM Integrated Graphics Device (rev 02) 00:02.1 Display controller: Intel Corp. 82852/855GM Integrated Graphics Device (rev 02) 00:1d.0 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 03) 00:1d.7 USB Controller: Intel Corp. 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 03) 00:1e.0 PCI bridge: Intel Corp. 82801 Mobile PCI Bridge (rev 83) 00:1f.0 ISA bridge: Intel Corp. 82801DBM (ICH4-M) LPC Interface Bridge (rev 03) 00:1f.1 IDE interface: Intel Corp. 82801DBM (ICH4-M) IDE Controller (rev 03) 00:1f.3 SMBus: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 03) 00:1f.5 Multimedia audio controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 03) 00:1f.6 Modem: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 03) 02:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10) 02:04.0 Network controller: Intel Corp. PRO/Wireless 2915ABG MiniPCI Adapter (rev 05)02:05.0 CardBus bridge: Ricoh Co Ltd RL5c475 (rev 88) 02:05.1 System peripheral: Ricoh Co Ltd: Unknown device 0575
Intelのダウンロードサイトから、PRO/Wireless 2915ABGのLinux用ドライバipw2200_linux_1_0_0.tgzをダウンロードする。 このアーカイブには、ドライバとファームウェアが含まれている。
READMEを読むと、このドライバを使うためにはカーネルが 2.6.8 以降であり、Wireless Tools(v27-pre23)がインストールされていなくてはならないらしい。 カーネルのバージョンを確認する。 Fedora Core 3なら大丈夫。
# uname -r
2.6.9-1.667
Wireless Toolsがインストールされているか確認する。 ついでにバージョンも確認する。 Fedora Core 3をインストールするときに最小構成を選択しても、Wireless Toolsはインストールされるようだ。
# rpm -qa | grep wireless sireless-tools-27-0.pre25.2 # iwconfig --version iwconfig Wireless-Tools version 27 Compatible with Wireless Extension v11 to v17. Kernel Currently compiled with Wireless Extension v16.
ドライバとファームウェアのインストール
ダウンロードしたipw2200_linux_1_0_0.tgzを適当なディレクトリに置いて、展開する。
# tar -zxvf ipw2200_linux_1_0_0.tgz intel_ipw2200ディレクトリに展開される # cd intel_ipw2200/ # ls INSTALL ipw2200-fw-2.2.tgz README.ipw2200 ipw2200-1.0.0.tgz ipw2200_Install_and_Support_Notes.txt
ドライバのアーカイブファイルipw2200-1.0.0.tgz を展開して、インストールする。 /lib/modules/2.6.9-1.667/kernel/drivers/net/wirelessディレクトリにカーネルモジュールがインストールされる。
# tar -zxvf ipw2200-1.0.0.tgz ipw2200-1.0.0ディレクトリに展開される # cd ipw2200-1.0.0 # make make -C /lib/modules/2.6.9-1.667/build SUBDIRS=/root/intel_ipw2200/ipw2200-1.0.0 MODVERDIR=/root/intel_ipw2200/ipw2200-1.0.0 modules make[1]: Entering directory `/lib/modules/2.6.9-1.667/build' CC [M] /root/intel_ipw2200/ipw2200-1.0.0/ipw2200.o CC [M] /root/intel_ipw2200/ipw2200-1.0.0/ieee80211_module.o CC [M] /root/intel_ipw2200/ipw2200-1.0.0/ieee80211_tx.o CC [M] /root/intel_ipw2200/ipw2200-1.0.0/ieee80211_rx.o CC [M] /root/intel_ipw2200/ipw2200-1.0.0/ieee80211_wx.o LD [M] /root/intel_ipw2200/ipw2200-1.0.0/ieee80211.o CC [M] /root/intel_ipw2200/ipw2200-1.0.0/ieee80211_crypt.o CC [M] /root/intel_ipw2200/ipw2200-1.0.0/ieee80211_crypt_wep.o Building modules, stage 2. MODPOST Warning: could not find versions for .tmp_versions/ipw2200.mod CC /root/intel_ipw2200/ipw2200-1.0.0/ieee80211.mod.o LD [M] /root/intel_ipw2200/ipw2200-1.0.0/ieee80211.ko CC /root/intel_ipw2200/ipw2200-1.0.0/ieee80211_crypt.mod.o LD [M] /root/intel_ipw2200/ipw2200-1.0.0/ieee80211_crypt.ko CC /root/intel_ipw2200/ipw2200-1.0.0/ieee80211_crypt_wep.mod.o LD [M] /root/intel_ipw2200/ipw2200-1.0.0/ieee80211_crypt_wep.ko CC /root/intel_ipw2200/ipw2200-1.0.0/ipw2200.mod.o LD [M] /root/intel_ipw2200/ipw2200-1.0.0/ipw2200.ko make[1]: Leaving directory `/lib/modules/2.6.9-1.667/build' # make install make -C /lib/modules/2.6.9-1.667/build SUBDIRS=/root/intel_ipw2200/ipw2200-1.0.0 MODVERDIR=/root/intel_ipw2200/ipw2200-1.0.0 modules make[1]: Entering directory `/lib/modules/2.6.9-1.667/build' Building modules, stage 2. MODPOST Warning: could not find versions for .tmp_versions/ipw2200.mod make[1]: Leaving directory `/lib/modules/2.6.9-1.667/build' install -d /lib/modules/2.6.9-1.667/kernel/drivers/net/wireless/ install -m 644 -c ipw2200.ko ieee80211.ko ieee80211_crypt.ko ieee80211_crypt_wep.ko /lib/modules/2.6.9-1.667/kernel/drivers/net/wireless/ /sbin/depmod -a Don't forget to copy firmware to /usr/lib/hotplug/firmware/ and have the hotplug tools in place. See INSTALL for more information.
ファームウェアのアーカイブファイルipw2200-fw-2.2.tgz を展開する。 同じディレクトリに*.fwファイルが作成される。
# cd .. # tar -zxvf ipw2200-fw-2.2.tgz LICENSE ipw-2.2-boot.fw ipw-2.2-bss.fw ipw-2.2-bss_ucode.fw ipw-2.2-ibss.fw ipw-2.2-ibss_ucode.fw
ファームウェアファイルを置く場所は、/etc/hotplug/firmware.agentファイルに記述されている。
# /etc/hotplug/firmware.agent .... FIRMWARE_DIR=/lib/firmware ....
*.fwファイルを/lib/firmwareディレクトリにコピーする。
# cd *.fw /lib/firmware
モジュールのロード
ドライバのインストールとファームウェアのコピーが終わったら、モジュールをロードしてみる。
# modprobe ipw2200 # lsmod | grep ipw2200 ipw2200 68108 0 ieee80211 20996 1 ipw2200
iwconfigを実行すると、eth1として認識されていることがわかる。 (eth0はLANカード) ESSIDなどを設定していないので、まだワイヤレス通信はできない。
# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
eth1 unassociated ESSID:off/any
Mode:Managed Channel=0 Access Point: 00:00:00:00:00:00
Bit Rate=0kb/s Tx-Power=20 dBm
RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
sit0 no wireless extensions.
通信の設定(ifcfg-eth1)
ESSIDやWEP KEYなどの設定は、/etc/sysconfig/network-scriptsディレクトリのifcfg-eth1ファイルに記述する。 おそらくifcfg-eth1ファイルは存在しないので、ifcfg-eth0ファイルをコピーするとよい。
# /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 BOOTPROTO=dhcp # DHCPからIPアドレス等を取得 ONBOOT=no # 起動時にインタフェースを無効にする(有効にするならONBOOT=yes) ESSID=(ESSID) # ESSIDを指定 KEY=s:(WEP KEY) # WEP KEYを文字列で指定(16進で指定するならKEY=xxxxxxらしい)
参考 GUI設定ツール(GNOMEのsystem-config-network)を使って設定すると、ifcfg-eth1ファイルとkeys-eth1ファイルが作成される。 keys-eth1にはWEP KEY("KEY=s:(WEP KEY)")が記述され、rootユーザしか読み取れないようになっている。
# system-config-networkによるifcfg-eth1 # Please read /usr/share/doc/initscripts-*/sysconfig.txt # for the documentation of these parameters. IPV6INIT=no ONBOOT=no USERCTL=no # すべてのユーザにインタフェースのUP/DOWNを許可するときは'yes' PEERDNS=yes GATEWAY= TYPE=Wireless DEVICE=eth1 HWADDR=(MAC ADDRESS) BOOTPROTO=dhcp NETMASK= DHCP_HOSTNAME= IPADDR= DOMAIN= ESSID=(ESSID) MODE=Managed RATE='54 Mb/s' CHANNEL=1
# system-config-networkによるkeys-eth1
KEY=s:(WEP KEY)
インタフェースの有効化
無線インタフェースを有効化してみる。
# ifup eth1
Determining IP information for eth1... done.
iwconfigとifconfigで確認。 IPアドレスが取得できていればOK。
# iwconfig lo no wireless extensions. eth0 no wireless extensions. eth1 IEEE 802.11g ESSID:"xxxxxxxxxxxx" Nickname:"xxxxxx" Mode:Managed Frequency:2.422GHz Access Point: xx:xx:xx:xx:xx:xx Bit Rate=54Mb/s Tx-Power=20 dBm RTS thr:off Fragment thr:off Encryption key:xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xx Security mode:open Power Management:off Link Quality=45/100 Signal level=-69 dBm Noise level=-88 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:3 Missed beacon:0 sit0 no wireless extensions. # ifconfig -a eth1 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:xxx.xxx.xxx.xxx Bcast:xxx.xxx.xxx.xxx Mask:xxx.xxx.xxx.xxx inet6 addr: xxxx:xxxx:xxxx:xxxx:xxxx/xx Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:12 errors:0 dropped:19 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1770 (1.7 KiB) TX bytes:912 (912.0 b) Interrupt:7 Base address:0xe000 Memory:e0200000-e0200fff
ちなみに、iwlistで周辺にあるAPを探すことができる。
# iwlist eth1 scan
eth1 Scan completed :
Cell 01 - Address: xx:xx:xx:xx:xx:xx
ESSID:"<den>"
Protocol:IEEE 802.11bg
Mode:Master
Channel:3
Encryption key:on
Bit Rate:54Mb/s
Extra: Rates (Mb/s): 1 2 5.5 6 9 11 12 18 24 36 48 54
Signal level=-62 dBm
Extra: Last beacon: 5ms ago
カーネルを2.6.10-1.770_FC3にバージョンアップすると...
カーネルを2.6.10-1.770_FC3にバージョンアップしたところ、無線インタフェースを有効化できなくなった。 lsmodで確認すると、モジュールは読み込まれている。
# ifup eth1 ipw2200 device eth1 does not seem to be present, delaying initialization. # lsmod | grep ipw2200 ipw2200 68108 0 ieee80211 20996 1 ipw2200
/var/log/dmesgファイルを見てみると、次のようなメッセージが残っていた。 ipw2200_boot.fwファイルがロードできないらしい。
# more /var/log/dmesg
....
ipw2200: Detected Intel PRO/Wireless 2915ABG Network Connection
divert: allocating divert_blk for eth1
ipw2200: ipw2200_boot.fw load failed
ipw2200: Unable to load firmware: 0xFFFFFFFE
divert: freeing divert_blk for eth1
ipw2200: failed to register network device
ipw2200: probe of 0000:02:04.0 failed with error -5
....
/lib/modules/2.6.9-1.667/kernel/drivers/net/wirelessディレクトリにインストールしたipw2200のドライバは、カーネルを2.6.10-1.770_FC3にバージョンアップするとなくなってしまう。 そのかわり、kernel-2.6.10-1.770_FC3RPMパッケージにはipw2200用のカーネルモジュールが含まれている。
# ls /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ieee82011 ieee80211_crypt_ccmp.ko ieee80211_crypt_tkip.ko ieee80211.ko ieee80211_crypt.ko ieee80211_crypt_wep.ko # ls /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ipw2200 ipw2200.ko # rpm -qf /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ipw2200/ipw2200.ko kernel-2.6.10-1.770_FC3
ファームウェアファイルは、/lib/firmwareディレクトリにそのまま残っている。 しかし、ファイルの名前がログに記録されたものと異なっている。
# ls /lib/firmware
BCM2033-FW.bin BCM-LEGAL.txt ipw-2.2-bss.fw ipw-2.2-ibss.fw
BCM2033-MD.hex ipw-2.2-boot.fw ipw-2.2-bss_ucode.fw ipw-2.2-ibss_ucode.fw
ファームウェアファイルの名前を変更してみる
/lib/firmwareディレクトリには、ipw2200_boot.fwという名前のファイルはない。 単純にリネームして解決するか、試してみる。
必要なファームウェアファイルは、ipw2200_boot.fw、ipw2200_ucode.fw、ipw2200_bss.fw、ipw2200_ibss.fwの4つらしい。 しかし、ipw2200_ucode.fwに対応しそうなファイルは、ipw-2.2-bss_ucode.fwとipw-2.2-ibss_ucode.fwのふたつが存在する。 まず、ipw-2.2-bss_ucode.fwをipw2200_ucode.fwにリネームしてみる。
# ls /lib/firmware BCM2033-FW.bin BCM-LEGAL.txt ipw-2.2-bss.fw ipw-2.2-ibss.fw BCM2033-MD.hex ipw-2.2-boot.fw ipw-2.2-bss_ucode.fw ipw-2.2-ibss_ucode.fw # cp ipw-2.2-boot.fw ipw2200_boot.fw # cp ipw-2.2-bss_ucode.fw ipw2200_ucode.fw # cp ipw-2.2-bss.fw ipw2200_bss.fw # cp ipw-2.2-ibss.fw ipw2200_bss.fw
一度モジュールをアンロードし、再度読み込んでみると、コンソールとログにエラーを出し続けてしまう。 無線インタフェースを有効化すると、ちゃんと通信はできるのだが。
# rmmod ipw2200 # rmmod ieee80211 # modprobe ipw2200 ipw2200: Unknown notification: subtype=25,flags=0xa0,size=4 ipw2200: Unknown notification: subtype=25,flags=0xa0,size=4 ipw2200: Unknown notification: subtype=25,flags=0xa0,size=4 .... # ifup eth1 Determining IP information for eth1... done.
次に、ipw-2.2-ibss_ucode.fwをipw2200_ucode.fwにリネームしてみる。
# cp ipw-2.2-boot.fw ipw2200_boot.fw # cp ipw-2.2-ibss_ucode.fw ipw2200_ucode.fw # cp ipw-2.2-bss.fw ipw2200_bss.fw # cp ipw-2.2-ibss.fw ipw2200_bss.fw
一度モジュールをアンロードし、再度読み込むと、今度はエラーが出ない。 しかし、無線インタフェースを有効化すると、DHCPサーバからIPアドレスが取得できない。
# rmmod ipw2200 # rmmod ieee80211 # modprobe ipw2200 # ifup eth1 Determining IP information for eth1...PING X.X.X.X (X.X.X.X) from X.X.X.X eth1: 56(84) bytes of data. --- X.X.X.X ping statistics --- 4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2999ms , pipe 4 failed.
ifcfg-eth1ファイルでIPアドレスをスタティックに指定すると、ちゃんと通信できる。 うーん、いまいち...
ドライバとファームウェアファイルを再度インストールしてみる
ドライバとファームウェアを再度インストールしてみる。 やりかたは、Fedora Core 3 インストール直後 kernel-2.6.9-1.667 編と同じ。 モジュールをアンロードして、再度ロードしようとすると、また違うエラー。
# rmmod ipw2200 # rmmod ieee80211 # modprobe ipw2200 WARNING: Error inserting ieee80211 (/lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ieee80211/ieee80211.ko): Unknown symbol in module, or unknown parameter (see dmesg) ieee80211: disagrees about version of symbol ieee80211_crypt_deinit_entries ieee80211: Unknown symbol ieee80211_crypt_deinit_entries ieee80211: disagrees about version of symbol ieee80211_crypt_delayed_deinit ieee80211: Unknown symbol ieee80211_crypt_delayed_deinit ipw2200: Unknown symbol ieee80211_wx_set_encode ipw2200: Unknown symbol ieee80211_wx_get_encode ipw2200: Unknown symbol ieee80211_txb_free ipw2200: Unknown symbol ieee80211_wx_get_scan ipw2200: Unknown symbol ieee80211_alloc ipw2200: Unknown symbol ieee80211_rx ipw2200: Unknown symbol ieee80211_rx_mgt ipw2200: Unknown symbol ieee80211_skb_to_txb ipw2200: Unknown symbol ieee80211_free FATAL: Error inserting ipw2200 (/lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ipw2200/ipw2200.ko): Unknown symbol in module, or unknown parameter (see dmesg) ieee80211: disagrees about version of symbol ieee80211_crypt_deinit_entries ieee80211: Unknown symbol ieee80211_crypt_deinit_entries ieee80211: disagrees about version of symbol ieee80211_crypt_delayed_deinit ieee80211: Unknown symbol ieee80211_crypt_delayed_deinit ipw2200: Unknown symbol ieee80211_wx_set_encode ipw2200: Unknown symbol ieee80211_wx_get_encode ipw2200: Unknown symbol ieee80211_txb_free ipw2200: Unknown symbol ieee80211_wx_get_scan ipw2200: Unknown symbol ieee80211_alloc ipw2200: Unknown symbol ieee80211_rx ipw2200: Unknown symbol ieee80211_rx_mgt ipw2200: Unknown symbol ieee80211_skb_to_txb ipw2200: Unknown symbol ieee80211_free
これは、/lib/modules/2.6.10-1.770_FC3/modules.depファイルに記述されたカーネルモジュールの依存関係がおかしいためのようだ。 kernelパッケージに含まれるドライバと、Intelのサイトからもらってきたドライバが、ごちゃまぜになっている。
# /lib/modules/2.6.10-1.770_FC3/modules.dep # 赤がkernelパッケージに含まれるモジュール # 緑がIntelのサイトからもらってきたモジュール ...... /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ipw2200/ipw2200.ko: /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ieee80211/ieee80211.ko /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ieee80211_crypt.ko ...... /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ipw2200.ko: /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ieee80211/ieee80211.ko /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ieee80211.ko /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ieee80211_crypt.ko ......
/lib/modules/2.6.10-1.770_FC3/modules.depからipw2200関連の行を一度削除し、Intelからもらってきたドライバだけ使用するよう、次の1行を追加する。
# /lib/modules/2.6.10-1.770_FC3/modules.dep
......
/lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ipw2200.ko: /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ieee80211.ko /lib/modules/2.6.10-1.770_FC3/kernel/drivers/net/wireless/ieee80211_crypt.ko
......
一度モジュールをアンロードし、再度読み込むと、今度はエラーが出ない。 無線インタフェースの有効化も成功。
# rmmod ipw2200 # rmmod ieee80211 # modprobe ipw2200 # ifup eth1 Determining IP information for eth1... done.
難点は、カーネルをバージョンアップするたびにドライバのインストールと/lib/modules/2.6.10-1.770_FC3/modules.depファイルを編集しなければならないこと。 また、depmodを実行すると、/lib/modules/2.6.10-1.770_FC3/modules.depファイルが書き換わってしまうので、再編集が必要。
カーネルを2.6.11-1.14_FC3にバージョンアップすると...
カーネルパッケージkernel-2.6.11-1.14_FC3に含まれるデバイスドライバで正常に動作した。 ファームウェアファイルを、/lib/firmwareディレクトリに置くだけでいいみたい。