Broadcom wireless (日本語) - ArchWiki

# Broadcom wireless (日本語)

## イントロダクション

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 のリリース時に、これらのドライバーは `brcmsmac` と `brcmfmac` に名前が変更されています。

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

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

## どのドライバーが必要で使用可能なのか確かめる

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

    $ lspci -vnn | grep 14e4:

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

## ドライバーの取得

### brcmsmac/brcmfmac

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

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

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

### b43/b43legacy

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

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

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

AUR から b43-firmware か b43-firmware-legacy のどちらか適切な方をインストールしてください。

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

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

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

### broadcom-wl

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

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

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

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

    # rmmod b43

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

    # rmmod ssb

Note: `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` で使わないモジュールを (干渉しないように) ブラックリストに入れることができます。モジュールをブラックリスト化する方法は、カーネルモジュール#ブラックリスト を見て下さい。

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

## トラブルシューティング

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

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

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

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

Note: This affects only Linux kernels 3.0, 3.1, and 3.2. Since kernel 3.3, the `brcmsmac` module actually uses `bcma`, so `bcma` needs to be unblacklisted or the Wi-Fi interface will not appear.

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

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

Note: You may not have to blacklist the `brcm80211` driver; although as of 2011-06-20, it will still default to loading the `brcm80211` module before the `wl` driver, which prevents `wl` from being used.

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

    # depmod -a

- `ip addr` で無線インターフェイスが表示されることを確認。
- `iwconfig` や `ip 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.conf` の `MaxLevelConsole` を設定するなど、通常の方法で消すことはできません。メッセージを消すためには、`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"

### 雑多なノート

Talk:Broadcom wireless を見て下さい。

Category:

- Wireless Networking (日本語)