Wi-Fi Direct (P2P)
支持的芯片[ RTL8730E ][ RTL8721Dx ][ RTL8721F ]
备注
Realtek Wi-Fi P2P 功能只支持带有 wpa_supplicant 的 Linux Host, 包括 Wi-Fi 网卡模式中的 Fat Host (WHC Wi-Fi 配置选项及典型模式) 和 RTL8730E Linux 架构。
Wi-Fi P2P 概述
Wi-Fi Direct,也被称为 Wi-Fi P2P (Wi-Fi Peer-to-Peer),是 Wi-Fi 联盟发布的一种无线通信技术,旨在简化设备间的连接过程,实现快速、方便的无线通信。它允许设备直接相互连接,无需通过传统的 Wi-Fi 接入点(AP),就可以进行点对点通信。这意味着移动中的用户可以从笔记本电脑、智能手机和平板电脑等设备无线打印文档、共享屏幕、共享数据、同步文件和显示信息。
P2P 架构
P2P 架构中定义了三个组件,分别是:
P2P Device:
支持 Wi-Fi P2P 协议的设备,如智能手机、平板、笔记本等。
具备发现其他设备、协商连接、加入或创建 P2P Group 的能力。
P2P Group Owner(GO):
P2P 网络中的“主控”角色,类似于传统 Wi-Fi 网络中的接入点(AP)。
GO 负责管理组内设备连接、资源分配和数据转发。
一个 P2P Group 中只能有一个 GO。
P2P Group Client(GC):
连接到 GO 的设备,类似于传统 Wi-Fi 网络中的终端设备(STA)。
可以与 GO 进行数据交换,也能与其他 Client 通信(通过 GO 转发)。
一个 P2P Group 可以有多个 Client,形成 1:n 的拓扑结构。
P2P 拓扑
在组建 P2P Group(即 P2P Network)之前,终端都是一个一个的 P2P Device。
当这些 P2P Device 设备之间完成 P2P 协商后,其中将有一个 Device 来扮演 GO 的角色,而其他 Device 扮演 GC 的角色。
由于 GO 的功能类似于 AP,所以周围那些不支持 P2P 功能的 STA 也能发现并关联到 GO。这些 STA 被称之为 Legacy Clients。
最终构成的 P2P Group 拓扑图如下:
P2P Group 拓扑结构
P2P 并发操作
一个 P2P 设备可以与 WLAN 同时运行。这样的设备被称为 P2P 并发设备。下图展示了一个 P2P 并发设备,其中一个 MAC 实体作为 WLAN-STA 运行,另一个 MAC 实体作为 P2P 设备运行。
P2P Concurrent Device
P2P 实现过程
P2P 的实现过程主要包括设备发现、服务发现、组网协商、安全配置、建立连接与数据传输等:
设备发现(Device Discovery):
设备通过发送和监听 Probe Request/Response 帧,在社交信道(如 1、6、11)上发现彼此。
服务发现(Service Discovery):
可选阶段,用于查询对方是否支持特定服务。
组建群组(Group Formation):
GO Negotiation:通过 GO Negotiation 协议,两个设备协商决定谁成为 Group Owner。
Provisioning:协商连接方式并完成安全认证,确保通信加密。
连接建立与数据传输:
一旦连接成功,GO 分配 IP 地址,Client 加入网络。设备之间可通过 TCP/IP 协议进行数据交换。
Wi-Fi P2P 特性支持
Realtek 设备对 Wi-Fi P2P 协议提供了如下支持:
核心功能支持
支持 GO。
支持 GC。
支持 GO + STA。
P2P 安全性支持
连接建立前,通过 WPS (PIN 或 Push Button)协议进行认证。
连接建立前后,使用 WPA2 加密通信数据。
Wi-Fi P2P 移植指南
Realtek Wi-Fi P2P 功能支持 Linux Host, Wi-Fi 网卡模式 S2H (WHC Wi-Fi 配置选项及典型模式), 或 RTL8730E Linux。
在目录
{SDK}
中执行source envsetup.sh
设置编译环境。选择编译的目标 machine 和目标 distro,比如 rtl8730elh-va7-full。
You're building on Linux Lunch menu... pick a combo: 1. rtl8730elh-va7-full 2. rtl8730elh-va7-generic 3. rtl8730elh-va8-full 4. rtl8730elh-va8-generic Which would you like?
进入到 build 目录后执行
mfw menuconfig
。找到
,选择 。(Top) -> CONFIG WIFI ----Configuration---- (X)ENABLE WIFI ---> CONFIG WIFI MODE ---> ( ) ENABLE NAN (X) ENABLE P2P
打开
{SDK}/sources/firmware/component/wifi/whc/whc_host_linux/Makefile
,打开 P2P 的编译选项。export CONFIG_NAN = n export CONFIG_P2P = y export CONFIG_MCC = n export CONFIG_BT_INIC = n export CONFIG_FULLMAC_HCI_IPC = y
打开
{SDK}/sources/yocto/meta-realtek/meta-realtek-bsp/recipes-connectivity/wpa-supplicant/wpa-supplicant/defconfig
,启用 wpa supplcant P2P 相关的功能。# P2P (Wi-Fi Direct) # This can be used to enable P2P support in wpa_supplicant. See README-P2P for # more information on P2P operations. CONFIG_P2P=y # AP mode operations with wpa_supplicant # This can be used for controlling AP mode operations with wpa_supplicant. It # should be noted that this is mainly aimed at simple cases like # WPA2-Personal while more complex configurations like WPA2-Enterprise with an # external RADIUS server can be supported with hostapd. CONFIG_AP=y # Wi-Fi Protected Setup (WPS) CONFIG_WPS=y
执行
m
和mfw
生成固件,生成位置:{SDK}/images
。使用 image tool 下载固件到开发板。
Wi-Fi P2P 使用指南
P2P 测试使用标准的 wpa_supplicant 和 wpa_cli 命令
下面是一个基本的组网协商建立 p2p 连接的例子(测试用到两块 RTL8730E):
DUT |
SUT |
NOTE |
---|---|---|
wpa_supplicant -i wlan0 -c {path}/wpa_supplicant.conf -B |
path可以是任意目录,wpa_supplicant.conf 编辑的内容如下所示: ctrl_interface=/var/run/wap_supplicant update_config=1 device_name=P2P_Device_1 manufacturer=Realtek model_name=RTW_STA model_number=WLAN_CU serial_number=12345 device_type=1-0050F204-1 os_version=01020300 config_methods=virtual_display virtual_push_button keypad display push_button |
|
wpa_supplicant -i wlan0 -c {path}/wpa_supplicant.conf -B |
wpa_supplicant.conf 除 device_name 以外,其他均与上面保持一致: device_name=P2P_Device_2 |
|
wpa_cli -i wlan0 |
wpa_cli -i wlan0 |
|
p2p_find |
||
p2p_find |
||
p2p_peers |
p2p_peers 可以把扫到的 p2p device 全部打印出来,包括 mac address |
|
p2p_peers |
||
p2p_connect 00:e0:4c:00:06:fb pbc go_intent=15 |
指定对方的 mac address 进行连线,连线成功后,DUT 当 GO,SUT 当 GC |
|
p2p_connect 00:e0:4c:00:06:f9 pbc go_intent=0 |
||
q |
ifconfig 可以发现 GO 端有新增一个 p2p-wlan0-0 的接口 |
|
ifconfig |
||
ifconfig p2p-wlan0-0 192.168.43.1 |
在 GO 端起 dhcp server(将 udhcpd.conf 的 interface 改成 p2p-wlan0-0) |
|
udhcpd -S /etc/udhcpd.conf |
||
q |
ifconfig 可以发现 GC 端有新增一个 p2p-wlan0-0 的接口 |
|
ifconfig |
||
dhcpcd p2p-wlan0-0 |
DUT获取IP,ping test |
|
ping 192.168.43.1 -c 10 |