Inspiron1525にDebian etchをインストールしたときのメモ。
せっかくのノートパソコンなのでやはり無線で接続したい。カーネル2.6.18で4965AGNを使用するにはいろいろと手間が必要だが、がんばってみた。
ちなみに、2.6.22ではmac80211が統合されているらしいので、ドライバを入れるだけで動くそうだ。さらに、2.6.24ではiwl4965がカーネルに統合されているため、特別手間がかからないらしい。この辺、stable版を使っていると苦労するところなのだろう。
カーネルのソースコードを用意する
現在利用しているカーネルのバージョンを調べ、適したバージョンのソースコードをインストールする。
# uname -r
2.6.18-6-686
# aptitude install linux-source-2.6.18
「/usr/src」以下にソースコードのアーカイブがインストールされるので解凍し、「/usr/src/linux」にシンボリックリンクを作成する。
# cd /usr/src
# tar vxfj linux-source-2.6.18.tar.bz2
# ln -s /usr/src/linux-source-2.6.18 /usr/src/linux
現在のカーネルと同じ設定でコンパイルされるように、「/boot」ディレクトリにある設定ファイルをコピーし、「make oldconfig」で過去の設定を引き継がせる。
# cp /boot/config-2.6.18-6-686 /usr/src/linux/.config
# cd /usr/src/linux
# make oldconfig
ドライバ、ファームウェア、mac80211サブシステムをダウンロード
インストールに必要となるドライバ、ファームウェア、mac80211サブシステムは下記サイトからダウンロードできる。
Intel Wireless WiFi Link drivers for Linux
私の場合は下記のバージョンをダウンロードすることにした。
| mac80211 |
mac80211-10.0.4 |
| ドライバ |
iwlwifi-1.1.0.tgz |
| ファームウェア |
iwlwifi-4965-ucode-4.44.1.20.tgz |
mac80211サブシステムとファームウェアは作業時点での最新版、ドライバはやや古いバージョンとなっている。これは、カーネルが2.6.18では最新版のドライバをコンパイルできなかったためだ。(私の勘違いではない....と思う)
mac80211サブシステムを適用させるためにはカーネルの再構築が必要になるのだが、再構築後は有線LANのドライバを再インストールする必要がある。よって、必要なファイルはあらかじめダウンロードしておくことにする。
# wget http://intellinuxwireless.org/mac80211/downloads/mac80211-10.0.4.tgz
# wget http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-1.1.0.tgz
# wget http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-4965-ucode-4.44.1.20.tgz
カーネルソースにmac80211を適用する
無線サブシステムの「mac80211」をカーネルソースにパッチする。
まず、rsyncをインストールしておく。
# aptitude install rsync
「/lib/modules/(カーネルのバージョン)/source」というカーネルソースのシンボリックリンクを作成する。
# ln -s /usr/src/linux-source-2.6.18 /lib/modules/2.6.18-6-686/source
これを作成しておかないと、パッチ適用時に下記のエラーが表示されてしまう。
Kernel Makefile not found at '/lib/modules/2.6.18-6-686/source/'
If patch or script failed, check pre/ and post/ for current stage.
make: *** [compatible/modified] エラー 1
続いて、カーネルの設定ファイル「.config」を下記のように変更する
# vim /usr/src/linux/.config
CONFIG_NET_WIRELESS_RTNETLINK=y
CONFIG_NET_WIRELESS_RTNETLINK=n
上記の設定を無効にしておかないと、パッチ適用時に下記のエラーが表示されてしまう。
Checking kernel compatibility in:
/lib/modules/2.6.18-6-686/source//
! CONFIG_NET_WIRELESS_NETLINK can not be set in .config!
make: *** [compatible/modified] エラー 1
準備は整ったので、ダウンロードしておいたmac80211サブシステムのアーカイブを展開し作成されたディレクトリに移動する。「make; make patch_kernel」とすることで、カーネルソースにmac80211サブシステムを組み込むことが出来る。
# tar zxvf mac80211-10.0.4.tgz
# cd mac80211-10.0.4
# make; make patch_kernel
カーネルの再構築を行う
mac80211サブシステムを適用し終えたら、カーネルの再構築を行う。
カーネル再構築用のパッケージをインストールする。
# aptitude install kernel-package
カーネルソースのディレクトリに移動し、カーネルの再構築を行う。以前にカーネルの再構築を行っていた場合、「make-kpkg clean」でクリアを行っておく。
# cd /usr/src/linux
# make-kpkg clean
# make-kpkg --append_to_version -6-686-mac80211 --initrd --revision=relm1.0 linux-image
2行目の引数は下記の意味になる。
- --append_to_version
- カーネルのバージョンに追記される。インストール時、既存のカーネルと区別したい場合に指定する。
- --revision
- カーネルバージョンのリビジョンを指定する。お好みで問題ない。
- --initrd
- RAMディスクを作成する。--append_to_versionを変更した場合などに指定しないとRAMディスクが作成されず、ブート時にカーネルパニックになる。
- linux-image
- debパッケージの先頭に付ける名前。
また、再構築の開始時にいくつか質問されたので、下記のように答えた。
Improved wireless configuration API (CFG80211) [N/m/y] (NEW) y
Generic IEEE 802.11 Networking Stack (mac80211) (MAC80211) [N/m/y/?] (NEW) y
Enable LED triggers (MAC80211_LEDS) [N/y/?] (NEW) y
Export mac80211 internals in DebugFS (MAC80211_DEBUGFS) [N/y/?] (NEW) n
Enable debugging output (MAC80211_DEBUG) [N/y/?] (NEW) n
その他の質問が表示された場合などは下記のサイトが参考になる。私も参考にさせてもらった。
ITPro:『Linuxカーネルの設定パラメータ−ネットワークの設定』
ITPro:『Linuxカーネルの設定パラメータ』
再構築が完了すると、「/usr/src」ディレクトリに「linux-image-2.6.18-6-686-mac80211_relm1.0_i386.deb」という名前のdebパッケージが作成されるので、「dpkg」コマンドでインストールを行う。
dpkg -i linux-image-2.6.18-6-686-mac80211_relm1.0_i386.deb
インストールが完了したら、一度マシンを再起動して無事起動できることを確認しておく。GRUBなどブートローダの設定も行ってくれるので、ブートローダの画面で今回インストールしたカーネルを選択すればOKだ。
ちなみに、再構築には非常に長い時間がかかる。私はCore2Duoのマシンで40分近くかかった。お風呂でも入ってくるとちょうど良い。
ファームウェアのインストール
あらかじめダウンロードしておいたファームウェアのアーカイブを展開し、「/usr/lib/hotplug/firmware」ディレクトリにコピーする。
# tar zxvf iwlwifi-4965-ucode-4.44.1.20.tgz
# cd iwlwifi-4965-ucode-4.44.1.20
# cp iwlwifi-4965-1.ucode /usr/lib/hotplug/firmware/
ドライバのインストール
あらかじめダウンロードしておいたドライバのアーカイブを展開し、コンパイルする。
# tar zxvf iwlwifi-1.1.0.tgz
# cd iwlwifi-1.1.0
# make
# make install
ドライバを読み込ませてみる。再起動してみても良い。
# ./load
NICが正常に認識されているか確認してみる。
# iwconfig
wmaster0 no wireless extensions.
Warning: Driver for device wlan0 has been compiled with version 22 of Wireless Extension, while this program supports up to version 20.
Some things may be broken...
wlan0 IEEE 802.11g ESSID:"" Nickname:""
Mode:Managed Frequency:2.412 GHz Access Point: Not-Associated
Tx-Power=27 dBm
Retry min limit:7 RTS thr:off Fragment thr=2346 B
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
これで、ハードウェアの設定は完了だ。
NICの設定
続いて、「/etc/network/interfaces」にNICの設定を記述する。
詳しい原因は分からないのだが、eth1より先にブートさせないとうまく動いてくれなかったので、loとeth1の間に記述した。
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.30.9
netmask 255.255.255.0
gateway 192.168.30.250
wireless_mode Managed
wireless_essid *****************
wireless_channel 7
wireless_key s:*************
auto wlan0
設定の意味は下記の通り
| wireless_mode |
無線APへ接続するなら「Managed」。PC間で接続するなら「Ad-Hoc」。 |
| wireless_essid |
接続先のESSIDを指定する。省略すると「any」扱い?? |
| wireless_channel |
利用チャンネルを指定する。省略すると自動で設定される(はず)。
ちなみに、802.11gは7チャンネル辺りが電波干渉しづらいらしい。 |
| wireless_key |
WEPキーを指定する。文字列で指定する場合は「s:*****」とし、16進数での指定ではそのまま記述する。 |
WEPではなく、WPAを使う場合などは別の手順が必要となる。私はニンテンドーDSの関係でWEPにせざるを得ないので上記設定となった。
ITPro:『【 iwconfig 】 無線LANインタフェースの参照・設定』
eth1は使用しなくなるので、起動しないように設定しておく。
auto eth1
#auto eth1
eth1を停止しない場合、複数NICでの運用になるため、デフォルトゲートウェイの設定(gateway ***)はいずれかのNICのみにしておいた方がいい。何らかの理由で両方のNICにデフォルトゲートウェイを設定する場合、デフォルトゲートウェイを複数指定することはトラブルを招くこともあると念頭に置いておくほうがいいだろう。
ネットワークの設定を反映させる。ただし、前述した通りeth1が動作しているとうまく動いてくれなかったのであらかじめ停止しておく。
# ifconfig eth1 down
# /etc/init.d/networking restart
無線が正常に接続された場合、iwconfigコマンドの結果が下記のようになる。下記の例では802.11gで接続されている。
# iwconfig
wlan0 IEEE 802.11g ESSID:"***********************" Nickname:""
Mode:Managed Frequency:2.442 GHz Access Point: 00:00:00:00:00:00
Bit Rate=54 Mb/s Tx-Power=27 dBm
Retry min limit:7 RTS thr:off Fragment thr=2346 B
Encryption key:0000-0000-0000-0000-0000-0000-00
Power Management:off
Link Quality=100/100 Signal level=-35 dBm Noise level=-94 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
「/etc/resolv.conf」の設定を行っていない場合は設定を忘れずに。
まとめ
あれこれ手間がかかったものの、これで問題無く無線でLANに接続できるようになった。
802.11nの機材が無いため、802.11gでの利用となるが、先立つものが手元にやってきたらぜひ試してみたい。
補足
正常に接続できるようになっても、筐体前面のLEDは点灯しない。また、GNOME側のネットワークツールでも動作していないように表示される。
使う分には問題ないので、暇なときにでも調べてみようと思う。