Qbilinux 日記

Linux に関係することだけではなく,最近は一般的なコンピュータやガジェット関係についても記載してます.

Broadcom BCM943228HMB on Dynabook SS RX2

チチブデンキDynabook SS RX2 の部品を購入しにいこうかといろいろと調べていたら,RX2 に Broadcom BCM943228HMB を載せることができるとの記事が.

これによって RX2 が 802.11n 対応と Bluetooth 対応になるみたい.ということで部品代を調べると 2000円ちょっとだったので購入して載せ変えてみました.

元々のカードから入れ替えて,アンテナ先をつなぎ変えるだけなので作業自体は簡単.

OS での対応は下記のような感じでした.

Windows7 64bit は Windows 用ドライバをインストールすれば使えるようになりました.ただし,TOSHIBA PC Health Monitor がインストールされていると,CPU 負荷が 100% に張付いてしまいました.ハードウエアのチェックを行おうとしてるけど,対応ハードがない状態になるからかな?TOSHIBA PC Health Monitor をアンインストールすると CPU 負荷は収まりましたが,ハードウエア状態をみることができなくなってしまいます.使ったドライバは Wireless LAN_Broadcom_5.100.196.18_W7x64W7x86_A.zip と Bluetooth_Broadcom_6.5.1.2602_W7x64W7x86_A.zip です.bt mouse も OK でした.

Debian GNU/Linux 64bit は apt-get install broadcom-sta-common broadcom-sta-source した後,/usr/share/doc/broadcom-sta-source/README.Debian に記載されている通り

# module-assistant prepare broadcom-sta
# module-assistant auto-install broadcom-sta

で使えるようになりました.bt は動作未チェックです.

Plamo Linux 32bit は broadcom のホームページから hybrid-v35-nodebug-pcoem-6_30_223_248.tar.gz をダウンロード.そのままでは make に失敗するので,いろんなところに転がっている下記のパッチを当てます.

diff -Nrc broadcom-sta.orig/src/wl/sys/wl_cfg80211_hybrid.c broadcom-sta/src/wl/sys/wl_cfg80211_hybrid.c
*** broadcom-sta.orig/src/wl/sys/wl_cfg80211_hybrid.c    2014-06-26 19:41:38.000000000 +0900
--- broadcom-sta/src/wl/sys/wl_cfg80211_hybrid.c    2015-05-17 12:55:21.813976786 +0900
***************
*** 2071,2077 ****
--- 2071,2096 ----
              wl_get_assoc_ies(wl);
              memcpy(&wl->bssid, &e->addr, ETHER_ADDR_LEN);
              wl_update_bss_info(wl);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)
+             {
+                 struct wl_bss_info *bi;
+                 u16 bss_info_channel;
+                 struct ieee80211_channel *channel;
+                 u32 freq;
+
+                 bi = (struct wl_bss_info *)(wl->extra_buf + 4);
+                 bss_info_channel = bi->ctl_ch ? bi->ctl_ch : CHSPEC_CHANNEL(bi->chanspec);
+
+                 freq = ieee80211_channel_to_frequency(bss_info_channel,
+                     (bss_info_channel <= CH_MAX_2G_CHANNEL) ?
+                     IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ);
+
+                 channel = ieee80211_get_channel(wl_to_wiphy(wl), freq);
+                 cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, channel, GFP_KERNEL);
+             }
+ #else
              cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, GFP_KERNEL);
+ #endif
              set_bit(WL_STATUS_CONNECTED, &wl->status);
              wl->profile->active = true;
          }
diff -Nrc broadcom-sta.orig/src/wl/sys/wl_linux.c broadcom-sta/src/wl/sys/wl_linux.c
*** broadcom-sta.orig/src/wl/sys/wl_linux.c    2014-06-26 19:41:38.000000000 +0900
--- broadcom-sta/src/wl/sys/wl_linux.c    2015-05-17 12:53:31.137909703 +0900
***************
*** 1307,1313 ****
--- 1307,1317 ----
      dev->priv = priv_link;
  #else
 
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0))
      dev = alloc_netdev(sizeof(priv_link_t), intf_name, ether_setup);
+ #else
+     dev = alloc_netdev(sizeof(priv_link_t), intf_name, NET_NAME_UNKNOWN, ether_setup);
+ #endif
      if (!dev) {
          WL_ERROR*1;

そのあと make & make install.

余分なモジュールを読み込んでしまうので下記を設定して再起動.

# echo "blacklist ssb" >> /etc/modprobe.d/balacklist.conf# echo "blacklist bcma" >> /etc/modprobe.d/blacklist.conf
# echo "blacklist b43" >> /etc/modprobe.d/blacklist.conf
# echo "blacklist brcmsmac" >> /etc/modprobe.d/blacklist.conf

ネットワークは eth1 で認識するようになり,通信できることは確認しました.こちらも bt は未チェック.

Plamo は気が向いたらパッケージングしようかなとは思っています.

*1:"wl%d: %s: alloc_netdev failed\n",
              (wl->pub)?wl->pub->unit:wlif->subunit, __FUNCTION__