• 关于 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
    

    申明:原创文章,转载请注明出处。

  • 相关阅读:
    渲染管线
    C++windows内核编程笔记day13 进程、线程与信号量
    稻盛和夫:真正的聪明人,善于把事物简单化
    学会把复杂问题简单化
    任何事物,只要抓住了规律,就等于牵住了牛鼻子
    菩萨奶奶引领我学佛
    数据库每分钟运行监控SQL
    MySQL 从库down机
    sql server 跟踪日志
    胡小林:把日常生活中碰到的事变成我们发露忏悔的机会
  • 原文地址:https://www.cnblogs.com/rain-blog/p/rtl8723bs-driver-test.html
Copyright © 2020-2023  润新知