Gentooでの無線LAN設定

Posted by @kachina_t on Sat, May 18, 2013
In OS
Tags os

前回の GentooでDvorak配列を設定して”control”と”caps Lock”キーを入れ替える に続き
今回は無線LANの設定をしたいとおもいます。

使っているMacBookのバージョンは4,1(13-inch, Early 2008)です。

1. 接続されているデバイスを確認

$ lspci | less
02:00.0 Ntework controller [0280]: Broadcom Corporation BCM4321 802.11a/b/g/n [14e4:4328] (rev 03)

『Broadcom Corporation BCM4321』を利用していることが解りました。
(lspci コマンドは emerge sys-apps/pciutils で使えます)

2. デバイスの状態を確認

$ dmesg
...
b43-phy0: Broadcom 4321 WLAN found (core revision 11)
b43-phy0 ERROR: FOUND UNSUPPORTED PHY (Analog 5, Type 4, Revision 1)
b43: probe of ssb0:0 failed with error -95
Broadcom 43xx driver loaded [ Features: PML ]
...

正しく認識されていないことが解りました。
それでは、カーネルの設定〜アクセスポイントの設定までの
作業履歴を残していきたいと思います。

3. カーネルの設定

$ cd /usr/src/linux
$ make menuconfig

Device Drivers --->
  Broadcom specific AMBA
    <M> BCMA support
    [x] Support for BCMA on PCI-host bus
    [x] BCMA Broadcom GBIT MAC COMMON core driver
    [ ] BCMA debugging (NEW)
[*] Network device support
  [*] Wireless LAN
    [ ] Broadcom 43xx debugging
    < > Broadcom 43xx-legacy wireless support (mac80211 stack)
    <M> Broadcom IEEE802.11n PCIe SoftMAC WLAN driver
    <M> Broadcom IEEE802.11n embedded FullMAC WLAN driver
    [*] USB bus interface support for FullMAC driver (NEW)
-*- Networking support
  -*- Wireless
    <M> cfg80211 - wireless configuration API
    [*] cfg80211 wireless extensions compatibility

4. ドライバの変更

こちら のREADME.txtに従って”wl.ko”ファイルを作成します。

$ mkdir /tmp/hybrid_wl
$ cd /tmp/hybrid_wl
$ wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc_x86_32-v5_100_82_112.tar.gz
$ tar xzf hybrid-portsrc_x86_32-v5_100_82_112.tar.gz

手順書に従ってmake を実行すると、以下のメッセージが出て失敗します。

KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]: Entering directory `/usr/src/linux-3.8.13-gentoo'
Wireless Extension is the only possible API for this kernel version
Using Wireless Extension API
LD /tmp/hybrid_wl/lbuilt-in.o
CC [M] /tmp/hybrid_wl/src/shared/linux_osl.o
CC [M] /tmp/hybrid_wl/src/wl/sys/wl_linux.o
/tmp/hybrid_wl/src/wl/sys/wl_linux.c:43:24: fatal error: asm/system.h: No such file or directory
compilation terminated.
make[2]: *** [/tmp/hybrid_wl/src/wl/sys/wl_linux.o] Error 1
make[1]: *** [_module_/tmp/hybrid_wl] Error 2
make[1]: Leaving directory `/usr/src/linux-3.8.13-gentoo'
make: *** [all] Error 2

“src/wl/sys/wl_linux.c”ファイルを編集します。

-- 43行目

#include <asm/system.h>
↓
#include <asm/switch_to.h>

-- 388行目
.ndo_set_multicast_list = wl_set_multicast_list,
↓
.ndo_set_rx_mode = wl_set_multicast_list,

ファイルを編集したらmakeから手順書の作業を再開します

$ make
$ make install
$ depmod
$ modprobe wl

生成された”wl.ko”ファイルを、既存のものと置き換えます。

$ rmmod wl
$ mv /lib/modules/3.8.13-gentoo/kernel/net/wireless/wl.ko /lib/modules/3.8.13-gentoo/kernel/net/wireless/wl.ko.org
$ cp ./wl.ko /lib/modules/3.8.13-gentoo/kernel/net/wireless/
$ depmod
$ modprobe wl

不要なモジュールを読まない様に、ブラックリストに追記し
“wl”モジュールをリロードします

$ echo "blacklist ssb" >> /etc/modprobe.d/blacklist.conf
$ echo "blacklist bcma" >> /etc/modprobe.d/blacklist.conf
$ echo "blacklist b43" >> /etc/modprobe.d/blacklist.conf
$ rmmod ssb
$ rmmod bcma
$ rmmod b43
$ rmmod wl
$ modprobe wl

これで『Broadcom BCM4321』が認識されました。

$ iwconfig

enp2s0    IEEE 802.11abgn  ESSID:""
          Mode:Managed  Frequency:2.447 GHz  Access Point: Not-Associated
          Bit Rate:130 Mb/s  Tx-Power:24 dBm
          Retry min limit:7  RTS thr:off  Fragment thr:off
          Power Managementmode:All packets received
          Link Quality=5/5 Signal level=0 dBm Noise level=-57 dBm
          Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
          Tx excessive retries:0 Invalid misc:0 Missed beacon:0

5. ドライバの設定

”/etc/conf.d/net”ファイルに以下を追記

module_enp2s0="wpa_supplicant dhcpcd"
config_enp2s0="dhcp"

dhcpcdデーモンの自動起動が設定されている場合は削除します。

$ rc-update del dhcpcd

それでは、アクセスポイントの設定に進みます。

6. アクセスポイントの設定

サンプルの設定ファイルを流用します。

まずは、”/usr/share/doc/wpa_supplicant-/wpa_supplicant.conf.gz”ファイルを
”/etc/wpa_supplicant/wpa_supplicant.conf”に展開し
557行目の『Example blocks:』以下の行を消しちゃいます。

そこにアクセスポイントの情報を追記していきます。
wpa_passshpaseコマンドで、アクセスポイント名、暗号化したパスフレーズを追記します。

$ wpa_passphrase {アクセスポイント名} {パスフレーズ} >> /etc/wpa_supplicant/wpa_supplicant.conf

“wpa_supplicant.conf”ファイルを開き、その他の情報を追記します。

network={
  scan_ssid=1
  ssid="{アクセスポイント名}"
  psk={暗号化されたパスフレーズ}
  priority=1
}

7. 自動起動の設定

$ cd /etc/init.d
$ ln -s net.lo net.enp2s0
$ rc-update add net.enp2s0 default

8. 起動

$ /etc/init.d/net.enp2s0 start

これで設定は完了です。
iwconfigでアクセスポイントに接続されていることを確認します。

$ iwconfig enp2s0

enp2s0    IEEE 802.11abgn  ESSID:"{アクセスポイント名}"
          Mode:Managed  Frequency:2.447 GHz  Access Point: xx:xx:xx:xx:xx:xx
          Bit Rate:130 Mb/s  Tx-Power:24 dBm
          Retry min limit:7  RTS thr:off  Fragment thr:off
          Power Managementmode:All packets received
          Link Quality=5/5 Signal level=0 dBm Noise level=-57 dBm
          Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
          Tx excessive retries:0 Invalid misc:0 Missed beacon:0

9. 有線LANの自動起動設定を削除

有線LANは利用は限定的になるので、自動起動の設定を削除します。

$ rc-update del net.eth0

苦節1週間、寝落ち3回、何度も外付けのUSB無線LANアダプタに逃げたくなりましたが
なんとか内蔵の無線LANが使える様になりました。

これでやっと、スタバでドヤ顔できます。

あとは、enp2s0って名前をwlan0とかに変更したいな。。。