2011-08-21

BCM4312 802.11b/g on debian on linux-3.0.0

BMC4312 802.11b/g を再度使えるようにしたのでメモ

結果的には
http://www.broadcom.com/support/802.11/linux_sta.php
の wl ドライバをつかう。
Broadcom がドライバをオープンソースにするとかというニュースに惑わされちゃいかんとです。
あれは限定されたチップしかサポートしていないです。(2011-08-21現在)
どのチップでどのドライバを使えばいいのかは
https://wiki.archlinux.org/index.php/Broadcom_wireless
に書いてます。またドライバの使用方法やFAQも書いてるので
英語がわかる人はここを見たほうがいいです。

環境
機種:lenovo ideapad S10e
OS:Debian GNU/Linux squeeze
カーネル:linux-3.0.0 をコンパイルしてインストールしてる
無線チップ:05:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g LP-PHY (rev 01)
AP:corega CG-WLRGNX
↓これさらすとセキュリティうんちゃらうるさいけどまぁいいや
認証方式:WPA/WPA2 - PSK
暗号方式:自動(AES/TKIP) たぶんTKIPだと思われ
WPA共有キー:<これは秘密>仮に kumakuma とする

無線チップの詳細は下記

05:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g LP-PHY (rev 01)

05:00.0 0280: 14e4:4315 (rev 01)
Subsystem: 14e4:04b5
Flags: bus master, fast devsel, latency 0, IRQ 18
Memory at f0400000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [40] Power Management version 3
Capabilities: [58] Vendor Specific Information: Len=78
Capabilities: [e8] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [d0] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [13c] Virtual Channel
Capabilities: [160] Device Serial Number 3d-99-4e-ff-ff-c9-00-23
Capabilities: [16c] Power Budgeting
Kernel driver in use: wl


まずはカーネルのコンフィグでハマリそうなところ(コンパイルしない人は飛ばしてね)

いろいろ試行錯誤しているうちにいつの間にか Sonics Silicon Backplane(ssb) が
組み込まれてしまっているのでそれをカーネルに組み込まれない or モジュールにする
で、下記あたりを外しておけばいいんじゃないかと (make menuconfig したときの例)
ドライバは有効にするんじゃないよ:-P

Device Drivers -> Network device support -> Ethernet (10 or 100Mbit) -> Broadcom 440x/47xx ethernet support
Device Drivers -> Network device support -> Wireless LAN -> Broadcom 43xx wireless support
Device Drivers -> Network device support -> Wireless LAN -> Broadcom 43xx-legacy wireless support
Device Drivers -> Sonics Silicon Backplane -> Sonics Silicon Backplane support
Device Drivers -> Broadcom specific AMBA -> BCMA support

Sonics Silicon Backplane support に * がつかないようにゴニョゴニョしてください。

次に wl なドライバのダウンロード
http://www.broadcom.com/support/802.11/linux_sta.php
からダウンロードして linux-2.6.37以上用のパッチを当ててコンパイルしてインストール

$ wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc_x86_32-v5_100_82_38.tar.gz
$ wget http://www.broadcom.com/docs/linux_sta/5_100_82_38.patch
$ tar xvzf hybrid-portsrc_x86_32-v5_100_82_38.tar.gz
$ patch -p0 < 5_100_82_38.patch
$ make
$ sudo make install
$ sudo depmod


いらないモジュールを unload して wl を有効にする

$ sudo rmmod ssb b44 b43 b43legacy bmca
$ sudo modprobe wl

ちゃんと有効になれば dmesg に下記のように出力されるはず

[ 282.575888] wl: module license 'unspecified' taints kernel.
[ 282.575897] Disabling lock debugging due to kernel taint
[ 282.615287] wl 0000:05:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[ 282.615312] wl 0000:05:00.0: setting latency timer to 64
[ 282.639317] eth1: Broadcom BCM4315 802.11 Hybrid Wireless Controller 5.100.82.38

いらないモジュールは /etc/modprobe.d/blacklist.conf にでも書いておけば良い

つぎに WPAの設定

$ sudo apt-get install wpasupplicant
$ cat /etc/wpa_supplicant/wpa_supplicant.conf
network={
proto=WPA WPA2
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
ssid="your ssid"
psk="kuma"
}

$ cat /etc/network/interfaces
auto eth1
iface eth1 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
$ sudo ifup eth1

interfaces とか wpa_supplicant.conf の書き方は端折りました。
man みるなりしてください。