Broadcom ワイヤレス

提供: ArchWiki
移動先: 案内検索

関連記事

この記事では Broadcom のワイヤレスネットワークデバイスをインストール・設定する方法を説明しています。

イントロダクション

GNU/Linux における自社製品の Wi-Fi カードのサポートについて Broadcom は(悪い意味で)有名でした。最近になるまで、ほとんどの Broadcom のチップは全くサポートがなかったり、ユーザー自身がファームウェアを弄る必要があったのです。当時はリバースエンジニアリングによるドライバー (brcm4xxx, b43 など) によって限られた数のワイヤレスチップだけがサポートされていました。リバースエンジニアリングの b43 ドライバーは 2.6.24 からカーネルに入りました。

2008年の8月に、Broadcom は GNU/Linux で Broadcom の無線ハードウェアをサポートする 802.11 Linux STA ドライバー を公式にリリースします。それらは制限的なライセンスのドライバーでしたが、Broadcom は将来もっとオープンなアプローチを目指すことを約束しました。なお、このドライバーは隠蔽された ESSID では動作しません。

2010年9月、Broadcom は彼らのハードウェアのための完全にオープンソースなドライバーを 最終的にリリース しました。このドライバー、brcm80211 はカーネル 2.6.37 から含まれています。2.6.39 のリリース時に、これらのドライバーは brcmsmacbrcmfmac に名前が変更されています。

執筆時点で、Broadcom Wi-Fi チップセットを使っているユーザーには3つの選択肢が存在します:

ドライバー 説明
brcm80211 オープンソースのカーネルドライバー
b43 リバースエンジニアリングによるカーネルドライバー
broadcom-wl プロプライエタリな Broadcom STA ドライバー

ドライバーの選択

まず、あなたの使っているカードの PCI-ID を確認してください。コンソールに次のコマンドを入力 (大文字小文字の違いに気をつけて下さい):

$ lspci -vnn -d 14e4:

それから、あなたのカードを b43 でサポートされている デバイスのリストでサポートされているデバイスのリスト を見て確認してください。

インストール

brcm80211

brcm80211 ドライバーはカーネルに含まれています。PCI カードには brcmsmac、SDIO デバイスには brcmfmac という名前が付けられています。

これらのドライバーは起動時に自動的にロードされるためユーザーがやらなくてはならない操作はありません。ドライバーが自動的にロードされない場合は、手動でドライバーをロードしてください。

ノート:
  • linux 3.3.1 から、brcmsmac ドライバーは bcma モジュールに依存するようになっています。従って、bcma モジュールをブラックリストに入れてはいけません。
  • wireless.kernel.org によれば brcm80211 は SSB backplane を使っている古い PCI/PCI-E チップをサポートしていません。

b43/b43legacy

このドライバーは 2.6.24 からカーネルにマージされています。

b43/b43legacy カーネルモジュールのロード

あなたの使っているデバイスを こちら で検索してどちらのモジュールが必要なのか確認してください。ここ でコンピュータの機種で検索することもできます。問題が発生しないようにもう片方のモジュールはブラックリストに入れます (b43 または b43legacy)。ブラックリスト化の方法は、カーネルモジュール#ブラックリスト を参照。

AUR から b43-firmwareAUR, b43-firmware-classicAUR, b43-firmware-legacyAUR のどれか適切なパッケージをインストールしてください。

ノート:
  • BCM4306 rev.3, BCM4311, BCM4312 は b43-firmware だと問題が発生します。b43-firmware-classicAUR を使って下さい。
  • BCM4331 は b43-firmware-classic だと問題が発生します。b43-firmwareAUR を使って下さい。

b43 によってサポートされているデバイスの低電圧版を使っている場合、特別なファームウェアをインストールする必要があります。低電圧版のチップを使っているのかどうかは lspci | grep Broadcom | grep LP-PHY を実行することですぐに確認できます。ファームウェアのインストールは、下で説明しているように 適切なパッケージ をダウンロードして b43-fwcutter を使うか、このインストールスクリプトを使用することで可能です。

LP-PHY ファームウェアをインストールするには、以下を実行:

$ curl -LO http://downloads.openwrt.org/sources/broadcom-wl-4.178.10.4.tar.bz2
$ tar xjf broadcom-wl-4.178.10.4.tar.bz2
$ cd broadcom-wl-4.178.10.4/linux
# b43-fwcutter -w /lib/firmware wl_apsta.o

ファームウェアをインストールしたら、デバイスを設定することができるようになります。

ノート: b43 モジュールがロードされて機能しているようなのにデバイスにアクセスできないときは、おそらく bcma モジュールをブラックリスト化する必要があります。下のトラブルシューティングを見て下さい。それで問題が解決しない場合、b43 を使うように CONFIG_B43_BCMA_EXTRA オプションを設定してカーネルを再コンパイルしなくてはなりません。このオプションはモジュール間での競合状態を解決するために導入されたもので BCM4322, BCM43224, BCM43225 チップセットのカードでは必須です。

broadcom-wl

警告: このドライバーは長年の尽力により成熟しており現在はほとんど問題なく動くようになっていますが、このドライバーは2つのオープンソースドライバーがあなたの使っているデバイスをサポートしていないときにだけ使うことが推奨されています。サポートされているデバイスのリストについてはプロジェクトの b43 のページを参照してください。

broadcom-wl ドライバーを使いたい人のために、AUR には broadcom-wlAUR という名前でパッケージが存在します。DKMS を使いたい場合は broadcom-wl-dkmsAUR があります。

