用C++编写一个外部程序与wpa_pplient接口



据我所知,可以简单地将wpa\ctrl.c链接到一个外部程序中,然后您就可以使用它的函数来控制和接收来自wpa_pplient的信息。

有人能提供一个例子吗,最好是用C++,你会怎么做:

  1. 将外部程序链接到wpa\ctrl.c文件
  2. 进行"扫描"然后打印"scan_results"的代码会是什么样子

我刚开始在嵌入式linux平台上编程,在任何地方都没有这样的例子。非常感谢!

程序wpa_cli就是您想要的东西的一个例子。wpa_supplient项目支持V=1选项,以查看创建此可执行文件所需的内容。这是我的ARM构建的结果

gcc -c -o wpa_cli.o -MMD -O2 -Wall -g -I src -I src/utils 
  -Iusr_ARM/include/libnl3 
  -DCONFIG_BACKEND_FILE -DCONFIG_IEEE80211W  -DCONFIG_DRIVER_WEXT 
  -DCONFIG_WIRELESS_EXTENSION  -DCONFIG_DRIVER_NL80211 -DCONFIG_LIBNL20 
  -DEAP_PSK -DIEEE8021X_EAPOL -DCONFIG_SHA256 -DCONFIG_CTRL_IFACE 
  -DCONFIG_CTRL_IFACE_UNIX  -DCONFIG_SME 
   wpa_cli.c
gcc  -o wpa_cli wpa_cli.o ../src/common/wpa_ctrl.o ../src/utils/wpa_debug.o 
   ../src/utils/common.o ../src/utils/os_unix.o ../src/utils/eloop.o 
   ../src/utils/edit_simple.o -lrt

将您的路径替换为目标ARM设备上使用的wpa_pplient版本的标头(在第一个命令中)。链接到第二个命令中列出的所有对象文件,并链接到实时库(使用-lrt)。您还可以查看wpa_supplient版本的wpa_li.c,以获取如何向请求方进程发送命令的示例。

对象列表包括wpa\ctrl.o(正如您所猜测的)和许多其他对象。根据您使用的功能,其中一些可能不需要,但我会从完整的列表开始,然后在您有一个功能示例后对其进行修剪。

许可证是这个源代码上慷慨的BSD。

这里是wpa_li_cmd_scan(),它发送扫描请求,

static int wpa_cli_cmd_scan(struct wpa_ctrl *ctrl, int argc, char *argv[])
{
    return wpa_cli_cmd(ctrl, "SCAN", 0, argc, argv);
}

您可能还想要scan_results;它与CCD_ 5在同一文件中。

API在wpa_supplient控制接口下也有很好的文档,您可以在其中扩展您的工作示例。确保您获得的源代码与系统上使用的wpa_pplient的版本相匹配。上面的命令适用于eglibcLinux系统;看起来bionic(Android库)默认提供-lrt。如果您可以运行命令rm wpa_cli.o; rm wpa_cli; make V=1,在设备构建的wpa_supplient目录中,您将看到所需的确切命令。

您可能不需要edit_simple.o文件。然而,当扫描请求完成时,可能需要eloop来从驱动程序获取未经请求的事件;至少如果你想使用许多不同的Wifi芯片。步骤是,

  1. 发送SCAN
  2. 等待<SCAN_COMPLETE>
  3. 发送SCAN_RESULTS

相关内容

  • 没有找到相关文章

最新更新