讨论广场 问答详情
oh5.1release版本rk3588适配rtl8822csWiFi芯片无法使用p2p功能组网
好吃懒做小不溜 2026-07-28 14:13:03
171 评论 分享

问题如题目,WiFi其它功能都正常,但是进入p2p组网模式下使用p2p_group_add时一直fail

 

171 评论 分享
相关文件下载
p2p.zip
31.88 KB
下载
写回答
全部评论(7)

您好,问下您其他的问题,怎么修改白名单 build/compile_standard_whitelist.json,源码中能编译通过RK3588

"bundle_subsystem_error": [
        "device/board/hihope/rk3568/ohos.build",
        "device/board/hisilicon/hispark_taurus/linux/ohos.build",
        "device/board/hisilicon/hispark_taurus/ohos.build",
        "device/qemu/arm_virt/linux/ohos.build",
        "third_party/flutter/glfw/bundle.json",
        "vendor/hihope/rk3568/ohos.build",
        "vendor/hihope/ipcamera/ohos.build"
    ],

2026-07-29 11:03:13
2026-07-29 13:04:40
出了build error后,参照rk3568相应条目添加rk3588白名单即可。
2026-07-29 13:04:40

三个接口同时通过 SDIO 总线收发命令,驱动内部的互斥锁或 rtw_cmd 队列在 OH 环境下出现优先级反转或死锁(Android 的 wificond 有严格的接口操作序列化,OH 没有)。

推荐方案:两接口 + 无独立 Group Interface

不要开 3 接口,也不要让驱动创建独立的 p2p-wlan0-0。改为 2 接口 + p2p_no_group_iface=1

1. 驱动 Makefile 修改

# 保留这些
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211
EXTRA_CFLAGS += -DCONFIG_P2P
EXTRA_CFLAGS += -DRTW_USE_CFG80211_STA_EVENT

# 改这里:2 个接口足够(wlan0 + p2p0),不要开 3 个
EXTRA_CFLAGS += -DCONFIG_IFACE_NUMBER=2

# 不要这个!让 P2P GO 复用现有接口
# EXTRA_CFLAGS += -DRTW_P2P_GROUP_INTERFACE=1

 

2. 驱动加载参数

insmod /vendor/lib/modules/rtl8822cs.ko ifname=wlan0 if2name=p2p0

加载后确认系统出现 wlan0 和 p2p0 两个网卡。

 

3. wpa_supplicant 配置

STA 模式wpa_supplicant.conf):

ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
update_config=1

 

P2P 模式p2p_supplicant.conf):

ctrl_interface=/var/run/wpa_supplicant
device_name=RK3588
device_type=1-0050F204-1
p2p_go_intent=7

# 核心:禁用独立 Group Interface,P2P GO 直接复用 p2p0
p2p_no_group_iface=1

 

4. 启动方式

STA 和 P2P 分别用不同配置文件、不同接口启动:

# STA
wpa_supplicant -B -i wlan0 -Dnl80211 -c /etc/wpa_supplicant/wpa_supplicant.conf

# P2P(需要时再启动,或常驻)
wpa_supplicant -B -i p2p0 -Dnl80211 -c /etc/wpa_supplicant/p2p_supplicant.conf

 

或者如果只起一个 wpa_supplicant 进程管理两个接口:

wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf \
               -N -i p2p0 -c /etc/wpa_supplicant/p2p_supplicant.conf

2026-07-28 14:40:15
引用:“找到了代码硬伤——foundation/communication/wifi/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_state_machine.cpp有硬编码代码: void P2pStateMachine::ClearGroup() { struct ifaddrs *ifaddr = nullpt”
这种也不行,现在直接用命令行测试,跟这块也不影响吧
2026-07-29 16:23:31
2026-07-28 16:08:44
引用:“ai都跑烂了,p2p_no_group_iface=1这个也试过了”
找到了代码硬伤——foundation/communication/wifi/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_p2p/p2p_state_machine.cpp有硬编码代码: void P2pStateMachine::ClearGroup() { struct ifaddrs *ifaddr = nullptr; struct ifaddrs *ifa = nullptr; int n; std::string iface; if (getifaddrs(&ifaddr) == -1) { WIFI_LOGE("getifaddrs failed, error is %{public}d", errno); return; } for (ifa = ifaddr, n = 0; ifa != nullptr; ifa = ifa->ifa_next, n++) { if (strncmp("p2p-", ifa->ifa_name, P2P_PREFIX_LEN) == 0) { WIFI_LOGE("has p2p group, remove"); iface.assign(ifa->ifa_name); WifiP2PHalInterface::GetInstance().GroupRemove(iface); // current p2p group can be created only one, // if there are multiple groups can be created in the future, the break need to be modified. break; } } freeifaddrs(ifaddr); } 修改成下面这样试试看: if (strncmp("p2p-", ifa->ifa_name, P2P_PREFIX_LEN) == 0 || strncmp("p2p0", ifa->ifa_name, 4) == 0) { ........ 原因:RTL 驱动创建的 P2P group 接口是 p2p0,不是 p2p-wlan0-0。OH 框架识别不到就无法清理和状态切换。 其他注意事项: 1、RTL 驱动 Makefile(两接口模式,不要三接口) 2、驱动加载参数:insmod /vendor/lib/modules/rtl8822cs.ko ifname=wlan0 if2name=p2p0 3、启动 wpa_supplicant 时(关键!不要用 -i wlan0 做 P2P): # P2P 模式(必须走 p2p0) wpa_supplicant -B -i p2p0 -Dnl80211 -c /etc/wpa_supplicant/p2p.conf p2p.conf 内容: ctrl_interface=/var/run/wpa_supplicant device_name=RK3588 device_type=1-0050F204-1 p2p_go_intent=7 p2p_no_group_iface=1 为什么 p2p_no_group_iface=1 之前无效? 因为你之前用的是 -i wlan0,而 RTL 驱动的 P2P 功能必须走 p2p0 接口。在 wlan0 上设 p2p_no_group_iface=1,wpa_supplicant 会尝试让 wlan0 直接当 GO,但驱动底层不允许 wlan0 切换为 AP/P2P 模式(它被固化为 STA 接口)。Android 上正常,就是因为 Android 自动把 P2P 请求转发到了 p2p0。OH 没有这层自动转发。 你先按这个方案改,如果还有问题,把 ip link show 的输出贴出来。
2026-07-28 16:08:44
2026-07-28 15:13:01
ai都跑烂了,p2p_no_group_iface=1这个也试过了
2026-07-28 15:13:01

显示接口不足我加了下面两个编译参数可以开启p2p功能但是会导致STA模式连接WiFi设备直接卡死

EXTRA_CFLAGS += -DRTW_P2P_GROUP_INTERFACE=1

   

EXTRA_CFLAGS += -DCONFIG_IFACE_NUMBER=3

2026-07-28 14:19:25

WiFi驱动整个代码在安卓版本上是正常的,移植到oh侧就发生此问题

2026-07-28 14:14:10