關於 RTL8723BS 同時開啟 STA/AP 模式


最近接到一個調試 wifi 驅動的任務,使用的是 rtl8723bs 芯片組。要求是讓無線設備工作在 station 模式的時候同時開啟一個 ap 熱點。簡單來講就是連接其他 wifi 的同時發出一個 wifi 供其他設備使用。保證都能上網。

拿到這個項目,我首先就想到了 github 上的一個開源項目 create_ap 。這是一個1000多行的 bash 腳本。它能夠在無線網卡支持的時候實現上述的要求。當時,我想能不能直接那 create_ap 過來使用,如果可以,那么就太方便了。

然而測試了一下,果然不行。。。

折騰了一段時間后找到了一條簡單的出路。如下:

獲取到一份完整的 RTL8723BS 驅動代碼

RTL8723BS_driver_and_documents

閱讀了官方文檔(Realtek_WiFi_concurrent_mode_Introduction.pdf) 才發現廠商已經編寫了支持 sta/ap 模式的驅動代碼,只是默認沒有使用。按照文檔說明,我已修改了代碼。

編譯驅動模塊 ( 以 x86_64 為例 )

修改 Makefile 如下部分

ifeq ($(CONFIG_PLATFORM_ANDROID_X86), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
SUBARCH := $(shell uname -m )
ARCH := $(SUBARCH)
CROSS_COMPILE := /bin/gnu-unknow-
KSRC := /lib/modules/4.1.8-yocto-standard/build/
MODULE_NAME :=wlan

找到這幾行,相應修改 ARCH (平台架構) , CROSS_COMPILE (編譯器位置) , KSRC (內核模塊位置) 。

然后直接

$ make

編譯將得到 wlan.ko

加載驅動模塊

如果已經加載了 RTL8723BS 的驅動模塊,請先 # rmmod rtl8723bs
# insmod wlan.ko

成功加載模塊后,執行 $ ip link

即可看到兩個網口: wlan0 , wlan1

其中任意一個網口都可以做 station 模式,或 ap 模式

使用 wpa_supplicant + hostapd 測試模塊是否工作正常

開啟 STATION 模式 ( wlan0 )


# ip link set wlan0 up                                            // 啟用網口
# wpa_passphrase ssid_name wifi_passwd > wifi.conf                // 生成 wpa_supplicant 配置文件
# wpa_supplicant -D wext -i wlan0 -c wifi.conf -B                // 連接設定的 wifi 並運行在后台
# dhclient wlan0                                                  // 獲取ip (will take a while)
# ip addr                                                         // wlan0 已經獲取到 ip

同時開啟 AP 模式 ( wlan1 )


# ip link set wlan1 up
# ip a add 10.0.0.1/24 dev wlan1                                 //配置 wlan1 的ip
# killall dnsmasq && cp egg_wifi/dnsmasq.conf /etc && dnsmasq  //使用 dnsmasq 服務
# ./hostapd egg_wifi/hostapd.conf &                             //使用源碼中的 hostapd (需要自行編譯) 開啟一個熱點

需要使用給出的 hostapd ,配置文件可自行修改

不出意外將會放出 SSID 為 mark 的 wifi 熱點。

兩個配置文件

dnsmasq.conf

interface=wlan1
dhcp-range=wlan1,10.0.0.2,10.0.0.9,255.255.255.240,12h
dhcp-authoritative
address=/#/10.0.0.1
server=/google/8.8.8.8
hostapd.conf

interface=wlan1
ieee80211n=1
ssid=mark                                                        // wifi 熱點名稱
hw_mode=g
channel=7
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=12345678                                          // wifi 密碼
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
ctrl_interface=/var/run/hostapd

申明:原創文章,轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM