linux下WIFI模块使用:wpa_supplicant工具交叉编译以及配置
linux下WIFI模块使⽤:wpa_supplicant⼯具交叉编译以及配置安装依赖库openssl
源码下载:github/openssl/openssl/releases/tag/OpenSSL_1_1_1b
国庆法定假日几天1) 配置
cd /root/wifi
tar -xvf openssl-OpenSSL_1_1_
cd openssl-OpenSSL_1_1_1b/
./config shared no-asm --prefix=$PWD/build
./config表⽰根据后⾯的编译选项⽣成⼀Makefile⽂件,“shared”表⽰⽣成共享库;“no-asm”表⽰去掉汇编部分;“–prefix=”后⾯跟着⽣成的项⽬所存放的路径。2)修改Makefile:
PLATFORM=arm-linux
CROSS_COMPILE=arm-linux-
CNF_CFLAGS=-pthread
CNF_CXXFLAGS=-std=c++11 -pthread
3)编译&&安装
make
make install
编译安装后在/root/wifi/openssl-OpenSSL_1_1_1b/build/lib/⽬录内容如下:
# ls /root/wifi/openssl-OpenSSL_1_1_1b/build/lib/
engines-1.1  libcrypto.a  libcrypto.so  libcrypto.so.1.1  libssl.a  libssl.so  libssl.so.1.1  pkgconfig
4) 复制库⽂件到开发板⽂件系统/usr/lib⽬录下
这⾥需要注意的是,拷贝时使⽤cp -rf,连同软链接⼀起拷贝。
交叉编译wpa_supplicant
源码下载:w1.fi/wpa_supplicant/
下载最新版本:w1.fi/releases/wpa_supplicant-2.
1)创建⼀个.config⽂件
cd /root/wifi/
tar -xvf wpa_supplicant-2.
cd wpa_supplicant-2.9/wpa_supplicant
cp defconfig .config
2) 修改.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/root/wifi/openssl-OpenSSL_1_1_1b/build/include
LIBS += -L/root/wifi/openssl-OpenSSL_1_1_1b/build/lib
CFLAGS += -I/root/wifi/libnl-3.2.23/build/include
LIBS += -L/root/wifi/libnl-3.2.23/build/lib
CC=arm-linux-gcc
CFLAGS为编译安装好的openssl的include⽬录和 libnl的include⽬录
LIBS为编译安装好的openssl的lib⽬录和 libnl的include⽬录
CC为交叉编译⼯具
libnl库的交叉编译见:
3)添加环境变量
export PKG_CONFIG_PATH=/root/wifi/libnl-3.2.23/build/lib/pkgconfig:$PKG_CONFIG_PATH
4)编译
执⾏make后会出现以下错误:
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
继续执⾏make,⼜出现如下错误:
.
./src/drivers/driver_wext.c: In function'wpa_driver_wext_set_key_ext':
../src/drivers/driver_wext.c:1780: error: 'IW_ENCODE_ALG_AES_CMAC' undeclared (first use in this function)
../src/drivers/driver_wext.c:1780: error: (Each undeclared identifier is reported only once
../src/drivers/driver_wext.c:1780: error: for each function it appears in.)
../src/drivers/driver_wext.c: In function'wpa_driver_wext_associate':
../src/drivers/driver_wext.c:2215: error: 'IW_AUTH_MFP_DISABLED' undeclared (first use in this function)
../src/drivers/driver_wext.c:2218: error: 'IW_AUTH_MFP_OPTIONAL' undeclared (first use in this function)
../src/drivers/driver_wext.c:2221: error: 'IW_AUTH_MFP_REQUIRED' undeclared (first use in this function)
../src/drivers/driver_wext.c:2224: error: 'IW_AUTH_MFP' undeclared (first use in this function)
Makefile:1990: recipe for target '../src/drivers/driver_wext.o' failed
解决办法:
在kernel源码⾥搜索上述宏:
grep"IW_ENCODE_ALG_AES_CMAC" * -nR /root/linux-3.4.2
得到以下内容:
/root/linux-3.4.2/include/linux/wireless.h:626:#define IW_ENCODE_ALG_AES_CMAC    5
/root/linux-3.4.2/net/wireless/wext-compat.c:699:    case IW_ENCODE_ALG_AES_CMAC:
在/root/linux-3.4.2/include/linux/wireless.h⾥出上述未定义的⼏个宏,添加到../src/drivers/driver_wext.c的开头。
下⾯列出以下⼏个宏:
#define IW_ENCODE_ALG_AES_CMAC  5
/* IW_AUTH_MFP (management frame protection) values */
#define IW_AUTH_MFP_DISABLED    0  /* MFP disabled */
#define IW_AUTH_MFP_OPTIONAL    1  /* MFP optional */
#define IW_AUTH_MFP_REQUIRED    2  /* MFP required */
#define IW_AUTH_MFP        12
继续make,编译成功。
在当前⽬录下(/root/wifi/wpa_supplicant-2.9/wpa_supplicant)⽣成了wpa_cli、wpa_passphrase、wpa_supplicant可执⾏程序。
wpa_supplicant是核⼼程序,它和wpa_cli的关系就是服务和客户端的关系
wpa_cli⽤来搜索、设置、和连接⽹络。
wpa_passphrase⽹络配置可以使⽤wpa_passphrase⼯具⾃动⽣成并添加到配置⽂件中。
把这三个⽂件复制到开发板的根⽂件/user/bin⽬录下就可以使⽤了。
使⽤wpa_supplicant⼯具连接WIFI
1)创建配置⽂件
wpa_supplicant连接WIFI的时候会从配置⽂件中读取账号和密码,以及加密⽅式等,所以我们再运⾏wpa_supplicant⼯具的时候要提前写好配置⽂件。
配置⽂件名称⾃定,但是要以 .conf 为后缀,并保存在 /etc/ ⽬录下,这边给出⼀个配置⽂件的例⼦。
ctrl_interface=/var/run/wpa_supplicant  # ⼀个⽬录,⽤于wpa_supplicant和wpa_cli的socket通信
network={
ssid="dswei"                # WIFI名称
psk="baiwenwang123"          # WIFI密码
}
在⼀般使⽤中我们只要设置ssid和psk,其他全部使⽤默认的,就可以连接上WIFI。
2)打开wlan0
好听但不出名的歌ifconfig wlan0 up
3)创建⼀个socket通信的⽬录
mkdir -p /var/run/wpa_supplicant
4)测试和连接WIFI
wpa_supplicant -B -c/f -iwlan0
-B为后台运⾏,-c为配置⽂件⽬录,f为配置⽂件的名称,根据实际情况填写。其他配置选项可以看wpa_supplicant-2.9/wpa_supplicant/README,然后我们就可以看到开发板和路由器连接上了。
5)测试wifi⽹络连通性
ifconfig wlan0 192.168.0.10
ping -I wlan0 192.168.0.1//192.168.0.1为路由器的IP
山西景区访问外⽹
1)修改/f添加DNS:
nameserver 192.168.0.1  #192.168.0.1是路由器的LAN⼝IP地址
下⾯两个DNS是通⽤的:
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器
2)设置⽹关:
route add default gw 192.168.0.1 dev wlan0
route add default gw 192.168.0.1 dev eth0
设置完成后可以查看⼀下⽹关是否设置正确:
route -n
或者
netstat -r
3)测试⽹络连通性
ping -I wlan0 www.baidu
苹果11怎么截图ping -I eth0 www.baidu

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。