2015年11月18日水曜日

D-Link DSL-2740B の OpenWrt で IEEE 802.11 n モードが動作

昨日 OpenWrt Chaos Calmer 15.05 をインストールした DSL-2740B は、使用している無線LANモジュール b43 が IEEE 802.11 n モードに対応していないようで、n モードの設定さえ出来ない状態でした。

本日はこの動かなかった b43 モジュールの代わりに Broadcom-wl モジュールを導入して n モードの動作に成功しました。以下はその記録です。

Broadcom-wl モジュールを組み込んだファームウェアをインストールした DSL-2740B です。

単純に Broadcom-wl の追加インストール

過去に BCM47xx 系のプロセッサにおいて Broadcom-wl モジュールへ置き換える作業をしたことがあります。そのときと同じ要領で b43 から Broadcom-wl モジュールへ置き換えを試みました。しかしフラッシュメモリの容量が少なく、インストールに失敗してしまいました。
# opkg update
# opkg install kmod-brcm-wl wlc nas
Installing kmod-brcm-wl (3.18.20+5.10.56.27.3-8) to root...
Installing wlc (5.10.56.27.3-8) to root...
Downloading http://downloads.openwrt.org/chaos_calmer/15.05/brcm63xx/generic/packages/base/wlc_5.10.56.27.3-8_brcm63xx.ipk.
Installing nas (5.10.56.27.3-8) to root...
Downloading http://downloads.openwrt.org/chaos_calmer/15.05/brcm63xx/generic/packages/base/nas_5.10.56.27.3-8_brcm63xx.ipk.
Configuring wlc.
Configuring nas.
Collected errors:
 * verify_pkg_installable: Only have 424kb available on filesystem /overlay, pkg kmod-brcm-wl needs 715
 * opkg_install_cmd: Cannot install package kmod-brcm-wl.

イメージビルダーでファームウェア作成

そこでイメージビルダーを使って 4MB のフラッシュメモリの容量に収まるファームウェアを作成することとしました。ビルドの方針としては、b43 モジュールの代わりに Broadcom-wl モジュールを入れ替えるのと、ルータ機能は全く使用することがないため、バッサリ削除することによってファームウェアの大きさを抑えることとしました。

OpenWrt Chaos Calmer 15.05 の brcm63xx 用イメージビルダーをダウンロードして展開した後、必要な設定を行い、ファームウェアをビルドしました。

プロファイルの確認の確認を行いました。以下の "DSL274XB_C" のプロファイルを使用しました。
$ make info

DSL274XB_C:
    D-Link DSL-2740B/DSL-2741B rev C2/C3
    Packages: kmod-b43 wpad-mini

ターゲットファイル(include/target.mk)を編集してルータ機能を削除します。青文字が追加部分で、赤文字の部分がコメントアウトで削除した部分です。
$ vi include/terget.mk

# Default packages - the really basic set
DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools
# For nas targets
DEFAULT_PACKAGES.nas:=block-mount fdisk lsblk mdadm
# For router targets
DEFAULT_PACKAGES.router:=
#DEFAULT_PACKAGES.router:=dnsmasq iptables ip6tables ppp ppp-mod-pppoe kmod-nf-nathelper firewall odhcpd odhcp6c
DEFAULT_PACKAGES.bootloader:=

そしてプロファイル(DSL274XB_C)を指定してビルドしました。
$ make image PROFILE=DSL274XB_C PACKAGES="-kmod-b43 kmod-brcm-wl wlc nas uhttpd luci"

ビルドしたファームウェアは bin/brcm63xx/ の中に保存されています。ファイル容量は、以前よりも減少して 3.2MB ほどのものが出来上がりました。

ファームウェアは、ハードウェアバージョンの C2 用と C3 用の二つが出来上がりましたが、我が家の DSL-2740B のハードウェアバージョンが C2 であるため、C2 用のものを使用しました。

DSL-2740B へインストール

前回の OpenWrt のインストールと同様にファームウェアのインストールをシリアルコンソール上からの操作で行いました。
D-Link DSL-2740B へ OpenWrt をインストール
http://near-unix.blogspot.jp/2015/11/d-link-dsl-2740b-openwrt.html

OpenWrt をインストール中の DSL-2740B です。

OpenWrt の設定(LAN ポートの不通対策)

無線 LAN 部分の動作確認の前に基本的なネットワークの設定で問題が発生しました。起動させた直後は問題なく動作している LAN ポートが、ネットワークの設定を行うと通信を停止してしまいました。単純にシリアルコンソール上からネットワークのリロードを行なっても同様の症状が発生しました。ただし再起動させれば問題なく LAN ポートは稼動します。

いろいろと調べてみると、どうもファイアウォールの起動スクリプトで問題が発生しているようでした。イメージビルダーではファイアウォールを削除しているのにも関わらずブラウザ設定画面の LuCI では "firewall" の項目が存在しており、そして起動スクリプトが「有効(enable)」となっていました。そこでこのファイアウォールの起動スクリプトを「無効(disable)」にしたところ、ネットワークの設定を行なっても通信が停止することはなくなりました。

[System] - [Startup] の設定でファイアウォールを無効としました。

無線 LAN の設定

Broadcom-wl モジュールを組み込んだファームウェアで IEEE 802.11 n モードが動作するかどうか心配でしたが、設定画面には n モードの設定が出来るようになっていました。そして必要な設定を行った後、通信テストを行ったところ、無事通信ができました。

無線LANの設定のページに n モードの指定をすることが出来ました。
ノートパソコン(ThinkPad X61)から n モードでで通信をしているところです。


これで無事 IEEE 802.11 n モードで動作するようになりました。

今後の予定としては、ファームウェアのインストールにシリアルコンソールが必要であるため、筐体を加工してシリアルコンソールの外部端子を設けたいと思っています。

Broadcom-wl ドライバで n モードの動作をしました。



0 件のコメント:

コメントを投稿