前回の主な宿題
- 5GHzの動作
- APモードの動作
ところが、MT7610Uドライバのソースを見ると、NL80211_IFTYPE_AP
が出てこないので、APにならない気がする…。
そこで、別チップを使っているGW-900D-BKを試す。
環境
前回とほとんど同じだが、apt-get dist-upgrade
でカーネルバージョンが上がった。
- ターゲット
- Raspberry Pi 1 Model A+
- 2017-11-29-raspbian-stretch-lite
- Linux raspberrypi 4.9.80+ #1098 Fri Mar 9 18:51:28 GMT 2018 armv6l GNU/Linux
- PLANEX GW-900D-BK
- USB3.0
- ホスト
- Ubuntu 16.04 amd64
ドライバ
rtl2xxxuの利用
こちらによると、upstreamでは現状非対応とのこと->没。
ドライバの取得
github上に色々あるが、ドライババージョンに4.xと5.xがあるようだ。
5.xで情報量も多いこちらを選んでみる。
toolchainの準備
本家を参照。
git clone https://github.com/raspberrypi/tools ~/tools
カーネルソースの取得
dkmsなどもあるので、ターゲット上のビルドのほうが便利な気がしてきたが、
前回クロスコンパイル環境を作ってしまったので、そのまま使ってみる
rpi-4.9.yは今は4.9.80のようだ。
git clone --depth=1 -b rpi-4.9.y git://github.com/raspberrypi/linux.git
カーネルソースの準備
前回同様、本家を見ながら、bcmrpi_defconfig
とmodules_prepare
を実施。
ドライバソースへのパッチ
2点、Makefileにパッチを当てた。
- ターゲット情報の設定
- デバッグモードの設定
1.は、こちらのCONFIG_PLATFORM_ARM_RPI
を真似する感じで設定。
2.は、そのままではビルドが通らなかったので、ソースをいじらずコンパイルが通る最低限の(?)デバッグオプションを設定。
コンカレントが動くかも試すために、CONFIG_CONCURRENT_MODE
も設定。
diff --git a/Makefile b/Makefile
index a14133f..6a9e9d6 100755
--- a/Makefile
+++ b/Makefile
@@ -94,7 +94,8 @@ CONFIG_RTW_SDIO_PM_KEEP_POWER = y
###################### MP HW TX MODE FOR VHT #######################
CONFIG_MP_VHT_HW_TX_MODE = n
###################### Platform Related #######################
-CONFIG_PLATFORM_I386_PC = y
+CONFIG_PLATFORM_I386_PC = n
+CONFIG_PLATFORM_ARM_RPI = y
CONFIG_PLATFORM_ANDROID_X86 = n
CONFIG_PLATFORM_ANDROID_INTEL_X86 = n
CONFIG_PLATFORM_JB_X86 = n
@@ -1015,6 +1016,19 @@ INSTALL_PREFIX :=
STAGINGMODDIR := /lib/modules/$(KVER)/kernel/drivers/staging
endif
+ifeq ($(CONFIG_PLATFORM_ARM_RPI), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_DBG -DCONFIG_PROC_DEBUG
+ARCH ?= arm
+CROSS_COMPILE ?= ~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-
+KVER ?= 4.9.80+
+KSRC := ~/linux
+MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
+INSTALL_PREFIX :=
+endif
+
ifeq ($(CONFIG_PLATFORM_NV_TK1), y)
EXTRA_CFLAGS += -DCONFIG_PLATFORM_NV_TK1
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ビルド
DEBUG=0 make
インストール
8812au.ko
ができるので、前回同様、Raspberry Piにコピーしてsudo depmod -a 4.9.80+
。
modprobe 8812au
すると、コンカレントのおかげで、wlan0
とwlan1
ができる。
hostapd
Raspbianのhostapd
apt-get install hostapd
で入れてみたものの、/etc/hostapd/hostapd.conf
がないと、起動しない。
適当なhostapd.conf
を用意しても、journalctl
で見ると、Starting advanced IEEE 802.11 management: hostapd failed!
とのこと。
手動でhostapd -dd /etc/hostapd/hostapd.conf
すると、
nl80211: Register frame command failed (type=208): ret=-114 (Operation already in progress)
が原因で、最終的にAP-DISABLED
となり、動かない模様。
ググりつつ、ドライバとRaspbianのhostapd 2.4が合わない、という雑な仮説のもと、最新のhostapd 2.6をビルドしてみる。
カーネルと違って依存ライブラリなどもあり、ターゲット上でビルドしてみる。
依存ライブラリのインストール
元々入っているのがlibnl-3
なので、dev
も合わせる。
sudo apt-get install libssl-dev libnl-genl-3-dev
ソースの取得
本家から、hostapd-2.6.tar.gzを取得。
ビルドの設定
cp hostapd/defconfig hostapd/.config
--- hostapd/defconfig 2016-10-03 03:51:11.000000000 +0900
+++ hostapd/.config 2018-03-19 20:18:48.001721411 +0900
@@ -31,7 +31,7 @@
#CONFIG_LIBNL20=y
# Use libnl 3.2 libraries (if this is selected, CONFIG_LIBNL20 is ignored)
-#CONFIG_LIBNL32=y
+CONFIG_LIBNL32=y
# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
@@ -148,14 +148,14 @@
#CONFIG_DRIVER_RADIUS_ACL=y
# IEEE 802.11n (High Throughput) support
-#CONFIG_IEEE80211N=y
+CONFIG_IEEE80211N=y
# Wireless Network Management (IEEE Std 802.11v-2011)
# Note: This is experimental and not complete implementation.
#CONFIG_WNM=y
# IEEE 802.11ac (Very High Throughput) support
-#CONFIG_IEEE80211AC=y
+CONFIG_IEEE80211AC=y
# Remove debugging code that is printing out debug messages to stdout.
# This can be used to reduce the size of the hostapd considerably if debugging
ビルド
cd hostapd
make
しばし待つと、hostapd
とhostapd_cli
ができる。
実行
sudo ./hostapd -dd /etc/hostapd/hostapd.conf
すると、AP-ENABLED
になった! (hostapd.confの内容は後ほど)
インストール
sudo BINDIR=/usr/bin make install
これだとapt-get
で入れたものに上書きとなるので注意。
Raspberry Piの設定
interfaceの設定
コンカレントを試すために、wlan0
をSTAに、wlan1
をAPに設定。
APのDHCPサーバなどは一旦省略。
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "SSID"
wpa-psk "hogehoge"
allow-hotplug wlan1
auto wlan1
iface wlan1 inet auto
wireless-mode master
hostapdの設定
/usr/share/doc/hostapd/examples/hostapd.conf.gz
を元に、適当にアレンジ。
6c6
< interface=wlan0
---
> interface=wlan1
25c25
< # driver=hostap
---
> driver=nl80211
99c99
< #country_code=US
---
> country_code=JP
466c466
< #ieee80211n=1
---
> ieee80211n=1
1064c1064
< #wpa=1
---
> wpa=2
1073a1074
> wpa_passphrase=hogehoge
1094a1096
> wpa_key_mgmt=WPA-PSK
1106c1108
< #wpa_pairwise=TKIP CCMP
---
> wpa_pairwise=TKIP CCMP
1108c1110
< #rsn_pairwise=CCMP
---
> rsn_pairwise=CCMP
動作確認
色々変えて面倒なので、sudo reboot
する。
wlan0
は既存のAPにぶら下がり、wlan1
に何か別のSTAをぶら下げる。
ping6 ff02::1%wlan0
ping6 ff02::1%wlan1
自分以外のホストから反応がある。ありがとうリンクローカル。
感想
同じRTWでも、RTL8192CUと違って、nl80211でhostapdが動くものもあるんだ。
調べてみようかな
- LED
- 何もしなくても動いている?
- WPSボタン
- 40MHz, 80MHz
オチ
USB無線LANドングル買った後に、5GHzに対応したPi 3 Model B+の発表が…
おまけ
APを5GHzに設定してみるが、STAが2.4GHzでつながっていると、5GHzにならない模様。
STAを5GHzのAPにぶら下げた状態だと、APも5GHzになった。
製品情報に書いてありました。
2.4GHzと5GHzの同時利用はできません。