在开始使用ConnectCore 6ul单板机或开发板的WiFi之前,请确保您根据使用的天线正确设置好拨盘开关。模块上的u.FL接口和单板机上的MMCX接口同时只能有一个用效。

注意,我们只有一个WiFi设备,所以当作为WiFi Direct使用时,可以把其它功能注释掉,使用预配置的Mac地址,如果要同时使用,则需要配置不同的虚拟MAC地址,比如尾缀加2。考虑到实际应用场景,先把/etc/network/wlan1部分注释掉。 由于虚拟IP一共可以定义三个,如果没有定义,默认的值是00:0a:f5:89:89:fe,我们可以规划好定义局域网内唯一的虚拟mac地址,一般可以这样:用第4个字节来表示虚拟IP,第5字节00,第6字节和原标签上mac一样,只要不会重复又方便识别即可,如: 00:0a:f5:<虚拟IP号>:00:XX

一、WiFi直连测试 建立点对点 (P2P) 链路分为以下几个阶段:

  1. P2P发现,允许搜索附近的P2P设备
  2. P2P组的形成,一个P2P组是将其中一个设备标识为组所有者而形成的。如果配置为设备,则设备可以自主成为组所有者 (GO),也可以通过交换 GO 意图在设备之间协商。
  3. P2P 预配,使用按钮配置 (PBC) 或 PIN 身份验证对链路进行身份验证。
  4. P2P 连接,当组所有者 (GO) 和组客户端 (GC) 之间的连接实际建立时。

Wi-Fi 驱动程序加载时会创建一个 p2p0 接口,供wpa_supplicant用于 P2P 组形成。一旦形成一个组,就会创建虚拟的 p2p-p2p0-N 接口,其中 N 是从 0 开始的索引。然后,这些虚拟接口用于预配。 也就是P2P组添加、查找和连接操作在 p2p0 接口上进行;而配置发生在虚拟 p2p-p2p0-N 接口上。此配置要求 MAC 地址不同且唯一,在尝试连接多个设备之前请配置虚拟接口。 若要在驱动程序加载期间启用 P2P,有两种方法:a或b任选一个都可以。

a).在以下位置为 wlan 模块创建一个选项文件 /etc/modprobe.d/wlan.conf

options wlan enable_p2p=1

重启后生效

b).直接在uboot中配置

env set extra_bootargs $extra_bootargs wlan.enable_p2p=1

(1) 自动 P2P 连接设置 以两个板子的mac地址分别为:00:04:F3:0E:40:28 和00:04:F320:22:CB为例,分别设置他们的虚拟IP为00:0a:f5:01:00:28和00:0a:f5:01:00:CB

由于用不着,可先在etc/network/interfaces中注释掉原来的wlan0部分,然后设置一个虚拟IP:

fw_setenv wlan1addr 00:0a:f5:01:00:28  

编辑文件 /etc/network/interfaces 并使用 p2p0 接口条目 p2p-peer-mac 处的参数添加远程对等 MAC 地址:

        ...
        pre-up [ -d /proc/device-tree/wireless ]
        p2p-peer-mac 00:0a:f5:01:00:CB

同样地,编辑另一块板子,也是先设置虚拟mac,并指定对方的虚拟mac, 我们还需要修改WLAN0的默认IP,否则两块板子的IP都一样了。

fw_setenv wlan1addr 00:0a:f5:01:00:CB  

编辑文件 /etc/network/interfaces 并使用 p2p0 接口条目 p2p-peer-mac 处的参数添加远程对等 MAC 地址:

        ...
        pre-up [ -d /proc/device-tree/wireless ]
        p2p-peer-mac 00:0a:f5:01:00:28

然后就可以在两边的板子上启动相关的p2p0接口,先重启一次, 注意,我们要配置WiFi Direct, 并不是这两个接口的直连,而是 p2p-p2p0-N 虚拟接口上。如果想自动连接,依赖于if-up.d/p2plink脚本。

不同环境和不同配置下,这个脚本实现并不总是相同,建议参考官方文档手动配置: https://w1.fi/cgit/hostap/tree/wpa_supplicant/README-P2P