1.5 wpa_supplicant移植与使用
所需包下载地址:
Libnl:http://www.infradead.org/~tgr/libnl/files/
Openssl:http://mirrors.ibiblio.org/openssl/source/
wpa_supplicant:http://w1.fi/releases/
1.5.1交叉编译libnl-3.2.25.tar.gz
libnl是为了方便应用程序使用netlink接口而开发的一个库。这个库为原始netlink消息传递以及不同的netlink family专用接口提供了一个统一的接口。
1.解压
$ tar -xvf libnl-3.2.25.tar.gz
2.配置
$ cd libnl-3.2.25/
$ mkdir install
$ ./configure --host=arm-none-linux-gnueabi --prefix=$PWD/install
配置libnl用到bison and flex工具,使用下面的命令安装:
$ sudo apt-get install bison
$ sudo apt-get install flex
3.编译
$ make
$ make install
4.移植文件
将编译出的库文件拷贝到交叉编译器默认库文件搜索目录下
$cd install/lib
将编译出的库文件拷贝到根文件系统的lib目录下
$ scp .so. root@192.168.20.230:/lib/
【注】可以使用很多方式将库拷贝到开发板的lib库。笔者使用的是scp。
1.5.2交叉编译openssl-1.1.1c.tar.gz
1.解压
$ tar -xvf openssl-1.1.1c.tar.gz
2.配置
$ cd openssl-1.1.1c/
$ mkdir install
$ ./config no-asm shared no-async --prefix=$(pwd)/install --cross-compile-prefix=arm-none-linux-gnueabi-
其参数说明如下:
no-asm: 在交叉编译过程中不使用汇编代码代码加速编译过程;
shared: 生成动态连接库。
no-async: 交叉编译工具链没有提供GNU C的ucontext库
–prefix=: 安装路径
–cross-compile-prefix=: 交叉编译工具
修改Makefile:删除里面所有的-m64和-m32编译选项。
3.编译
$make
$make install
4.移植文件
将编译出的库文件拷贝到交叉编译器默认库文件搜索目录下
$cd install/lib
将编译出的库文件拷贝到根文件系统的lib目录下
$ scp .so. root@192.168.20.230:/lib/
1.5.3交叉编译wpa_supplicant-2.8.tar.gz
1.解压
$ tar -xvf wpa_supplicant-2.8.tar.gz
2.配置
$ cd wpa_supplicant-2.8/wpa_supplicant/
配置环境变量:
export PKG_CONFIG_PATH=/home/bruceou/tools/wifi/tools/libnl-3.2.25/install/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/home/bruceou/tools/wifi/tools/openssl-1.1.1c/install/lib/pkgconfig:$PKG_CONFIG_PATH
$ cp defconfig .config
修改.config
CFLAGS +=-I/home/bruceou/tools/wifi/tools/libnl-3.2.25/install/include // CONFIG_DRIVER_NL80211=y时。需指定libnl头文件
LIBS +=-L/home/bruceou/tools/wifi/tools/libnl-3.2.25/install/lib // CONsFIG_DRIVER_NL80211=y时,需指定libnl库
CONFIG_LIBNL32=y // CONFIG_DRIVER_NL80211=y时,需指定libnl库版本
CC =arm-none-linux-gnueabi-gcc // 配置编译器
//配置TLS实现,可选有openssl、internal,选择penssl时需指定openssl库,移植步 骤请参考Openssl 移植,由于开发板flash空间较小,出于节省空间的考虑,选择 internal
CONFIG_TLS = internal
CONFIG_INTERNAL_LIBTOMMATH = y //CONFIG_TLS = internal时,需使能
CFLAGS +=-I/home/bruceou/tools/wifi/tools/openssl-1.1.1c/install/include/ //CONFIG_TLS = openssl时,需指定openssl头文件
LIBS +=-L/home/bruceou/tools/wifi/tools/openssl-1.1.1c/install/lib // CONFIG_TLS = openssl时,需指定openssl库
【注】可以根据自己的需求选择配置 CONFIG_DRIVER_WEXT 、CONFIG_DRIVER_NL80211 、CONFIG_TLS。
注释以下配置,否则需要移植DBUS库。
#CONFIG_CTRL_IFACE_DBUS=y
#CONFIG_CTRL_IFACE_DBUS_NEW=y
3.编译
$ make -j4
$ mkdir install
$ make
$ make DESTDIR=$PWD/install install
我们可以在子install/usr/local/sbin目录下看到wpa_cli,wpa_passphrase和wpa_supplicant三个文件。
wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系
wpa_cli用来搜索、设置、和连接网络。
wpa_passphrase网络配置可以使用wpa_passphrase工具自动生成并添加到配置文件中。
【注】wpa_supplicant依赖gcc-multilib库
$sudo apt-get install gcc-multilib
4.复制文件
$ cd install/usr/local/sbin/
将wpa_cli wpa_passphrase wpa_supplicant拷贝到根文件系统的bin目录
$ scp * root@192.168.20.230:/bin
5.创建一个socket通信的目录
#mkdir -p /var/run/wpa_supplicant
1.5.4使用wpa_supplicant工具连接WIFI(手动获取IP)
1.打开wlan0
#ifconfig wlan0 up
2.启动wpa_supplicant
#wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -B
3.wpa_supplicant启动后,可以手动/自动连接。
手动连接:
通过wpa_cli来操作设置;wpa_cli有两种方法,
第一种:直接进入cli控制台操作,如下:
#wpa_cli
scan:扫描网络
scan
scan_results
add_network:增加网络
add_network
list_network
set_network:设定网络连接的ssid和密码
set_network 1 ssid “TP_LINK_LAB”
set_network 1 psk “12345678”
enable_network:使能网络连接
enable_network 0
看到CTRL-EVENT-CONNECTED,表示连接完成
status:查看状态
states
save:保存当前的连接设置,下次wifi启动时会自动连接,保存在wpa_supplicant.config中。
quit或q:退出cli模式。
使用ifconfig wlan0 192.168.20.123给模块配置IP地址
$ ifconfig wlan0 192.168.20.123
连接成功以后可以ping通路由器。
第二种方法:
直接在终端中敲完整命令操作,如下:
两种方法都可以,方法一输错不可以删除,得重新输入;方法二在输入ssid和密码时要用单引号括起双引号
断开WiFi。
#ifconfig wlan0 down
#killall wpa_supplicant
1.5.5移植DHCP(动态获取ip和自动设置DNS)
地址:http://ftp.isc.org/isc/dhcp/
1.解压文件
$tar -xvf dhcp-4.4.1.tar.gz
$cd dhcp-4.4.1
2.配置
$./configure --host=arm-none-linux-gnueabi ac_cv_file__dev_random=yes --with-randomdev=no
$cd bind
修改Makefile添加:
BUILD_CC=gcc ac_cv_file__dev_random=yes
3.编译
$ make
$ make DESTDIR=$PWD/install install
【注】可以忽略,make之后就会在client目录下生成dhclient和配置文件
4.文件复制
$ cd install/usr/local
$ scp etc/dhclient.conf.example root@192.168.20.230:/etc
$ scp sbin/dhclient root@192.168.20.230:/sbin
将将client/scripts/linux拷贝到目标板的/etc目录下
5.配置开发板
将开发板/etc/下的dhclient.conf.example文件名修改为dhclient.conf。
将linux脚本改名为dhclient-script。
输入命令chmod +x dhclient-script,为dhclient-script添加可执行属性。
修改dhclient-script
#!/bin/bash该为#!/bin/sh,因为嵌入式的shell为bin/sh
创建目录/var/db/
#mkdir -p /var/db
1.5.6使用wpa_supplicant工具连接WIFI(自动获取IP)
【注】如果是编译后能的模块需要加载驱动。
1.打开wlan0
#ifconfig wlan0 up
2.设置连接的热点和密码
#wpa_passphrase testap “12345” >> /etc/wpa_supplicant.conf
testap为wifi热点,密码为12345,执行完上以命令后会在/etc/目录下生成wpa_supplicant.conf配置文件,修改如下:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="testap"
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
pairwise=TKIP CCMP
group=CCMP TKIP WEP104 WEP40
#psk="12345"
psk=f7c8f9ad253fefcd5c9344522efb569214e05a2c1d1adcfdbbe28c3db394d705
}
3.连接WIFI
执行下面的命令使用WEXT连接wifi
#wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -B
执行下面的命令使用NL80211连接wifi
#wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B
【注】wpa_supplicant -B -c/etc/plaintext.conf -iwlan0
默认是使用nl80211。
4.查看连接状态
#wpa_cli -iwlan0 status
5.使用DHCP动态获取ip
#dhclient -d wlan0
6.测试
#ping 192.168.20.1
#ping www.baidu.com
成功访问外网。
来源:CSDN
作者:Bruceoxl
链接:https://blog.csdn.net/u013162035/article/details/93534119