2015年4月28日火曜日

NEC Aterm WL54SU と ar5523 ドライバの再ビルド

インターネット・オークションにて NEC Aterm WL54SU (PA-WL/54SU) を入手しました。

特徴など

WL54SU は、USB プラグの根本の部分が回転する構造となっており、USB ポートへ装着したあと、本体を任意の方向へ向けることができるようになっています。しかし、この自在に向きを変える構造が細くなっていることから、強度的な問題もあるようです。
無線LAN環境は、IEEEE 802.11 a/b/g 対応となっており、チップセットとして Atheros AR5005UX (AR5523) を使用している模様です。

今回入手した NEC Aterm WL54SU です。

Debian Wheezy Backports では動作しません

Debian Jessie では、AR5523 に標準対応ということになっていますが、私が現在使用している Debian Wheezy では、Backports 対応ということでした。下記の Debian Wiki を参考にして、カーネル 3.16.0 と AR5523 用のファームウェアのインストールを行いました。
Debian Wiki -- ar5523
https://wiki.debian.org/ar5523

Backports のカーネルと AR5523 ファームウェアのインストール
# apt-get -t wheezy-backports install linux-image-$(uname -r|sed 's,[^-]*-[^-]*-,,') firmware-atheros

(注意事項)AR5523 のファームウェア(ar5523.bin)は、Backports 用の firmware-atheros の中に入っています。標準の firmware-atheros には存在しませんので注意が必要です。すでに標準の firmware-atheros をインストール済みの場合には、一度アンインストールを行ったあと、再度 Backports の firmware-atheros をインストールしてください。

以上のインストール作業を Debian Wiki に基づいて行いましたが、WL54SU の認識すらしてくれませんでした。

ar5523 ドライバ・モジュールへデバイス ID の追加

このところ積極的に行なっているドライバ・モジュールに対してデバイス ID の追加をこの ar5523 にも行なってみました。

1. ar5523 のドライバ・モジュールの存在するディレクトリへ移動します。
# cd /usr/src/linux-source-3.16/drivers/net/wireless/ath/ar5523/

2. ar5523.c を編集してデバイス ID (0409:0166) を 1786 行目あたりに追加します。
# vi  ar5523.c

3. ビルドします。
# make -C /lib/modules/$(uname -r)/build M=$(pwd)

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

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

6. 動作確認をします。
modprobe で ar5523 ドライバ・モジュールを一度アンロードしたあと、再度 WL54SU を装着します。
#  modprobe -r ar5523

デバイス ID の追加では動作しません

残念ながらデバイス ID を単純に追加するだけでは、認識までするものの動作しませんでした。dmesg でカーネルからのメッセージを確認をすると次の内容が気になりました。
could not initialize adapter

初期化が出来ていないというもので、ファームウェアが WL54SU 本体に導入されなかったのか、不適合であった場合によく見かけるものです。

そこで改めてデバイス ID のテーブルを観察してみました。そして出来上がった ar5523.ko のモジュール情報も観察してみました。
# modinfo ar5523
すると不思議な現象を発見しました。
alias: usb:v0409p0167d*dc*dsc*dp*ic*isc*ip*in*
alias: usb:v0409p0166d*dc*dsc*dp*ic*isc*ip*in*

NEC のメーカ ID の 0409 はデバイス ID テーブルには、一個しか存在していないはずなのに、二個の 0409 のデバイスが登録されているのです。それも連続して二個です。他のデバイスも同様の状態となっていました。

Debian Wiki の ar5523 のページの対応デバイスの部分を見て原因がはっきりしました。デバイス ID が二個並んでおり、そのうち一つは「ファームウェア無し」のものでした。どうも ar5523 ドライバ・モジュールをビルドすると、自動的に二つのデバイス ID が登録されてしまうようです。

デバイス ID の対策を行なって再ビルド

ar5523.c の 1745 行目からの部分を観察すると、デバイス ID テーブルの ID そのものとデバイス ID に 1 を加算した ID を登録していることが判明しました。
#define AR5523_DEVICE_UG(vendor, device) \
        { USB_DEVICE((vendor), (device)) }, \
        { USB_DEVICE((vendor), (device) + 1), \
                .driver_info = AR5523_FLAG_PRE_FIRMWARE }
#define AR5523_DEVICE_UX(vendor, device) \
        { USB_DEVICE((vendor), (device)), \
                .driver_info = AR5523_FLAG_ABG }, \
        { USB_DEVICE((vendor), (device) + 1), \

そこで、デバイス ID テーブルへ登録する デバイス ID から 1 を差し引いたものを登録してみました。
AR5523_DEVICE_UX(0x0409, 0x0165),       /* NEC / WL54SU */

この状態で再度 ar5523 ドライバ・モジュールを再ビルドして動作確認を行なってみました。

新しいデバイス ID の登録で動作しました

デバイス ID を 1 ほど減算した ID を登録した ar5523 ドライバ・モジュールで動作しました。ただし 2.4GHz 帯の IEEE 802.11 b/g モードだけの動作でした。なぜか 5GHz 帯の IEEE 802.11 a では動作しませんでした。

その他の ar5523 に依存する無線LANアダプタの確認

手元に AR5523 チップを使用している無線LANアダプタがあります。これらのデバイス ID を追加してar5523 ドライバ・モジュールを再ビルドしてみました。
  • コレガ CG-WLUSB2GS 07aa:0031
  • バッファロー WLI-U2-KAMG54 0411:0092
  • バッファロー WLI-U2-AMG54HP 0411:00aa
AR5523 チップ搭載の無線 LAN アダプタです。

ar5523.c への登録例
AR5523_DEVICE_UG(0x07aa, 0x0030),       /* Corega K.K. / CG-WLUSB2GS */
AR5523_DEVICE_UX(0x0411, 0x0091),       /* Buffalo / WLI-U2-KAMG54 */
AR5523_DEVICE_UX(0x0411, 0x00a9),       /* Buffalo / WLI-U2-AMG54HP */
コレガ CG-WLUSB2GS
IEEE 802.11 b/g 動作の製品ですが、ちゃんと認識して、正常に動作しました。

コレガ CG-WLUSB2GS

バッファロー WLI-U2-KAMG54
IEEE 802.11 a/b/g 動作の製品ですが、WL54SU と同様に 2.4GHz 帯の IEEE 802.11 b/g モードだけの動作となっていました。

バッファロー WLI-U2-KAMG54

バッファロー WLI-U2-AMG54HP
IEEE 802.11 a/b/g 動作の製品ですが、WL54SU と同様に 2.4GHz 帯の IEEE 802.11 b/g モードだけの動作となっていました。

バッファロー WLI-U2-AMG54HP

現時点では、手持ちの AR5523 チップを使用した無線 LAN アダプタで 5GHz 帯の IEEE 802.11 a モードで動作するものはありませんでした。残念ながら原因は不明です。

ダウンロード

次の URL から上記の四種類の無線 LAN アダプタのデバイス ID を追加した ar5523.ko ドライバ・モジュールをダウンロードすることができます。Debian Wheezy Backports (Linux-3.16.0) で使用可能なはずです。自己責任でどうぞ!
ar5523.ko (デバイス ID 追加済みドライバ・モジュール)
https://drive.google.com/file/d/0B5QdaY5lu2e3X2pmQTQ4b29YdE0/view?usp=sharing

ar5523.c (デバイス ID 追加済みソースコード)
https://drive.google.com/file/d/0B5QdaY5lu2e3UVQ2RnJwRzVCWU0/view?usp=sharing

0 件のコメント:

コメントを投稿

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