首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >wpa_supplicant工具移植

wpa_supplicant工具移植

作者头像
知否知否应是绿肥红瘦
发布2025-02-19 21:24:47
发布2025-02-19 21:24:47
6530
举报
文章被收录于专栏:Linux知识Linux知识
一、移植准备

就移植来说,wpa_supplicant的移植和ssh十分类似,wpa_supplicant需要openssl和libnl库,所以我们需要先准备好openssl和libnl库,openssl的移植在前面的文章嵌入式Linux开发板移植SSH中也介绍过一次,这里的openssl库的移植和前面完全一样。我们先准备好源码:

  1. openssl-1.0.2.tar.gz
  2. libnl-3.2.23.tar.gz
  3. wpa_supplicant-2.9.tar.gz
二、openssl移植

将openssl的源码拷贝至Linux主机并解压,然后新建一个目录openssl用于存放编译结果。

1.配置(我这里是1.0.2版本,新版的配置方法有所不同)
代码语言:javascript
复制
./Configure --prefix=/ZLG_linux/wpa_tools/openssl os/compiler:/ZLG_linux/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-gcc 

–prefix 指定make install的安装目录,这里选择刚刚创建的openssl目录 os/compiler 指定交叉编译器,这里最好使用绝对路径

2.编译
代码语言:javascript
复制
make //这里尽量不要使用多核编译,可能会出错
3.安装
代码语言:javascript
复制
make install

安装完成后,openssl目录下就生成了我们需要的文件。

三、libnl移植

将libnl源码拷贝至Linux主机下并解压,同时新建一个libnl目录用于存放编译结果

1.配置
代码语言:javascript
复制
./configure --host=arm-fsl-linux-gnueabi --prefix=/ZLG_linux/wpa_tools/libnl/

–prefix 指定make install的安装目录,这里选择刚刚创建的openssl目录 –host 指定交叉编译器的前缀,注意是前缀!!!没有"-"

2.编译、安装
代码语言:javascript
复制
make
make install

完成之后,libnl目录下就会生成我们需要的库文件。

四、wpa_supplicant 移植

将wpa_supplicant源码拷贝到linux主机并解压,然后进入wpa_supplicant目录下:

1.配置

将wpa_supplicant目录下的defconfig拷贝一份并重命名为.config,然后打开.config文件

代码语言:javascript
复制
cp defconfig .config
vim .config

在.config文件中增加如下内容,其中openssl和libnl库的路径就是刚刚openssl和libnl安装的位置

代码语言:javascript
复制
#交叉编译器
CC=arm-fsl-linux-gnueabi-gcc
#openssl 库和头文件路径
CFLAGS += -I/ZLG_linux/wpa_tools/openssl/include
LIBS += -L/ZLG_linux/wpa_tools/openssl/lib
#libnl 库和头文件路径
CFLAGS += -I/ZLG_linux/wpa_tools/libnl/include/libnl3
LIBS += -L/ZLG_linux/wpa_tools/libnl/lib

接着还需要指定 libnl 库的 pkgconfig 路径,环境变量 PKG_CONFIG_PATH 保存着 pkgconfig 包路径。

代码语言:javascript
复制
export PKG_CONFIG_PATH=/ZLG_linux/wpa_tools/libnl/lib/pkgconfig:$PKG_CONFIG_PATH 
2.编译
代码语言:javascript
复制
make

编译结束后会在当前目录下生成wpa_supplicant和wpa_cli两个工具。

将这两个文件拷贝到开发板/usr/bin目录下。

3.开发板配置

首先,在开发板/etc目录下新建一个wpa_supplicant.conf文件,文件内容如下:

代码语言:javascript
复制
ctrl_interface=/var/run/wpa_supplicant
# Open system without encryption
network={
    ssid="wifi名字"
    key_mgmt="wifi密码"
}

接着需要新建/var/run/wpa_supplicant目录

代码语言:javascript
复制
mkdir -p /var/run/wpa_supplicant 

最后使用下面的命令连接wifi

代码语言:javascript
复制
wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
-D:驱动名称  
  nl80211 = Linux nl80211/cfg80211
  wext = Linux wireless extensions (generic)
  wired = Wired Ethernet driver
-c:配置文件
-i:网口名称
&:后台运行
更多命令执行wpa_supplicant --help 

这样就是连接成功,再动态获取下ip即可

代码语言:javascript
复制
udhcpc -i wlan0 //-i指定网卡

接着执行ifconfig就可以看到已经分配ip地址的无线网卡了

这里若wlan0还是没有ip地址,可能是获取的ip地址还没有被写入网卡设备,可以参考上一篇博客i.MX283开发板移植RTL8188ETV无线网卡驱动建立自动配置脚本,或者用ifconfig wlan0 ip地址手动配置。

最后,ping一下百度试试

代码语言:javascript
复制
ping -I 192.168.43.198 www.baidu.com  //-I是指定执行 ping 操作的网卡 IP 地址

成功ping通百度,接下来就可以利用wifi上网了!

若这里ping不通百度,请确保/etc目录下有resolv.conf文件(DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名),且该文件中保存有DNS服务器的IP地址(例如:nameserver 114.114.114.114 )

4.常用操作
代码语言:javascript
复制
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

参考博客/文章:

  1. 【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、移植准备
  • 二、openssl移植
    • 1.配置(我这里是1.0.2版本,新版的配置方法有所不同)
    • 2.编译
    • 3.安装
  • 三、libnl移植
    • 1.配置
    • 2.编译、安装
  • 四、wpa_supplicant 移植
    • 1.配置
    • 2.编译
    • 3.开发板配置
    • 4.常用操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档