Raspberry Pi(初代のType B)はUSB端子が2つ(Type Aは1つ)しかなく,Wi-FiとBluetoothでそれぞれ1台ずつUSBアダプターを用意するとしたら,USBハブがないとすべてのUSBポートが埋まってしまう.そこでAmazon.co.jpやAmazon.comで探し当てたのが以下のUSBドングルで,少し探した限りでは最安の1,199円!
ただこのアダプターはRaspberry Piに挿しただけでは無線LANは動かない*1シロモノで,ドライバー(ローダブルカーネルモジュール)ことkoファイルの作成が必要です.
やはり先人はいらっしゃるもので,既にGitHubに一式ありました.手順は以下のとおりです(不足している情報があればコメントいただければと思います).
※以下の手順を実施したバージョン等は以下のとおり:
pi@raspberrypi:~ $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 9.4 (stretch) Release: 9.4 Codename: stretch pi@raspberrypi:~ $ uname -a Linux raspberrypi 4.14.70+ #1144 Tue Sep 18 17:20:50 BST 2018 armv6l GNU/Linux
1. まず作業の前に更新
pi@raspberrypi:~ $ sudo apt update pi@raspberrypi:~ $ sudo apt upgrade pi@raspberrypi:~ $ sudo reboot
2. lwfinger氏の最新ドライバーの取得
cd ~/ git clone https://github.com/lwfinger/rtl8723bu.git
3. MakefileをRaspbian用に変更
pi@raspberrypi:~ $ cd rtl8723bu/ pi@raspberrypi:~ $ nano Makefile
Ctrl+Wをして(nanoエディターでの検索操作)CONFIG_PLATFORM_I386_PC =を検索して,
CONFIG_PLATFORM_I386_PC = y
と記載されているところを
CONFIG_PLATFORM_I386_PC = n CONFIG_RASPBIAN = y
にしてRaspbian用のビルドオプションとします.
次に再度Ctrl+Wをしてifeq ($(CONFIG_BT_COEXIST)を検索して,ヒットした行の上に
ifeq ($(CONFIG_RASPBIAN), y) EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 EXTRA_CFLAGS += -DRTW_USE_CFG80211_STA_EVENT # only enable when kernel >= 3.2 EXTRA_CFLAGS += -DCONFIG_P2P_IPS ARCH := arm CROSS_COMPILE := arm-linux-gnueabihf- KVER := $(shell uname -r) KSRC ?= /lib/modules/$(KVER)/build MODULE_NAME := 8723bu MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/ endif
を記載します.
ここまでの操作でビルド準備は整っていますが,このままビルドするとステーションモードおよびアクセスポイントモード両方で動くものができあがってしまう*2ので,Raspberry Piを無線LANルーターなどに接続するのであればステーションモードだけでよいので,Ctrl+WをしてCONFIG_CONCURRENT_MODEを検索して
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
と有効になっているオプションを
#EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
として無効にして,Ctrl+X(nanoエディターの終了操作)の後,Yを押して書き込んでnanoエディターを終了させます.
4. 管理者(管理者権限)でのビルド
pi@raspberrypi:~/rtl8723bu $ sudo -i root@raspberrypi:~# cd /home/pi/rtl8723bu/ root@raspberrypi:/home/pi/rtl8723bu# make && make install
とすることで,ビルドとインストールを実施します.どれくらい時間がかかるか不明ですが,寝る前に実行すると間違いないです.この後,再起動すると無事にwlan0として認識されて使用できます.
5. アクセスポイントの設定
pi@raspberrypi:~ $ wpa_passphrase "AP-NAME" "PASSPHRASE" | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf
として,パスフレーズPASSPHRASEを暗号化しつつ,アクセスポイントのSSIDとパスフレーズをwpa_supplicant.confに書き込みます.
pi@raspberrypi:~ $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
として,確認するとwpa_supplicant.confは
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=JP network={ ssid="AP-NAME" #psk="PASSPHRASE" psk=任意の文字列 }
というように記述が追記されていると思います.ここで,私の場合はSSIDをステルスで運用していますので,scan_ssid=1を追記するとともに,元々の暗号化前のパスフレーズは残しておく必要がないので以下のように記載して,再起動することで無事に無線LANルーターと接続できました.
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=JP network={ ssid="AP-NAME" scan_ssid=1 psk=任意の文字列 }
6. Bluetoothの構成とファームウェアのバイナリーのコピー(2018/10/11追記)
上記までの5つのステップで無線LANはwlan0として機能するが,Bluetoothデバイスを追加するとwlan0が正常に動かなくなる*3(2018/10/11確認).
したがって,Bluetoothのバイナリーファイル(configとfw)をコピーする必要があり,これもlwfinger氏のgithubから取得し,特定のディレクトリーにそれらをコピーして再起動する.
pi@raspberrypi:~ $ git clone https://github.com/lwfinger/rtl8723au_bt.git pi@raspberrypi:~ $ cd rtl8723au_bt/Linux_BT_USB_2.11.20140423_8723BE/8723B pi@raspberrypi:~ $ sudo cp rtl8723b_config /lib/firmware/rtl_bt/rtl8723b_config.bin pi@raspberrypi:~ $ sudo cp rtl8723b_fw /lib/firmware/rtl_bt/rtl8723b_fw.bin
参考Webページ(URLのみ):
- http://matthewdippel.blogspot.com/2016/02/howto-build-rtl8723bu-for-raspbian.html
- https://github.com/lwfinger/rtl8723bu/issues/41
- http://www.atmarkit.co.jp/ait/articles/1601/23/news008.html
- https://github.com/lwfinger/rtl8723bu/issues/20
- https://raspmer.blogspot.com/2018/07/mantistek-wa150-wifibluetooth-rtl8723bu.html