wpa_supplicant的配置和移植

内核 4.14.2 Linux
开发板 Itop4412

一、wpa_supplicant的介绍和使用

wpa_supplicant本是开源项目源码,被谷歌修改后加入android移动平台,它主要是用来支持WEPWPA/WPA2和WAPI无线协议和加密认证的,而实际上的工作内容是通过socket(不管是wpa_supplicant与上层还是wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持

目前可以使用wireless-toolswpa_supplicant工具来配置无线网络。请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口

wpa_supplicant是一个较好的选择,但缺点是它不支持所有的驱动。请浏览wpa_supplicant网站获得它所支持的驱动列表。另外,wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络。wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPAAP

经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicantwpa_cliwpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。

如何用wpa_supplicant使能一个wifi连接

运行wpa_supplicant程序;

  • 执行:/system/bin/wpa_supplicant -d -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf

其中:

  • -d :增加调试信息

  • -Dwextwext,驱动名称

  • -iwlan0wlan0,网络接口名称

  • /system/bin/wpa_supplicantwpa_supplicant可执行程序path

  • /data/misc/wifi/wpa_supplicant.confwpa_supplicant的配置文件path

wpa_cli -i wlan0 scan          //搜索附件wifi热点
wpa_cli -i wlan0 scan_result   //显示搜索wifi热点
wpa_cli -i wlan0 status        //当前WPA/EAPOL/EAP通讯状态
wpa_cli -i wlan0 ping          //pings wpa_supplicant

二、wpa_supplicant工具交叉编译以及配置

wpa_supplicant依赖有openssl和libnl的一些库,所以要先编译一下他们。

1、编译openssl依赖库

1)配置

解压下载的压缩包:

tar -xvf openssl-OpenSSL_1_1_1b.tar.gz 
cd openssl-OpenSSL_1_1_1b/
./config shared no-asm --prefix=$PWD/build

./config表示根据后面的编译选项生成Makefile文件,“shared”表示生成共享库;“no-asm”表示去掉汇编部分;“–prefix=”后面跟着生成的项目所存放的路径。$PWD/build表示在当前路径下创建一个build的文件夹,并且生成的东西放在里面。

2)修改Makefile

CC= arm-none-linux-gnueabi-gcc
AR= arm
RANLIB= arm-none-linux-gnueabi-ranlib 

AR或者$ export ARCH=arm 他们都是指定要编译到那种平台上,这里指定ARM平台。

3)编译并安装

make 

编译时时可能会遇到下面的问题:

请添加图片描述

问题是configure执行后生成的Makefile中的CFLAG

在这里插入图片描述
去掉这一行中的-m64就行了,之后继续编译,最后安装

make install

编译安装后在openssl-OpenSSL_1_1_1b/build/lib/目录内容如下:

在这里插入图片描述
可以看见他们都是在arm平台运行的

在这里插入图片描述

  1. 复制库文件到开发板文件系统/lib目录下

这里需要注意的是,拷贝时使用cp -rf,连同软链接一起拷贝。不要破坏软连接。

2、编译libnl依赖库

解压、编译、安装

tar -xvf libnl-3.2.23.tar.gz
cd libnl-3.2.23
mkdir build
./configure --host=arm-linux --prefix=$PWD/build
make CC=arm-none-linux-gnueabi-gcc
make install

3、编译iw

解压、编译、安装

iw需要libnl的一些库文件:环境变量要根据自己的实际路径来设置

tar -xvf iw-4.0.tar.gz 
cd iw-4.0/
export PKG_CONFIG_PATH=/home/libnl-3.2.23/build/lib/pkgconfig:$PKG_CONFIG_PATH
make CC=arm-linux-gcc

把生成的iw文件复制到开发板的/bin/目录下。

在这里插入图片描述

4、编译wpa_supplicant

1)创建一个.config文件

tar -xvf wpa_supplicant-2.9.tar.gz
cd wpa_supplicant-2.9/wpa_supplicant
cp defconfig .config
  1. 修改.config文件

把部分:

# Additional directories for cross-compilation on Linux host for mingw target
#CFLAGS += -I/opt/mingw/mingw32/include/ddk
#LIBS += -L/opt/mingw/mingw32/lib
#CC=mingw32-gcc

改为:

 # Additional directories for cross-compilation on Linux host for mingw target
 CFLAGS += -I/home/openssl-OpenSSL_1_1_1b/build/include
 LIBS += -L/home/openssl-OpenSSL_1_1_1b/build/lib
 CFLAGS += -I/home/libnl-3.2.23/build/include
 LIBS += -L/home/libnl-3.2.23/build/lib
 CC=arm-linux-gcc

要根据自己的路径去修改。

CFLAGS为编译安装好的openssllibnlinclude目录;
LIBS为编译安装好的openssllibnllib目录;
CC为交叉编译工具;

3)添加临时环境变量

export PKG_CONFIG_PATH=/homelibnl-3.2.23/build/lib/pkgconfig:$PKG_CONFIG_PATH

4)编译

编译时会出现以下错误:

dbus/dbus_dict_helpers.c:10:23: warning: dbus/dbus.h: No such file or directory
In file included from dbus/dbus_dict_helpers.c:14:

修改.config文件,注释掉以下两个选项:

#CONFIG_CTRL_IFACE_DBUS_NEW=y
#CONFIG_CTRL_IFACE_DBUS_INTRO=y

继续编译。

在当前目录下生成了wpa_cliwpa_passphrasewpa_supplicant可执行程序。

wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系

wpa_cli用来搜索、设置、和连接网络。

wpa_passphrase网络配置可以使用wpa_passphrase工具自动生成并添加到配置文件中。

把这三个文件复制到开发板的根文件/bin目录下就可以使用了

→→编译完成的wpa_supplicant、iw工具,制作好的Linux根文件系统镜像文件←

三、使用使用wpa_supplicant工具连接WIFI

首先我们可以扫描一下周围有哪些wifi ,使用命令:iwlist ra0 scan

1) 创建配置文件
wpa_supplicant连接WIFI的时候会从配置文件中读取账号和密码,以及加密方式等, 所以我们再运行wpa_supplicant工具的时候要提前写好配置文件。
配置文件名称自定,但是要以 .conf 为后缀,并保存在 /etc/ 目录下,这边给出一个配置文件的例子。
.
使用vietc目录下创建wpa_supplicant.conf文件。

ctrl_interface=/var/run/wpa_supplicant  # 一个目录,用于wpa_supplicant和wpa_cli的socket通信
network={
        ssid="dswei"                 # WIFI名称
        psk="baiwenwang123"          # WIFI密码
}

在一般使用中我们只要设置ssidpsk,其他全部使用默认的,就可以连接上WIFI

2)打开wlan0

ifconfig wlan0 up

3)创建一个socket通信的目录

mkdir -p /var/run/wpa_supplicant

4)测试和连接WIFI两种

wpa_supplicant -B -c/etc/wpa_supplicant.conf -i wlan0

-B为后台运行,-c为配置文件目录,wpa_supplicant.conf为配置文件的名称,根据实际情况填写。

 wpa_supplicant -Dwext -i wlan0 -c  wpa_supplicant.conf -d 

-Dwext可以打印出连接的debug信息。

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lazy_Goat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值