ヒント: broadcom-wlAUR を使用する場合、カーネルをアップグレードするたびに無線が使えなくなり、パッケージをアンインストールしてから再インストールする必要があります。broadcom-wl-dkmsAUR を使うことでその手間を省くことができます。

wl カーネルモジュールのロード

他の使用可能なモジュールが存在しない場合、wl モジュールを手動でロードする必要があります。wl モジュールをロードする前に、b43 など他のモジュールを取り除いて下さい、おそらく自動的にロードされています:

# rmmod b43

ssb がロードされている場合も、アンロードしてください:

# rmmod ssb
ノート: ssb のアンロードが失敗すると無線インターフェイスが作られなくなることがあります。

wl モジュールをロード:

# modprobe wl

wl モジュールは lib80211 または lib80211_crypt_tkip を自動的にロードします。lsmod でロードされているか確認してください。ロードされていない場合は、2つのモジュールのどちらかを追加してください:

# modprobe lib80211

または:

# modprobe lib80211_crypt_tkip

Broadcom から直接ドライバーをインストールしたときは、依存関係を更新する必要があるかもしれません:

# depmod -a

起動時にモジュールがロードされるようにする方法は、カーネルモジュールを見て下さい。

/etc/modprobe.d/modprobe.conf で使わないモジュールを (干渉しないように) ブラックリストに入れることができます。モジュールをブラックリスト化する方法は、カーネルモジュール#ブラックリスト を見て下さい。

ノート: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] は b43ssb をブラックリスト化しても動作しません。

トラブルシューティング

Wi-Fi カードが存在しないかのように扱われる

Broadcom BCM43241 などの新しいカードを使っているユーザーは lspci や lsusb でカードの情報が何も表示されないという問題に遭遇することがあります。

カーネルをアップグレードした後に Wi-Fi カードが動作しなくなった又は認識されなくなった (brcmsmac)

カーネルが brcmsmac モジュールの代わりに bcma モジュールを使用することで起こります。解決方法は bcma モジュールをブラックリストに入れることです。方法は、カーネルモジュール#ブラックリスト を見て下さい。

ノート: 上記の設定が必要なのは Linux カーネル 3.0, 3.1, 3.2 だけです。カーネル 3.3 からは、brcmsmac モジュールは bcma を使用するため、bcma のブラックリストを解除しないと Wi-Fi インターフェイスが使えません。

Wi-Fi カードが動作しない又は認識されない (broadcom-wl)

適切なモジュールがロードされているか確認してください。不要なモジュールが自動的にロードされないように brcm80211, b43, ssb カーネルモジュールをブラックリスト化させる必要があるかもしれません。ブラックリストの方法については、カーネルモジュール#ブラックリスト を参照。

ノート: brcm80211 ドライバーをブラックリストに入れる必要はないかもしれません。2011年6月20日現在、デフォルトで wl ドライバーの前に brcm80211 モジュールがロードされるため、wl は使用されません。

モジュールの依存関係が更新されたか確認:

# depmod -a
  • ip addr で無線インターフェイスが表示されることを確認。
  • iwconfigip addr でデバイスが表示されるようにするにはマシンを再起動する必要があるかもしれません。
  • 最近カーネルをアップグレードしていた場合は、新しくインストールしたカーネルで broadcom-wl パッケージを再ビルドしてモジュールを更新する必要があります。

インターフェイスが取り替わる (broadcom-wl)

broadcom-wl ドライバーのユーザーは Ethernet と Wi-Fi のインターフェイスが変わってしまう問題が起こることがあります。解決方法は ネットワーク#デバイス名 を見て下さい。

b43 ドライバーと Linux 3.8+

b43 ドライバーは Linux 3.8 から重大な問題を抱えています、すなわちアクセスポイントを表示したり接続することができません。

解決方法: 上記を参照して、最新の broadcom-wl ドライバー (バージョン 6+) を試してみて下さい。

コンソールのメッセージを少なくする

起動中に、以下のような無駄に長くてうっとおしいメッセージが断続的に流れることがあります:

phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 0 (implement)
phy0: brcms_ops_bss_info_changed: qos enabled: false (implement)
phy0: brcms_ops_bss_info_changed: arp filtering: enabled true, count 1 (implement)
enabled, active

このメッセージは /etc/systemd/journald.confMaxLevelConsole を設定するなど、通常の方法で消すことはできません。メッセージを消すためには、dmesg がコンソールにメッセージを表示するレベルを低く設定する必要があります。シンプルな systemd サービスを作ることでこの設定を起動時に行うことが可能です。

/etc/systemd/system/brcms_suppression.service というような名前のファイルを作成してください:

brcms_suppression.service

[Unit]
Description=Broadcom console message suppression script

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c 'dmesg -n 3'

[Install]
WantedBy=multi-user.target

他の systemd サービスと同じように、次のコマンドで有効にします:

# systemctl enable brcms_suppression

インターフェイスは表示されるのに接続ができない

以下をカーネルコマンドラインに追加:

b43.allhwsupport=1

b43 が応答しない

b43 ドライバーの電源管理は BCM43228 チップ (やその他の Broadcom チップセット) で想定に少しだけ誤差があって、カーネルログに "(Reason: 3=DEAUTH_LEAVING)" を残して切断してしまうことがあります。電源管理を無効化することで解決します。一時的に修正するには、root で次を実行: iw <interface> set power_save off

このコマンドで解決した場合は、udev ルールを新しく追加することで修正を永続的にできます:

/etc/udev/rules.d/70-b43.rules
ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="your_mac_address", RUN+="/usr/bin/iw dev %k set power_save off"