2015年4月27日月曜日

NEC Aterm WL54SC と ath5k ドライバの再ビルド

インターネット・オークションにて NEC Atrem WL54SC (PA-WL/54SC) 無線 LAN アダプタを入手しました。

今回入手した NEC Aterm WL54SC です。
標準の ath5k では、IEEE 802.11 a が動作しません。

特徴など

WL54SC は IEEE 802.11 a/b/g 対応の無線LANアダプタです。内部チップには Atheros AR5413/AR5414 を使用している模様で、Debian などの Linux 系のディストリビューションでは ath5k ドライバで動作するものです。しかし本機を Debian Wheezy が稼働しているマシンへ装着すると、何故か 5GHz 帯の IEEE 802.11 a モードだけが動作しませんでした。他の Atheros AR5413/AR5414 チップを使用した無線LANアダプタでは、IEEE 802.11 a モードで動作するものもあり、残念な状態でした。

ath5k ドライバの改修で IEEE 802.11 a 対応可能に

ネット上を WL54SC と Linux をキーワードとして検索してみると、やはり 5GHz 帯の IEEE 802.11 a モードで動作しない事例が数多く紹介されていました。その中に、今回の WL54SC が ath5k ドライバで 5GHz 帯の IEEE 802.11 a モードで動作しないことの原因と対策を行なっているブログを発見しました。
WL54SC の 11A モードを ath5k ドライバで使う
http://harakire.tripod.com/junkies/ath5k_for_wl54sc.html

上記のブログによりますと、WL54SC の EEPROM ヘッダ情報の LSB が "0" になっていることによって、ath5k ドライバが IEEE 802.11 a モードに非対応の無線LANアダプタであると認識しているようです。

このブログでは、ath5k ドライバがこの EEPROM ヘッダ情報の LSB の "0", "1" だけで IEEE 802.11 a モードに対応するかどうかを判断するのではなく、総合的に判断するように改変して WL54SC でも IEEE 802.11 a モードでも動作するようにしていました。またこの改変を行ったパッチ(ath5k_for_wl54sc.txt)も提供されていました。

早速、私もこのパッチを利用して Debian Wheezy の ath5k ドライバを改変して再ビルドを行なってみることとしました。

ath5k ドライバ・モジュールの改変

ath5k/base.c と ath5k/eeprom.c の二つのファイルを改変することとなりますが、パッチが Linux 3.8.13 用のもののようです。Debian Wheezy の Linux 3.2.0 と大きくバージョンが異なっていることから、念の為、手作業にて改変を行いました。ソースコードを調べてみると、基本的にパッチの挿入行数が若干異なるだけで、問題となる部分はありませんでした。
ath5k/base.c 改修済みソースコード
https://drive.google.com/file/d/0B5QdaY5lu2e3eTczelI4RktKN2s/view?usp=sharing

ath5k/eeprom.c 改修済みソースコード
https://drive.google.com/file/d/0B5QdaY5lu2e3MnRQZUZpdURnRU0/view?usp=sharing

ath5k ドライバ・モジュールの再ビルド

ath5k ドライバ・モジュールの再ビルドの作業ですが、ここ数日行なってきた rt2800usb や zd1211rw のドライバ・モジュールの再ビルドと手順は同じです。

1. ath5k ディレクトリへ移動します。
# cd /usr/src/linux-source-3.2/drivers/net/wireless/ath/ath5k/

2. ビルド作業を行います。
# make -C /lib/modules/$(uname -r)/build M=$(pwd)

3. 出来上がった ath5k.ko をコピーによってインストールします。
# cp ath5k.ko /lib/modules/3.2.0-4-686-pae/kernel/drivers/net/wireless/ath/ath5k/ath5k.ko

4. カーネル・モジュールの依存関係を解決します。
# depmod -a

これで作業は終了ですが、すでに WL54SC などの ath5k ドライバ・モジュールが導入されている場合には、ath5k ドライバ・モジュールのアンロードを行なっておきます。
# modprobe -r ath5k

ath5k ドライバ・モジュールのアンロードが終了したところで、WL54SC を PC カードスロットへ挿入します。そして無線LAN環境の確認を行なってみます。私は Debian Wheezy の Gnome3 のネットワーク・マネージャのアイコンで IEEE 802.11 a の無線LANアクセス・ポイントへ接続を行なって動作確認を行いました。もちろん無事動作しました。

ダウンロード

次の URL から改変した ath5k.ko ドライバ・モジュールをダウンロードすることができます。Debian Wheezy (Linux-3.2.0) で使用可能なはずです。自己責任でどうぞ!
ath5k.ko
https://drive.google.com/file/d/0B5QdaY5lu2e3aUo2djFXUE1mUnc/view?usp=sharing

カーネルのアップデートがあった場合には、ath5k.ko が上書きされるため、再度コピーし直してください。

他の ath5k ドライバで動作する無線 LAN アダプタの動作状況

今回の改変を行った ath5k ドライバ・モジュールが WK54SC だけでなく、その他の ath5k ドライバ・モジュールを使用する無線LANアダプタでも正常に動作するか確認してみました。

バッファロー WLI-CB-AMG54 は、以前より標準の ath5k ドライバ・モジュールでシステムがフリーズしてしまうことが判明していましたが、この改変後の ath5k ドライバ・モジュールでもフリーズしました。

バッファロー WLI-CB-AMG54
以前と同じように ath5k では、フリーズします。

そして コレガ CG-WLCB54AG2 も WL54SC と同様に標準の ath5k ドライバ・モジュールでは、IEEE 802.11 a モードに対応しながら、動作していませんでした。しかし改変後の ath5k ドライバ・モジュールによって IEEE 802.11 a モードで動作するようになりました。

コレガ CG-WLCB54AG2
IEEE 802.11 a モードでも動作するようになりました。

コレガ CG-WLCB54AG でも動作しましたが、madwifi ドライバ・モジュールにて 5GHz 帯が J52 対応だったものが、W52, W53 にも対応するようになっていました。利用範囲が広がりました。

コレガ CG-WLCB54AG
J52, W52, W53 で動作するようになりました。

その他、写真にある手持ちの ath5k ドライバ・モジュールを使用する無線LANアダプタ(IEEE 802.11 a/b/g 対応 と IEEE 802.11 b/g 対応 )を装着してみましたが、どれも異常な動作をすることはありませんでした。手持ちの数多くの無線LANアダプタで正常な動作をすることが確認できました。

手持ちの ath5k で動作する無線 LAN アダプタです。

まだバッファロー WLI-CB-AMG54 でフリーズ現象が発生するなど、改良の余地が残っています。madwifi では正常に動作していることから、madwifi のソースコードの中に問題解決の手がかりがあるのかもしれません。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。