5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry Piを5GHz対応の無線LAN APにする

Last updated at Posted at 2018-03-19

前回の主な宿題

  • 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_defconfigmodules_prepareを実施。

ドライバソースへのパッチ

2点、Makefileにパッチを当てた。

  1. ターゲット情報の設定
  2. デバッグモードの設定

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すると、コンカレントのおかげで、wlan0wlan1ができる。

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

しばし待つと、hostapdhostapd_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サーバなどは一旦省略。

/etc/network/interfaces.d/sta
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "SSID"
wpa-psk "hogehoge"
/etc/network/interfaces.d/ap
allow-hotplug wlan1
auto wlan1
iface wlan1 inet auto
  wireless-mode master

hostapdの設定

/usr/share/doc/hostapd/examples/hostapd.conf.gzを元に、適当にアレンジ。

/etc/hostapd/hostapd.conf
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の同時利用はできません。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?