最近移植wifi,WIFI芯片使用rtl8723。在文件系统生成了设备节点。需要移植工具进行测试:

  • iwconfig:没有密码的或者wep加密的wifi,使用iwconfig就已经够用。

  • wpa_supplicant: 对于wpa/wpa2加密的就需要使用wpa_supplicant进行。在android上底层也是使用wpa_supplicant进行wifi的连接测试等。

移植iwconfig很快就成功,连接无密码的wifi也能成功。

而wpa_supplicant,无论是连接wpa/wpa2还是没有密码的WIFI都是连上了之后就马上断开,然后又从新连接。

网上关于wpa_supplicant移植的很多,也看了很多的资料,收集了起来做个总结。

安装wpa_supplicant之前需要移植

  • libnl

  • openssl

  • TomMath

TomMath是否必须我没有进一步验证,看到有文档要安装,所以就一并安装了。libnl和openssl是必须的。

参考链接

http://www.linuxfromscratch.org/blfs/view/svn/basicnet/wpa_supplicant.html

http://wiki.beyondlogic.org/index.php?title=Cross_Compiling_iw_wpa_supplicant_hostapd_rfkill_for_ARM

http://blog.chinaunix.net/uid-29165999-id-4447034.html

http://blog.chinaunix.net/uid-26921272-id-3416832.html

http://www.arm9home.net/simple/index.php?t20393.html

http://www.linuxidc.com/Linux/2011-10/45202.htm

http://blog.csdn.net/hinyunsin/article/details/6029403

http://blog.csdn.net/dropping_1979/article/details/9621593

libnl移植

1、设置目录用于安装libnl。

    cd libnl-3.2.25

    mkdir install

2、配置

    ./configure --prefix=/home/Qt/tool/libnl-3.2.25/install CC=arm-linux-gcc LD=arm-linux-ld --enable-shared --enable-static --host=arm-linux

3、编译

    make

4、安装

    make install

5、将install/lib/下的libnl-3.so.200,libnl-genl-3.so.200放到开发板的/lib目录。

openssl 移植

1、设置目录用于安装openssl。

    cd openssl-1.0.1e/

    mkdir install

2、更改Makefile的内容。

    CC= arm-linux-gcc
AR= arm-linux-ar $(ARFLAGS) r
RANLIB= arm-linux-ranlib
# 要是用绝对路径,否者会出错
INSTALLTOP=/home/Qt/tool/openssl-1.0.1e/install
OPENSSLDIR=/home/Qt/tool/openssl-1.0.1e/install 3、编译 make 4、安装 make install 5、将install/lib/下的 libcrypto.a和libssl.a 添加到开发板的/lib目录。

tommath 移植

cd libtommath-1.0

make CC=arm-linux-gcc

产生的libtommath.a放到开发板的/lib目录。

wpa_supplicant 移植

1、生成文件配置

cd wpa_supplicant-2.0/wpa_supplicant

cp defconfig .config

2. 更改.config内容

CFLAGS += -I/home/Qt/tool/openssl-1.0.1e/install/include/
LIBS += -L/home/Qt/tool/openssl-1.0.1e/install/lib/
CC=arm-linux-gcc -L/home/Qt/tool/openssl-1.0.1e/install/lib/ CONFIG_DRIVER_NL80211=y
CONFIG_LIBNL32=y
CFLAGS += -I/home/Qt/tool/libnl-3.2.25/install/include/libnl3
LIBS += -L/home/Qt/tool/libnl-3.2.25/install/lib CONFIG_DRIVER_WEXT=y
CONFIG_IEEE8021X_EAPOL=y CONFIG_EAP_FAST=y CONFIG_WPS=y
CONFIG_EAP_WPS=y CONFIG_TLS=openssl
CONFIG_TLS=internal CONFIG_INTERNAL_LIBTOMMATH=y
ifndef CONFIG_INTERNAL_LIBTOMMATH
LTM_PATH=/home/Qt/tool/libtommath-1.0
CFLAGS += -I$(LTM_PATH)
LIBS += -L$(LTM_PATH)
LIBS_p += -L$(LTM_PATH)
endif 3. 编译 make 4. 将生成的wpa_supplicant等工具添加到/bin目录。 cp wpa_supplicant/examples/wpa-psk-tkip.conf rootfs/etc/wpa_supplicant.conf

连接的时候更新开发板的/etc/wpa_supplicant.conf中的内容。

运行wpa_supplicant -B -Dnl80211 -i wlan0 -c /etc/wpa_supplicant.conf

错误总结

1.一开始编译wpa_supplicant编译不过。

错误:

fatal error: netlink/genl/genl.h: No such file or directory

安装了libnl也不行,一开始没有指定libnl的库。

网上有说可以将 注释 CONFIG_DRIVER_NL80211=y

注释之后,编译。但是又遇到了2的问题。

2.在开发板运行,使用-D指定nl80211设备的时候出错。

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

所以就只能使用 -D wext或者 -Dwired

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

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

也许使用wext/wired对于某些设备可行,但是对与我的设备。出现错误,wifi连上几秒钟又断开,然后又重新连接。

root@freescale ~$ RTL871X: set bssid:8c:be:be:01:54:d2
RTL871X: set ssid [chinanet] fw_state=0x00000088
RTL871X: start auth
RTL871X: auth success, start assoc
RTL871X: assoc success
RTL871X: OnDisassoc(wlan0) reason=7, ta=8c:be:be:01:54:d2
RTL871X: OnDeAuth(wlan0) reason=7, ta=8c:be:be:01:54:d2, ignore=0
RTL871X: set bssid:00:00:00:00:00:00
RTL871X: set bssid:b0:d5:9d:81:eb:92
RTL871X: set ssid [Aplex_CCC] fw_state=0x00000088
RTL871X: start auth
RTL871X: auth success, start assoc
RTL871X: assoc success
RTL871X: rtw_aes_decrypt(wlan0) no_gkey_bc_cnt:0, no_gkey_mc_cnt:2
RTL871X: rtw_aes_decrypt(wlan0) no_gkey_bc_cnt:0, no_gkey_mc_cnt:1
RTL871X: OnDisassoc(wlan0) reason=7, ta=b0:d5:9d:81:eb:92
RTL871X: OnDeAuth(wlan0) reason=7, ta=b0:d5:9d:81:eb:92, ignore=0
RTL871X: set bssid:00:00:00:00:00:00
RTL871X: set bssid:8c:be:be:01:54:d2

3.所以从新编译wpa_supplicant,在.config添加CONFIG_DRIVER_NL80211=y,并指定nl的路径。详见本文的libnl移植。


Tony Liu

2016-12-8

wpa supplicant 移植的更多相关文章

  1. wifi测试相关(iwconfig,WPA Supplicant用法)

    iwconfig用法 1.打开无线网卡电源 iwconfig wlan0 txpower no 2.列出区域内的无线网络 iwconfig wlan0 scan 3.假设要连接到网络myhome(即e ...

  2. WPA Supplicant 用法

    本文译至:https://wiki.archlinux.org/index.php/WPA_Supplicant_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29 ...

  3. wpa supplicant 保存 wifi 设置

    wpa suppliclant使用wpa gui连接wifi后,下次开机的时,不能保存,需要从新手动进行连接. 自动保存方法: 配置文件/etc/wpa_supplicant.conf 添加 upda ...

  4. Android系统如何移植wpa_supplicant及wifi驱动

    一.WPA_SUPPLICANT简介 1. 什么是wpa_supplicant wpa_supplicant is a WPA Supplicant for Linux, BSD, Mac OS X, ...

  5. wpa gui

    wpa gui是wpa_supplicant的ui工具. wpa_supplicant源码中包含了wpa_gui, 在目录wpa_gui-qt4中. 先运行wpa supplicant,再运行wpa ...

  6. wap_supplicant介绍

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

  7. hostapd与wpa_supplicant

    hostapd与wpa_supplicant hostapd hostapd includes IEEE 802.11 access point management (authentication ...

  8. linux 无线网络配置工具wpa_supplicant与wireless-tools

    4.a. 介绍目前您可以使用我们提供的wireless-tools 或wpa_supplicant工具来配置无线网络.请记住重要的一点是,您对无线网络的配置是全局性的,而非针对具体的接口.wpa_su ...

  9. FreeBSD 10 发布

    发行注记:http://www.freebsd.org/releases/10.0R/relnotes.html 下文翻译中... 主要有安全问题修复.新的驱动与硬件支持.新的命名/选项.主要bug修 ...

随机推荐

  1. Django的cookie和session

    http://www.cnblogs.com/lhj588/archive/2011/10/27/2226976.html

  2. iOS学习35数据处理之文件读写

    1. 沙盒机制 1> 沙盒概述 每一个iOS应用程序都会为自己创建一个文件系统目录(文件夹), 这个独立.封闭.安全的空间,叫做沙盒 注:① 每一个应用程序都会拥有一个应用程序沙盒 ② 应用程序 ...

  3. Web App开发入门

    WebApp与Native App有何区别呢? Native App: 1.开发成本非常大.一般使用的开发语言为JAVA.C++.Objective-C. 2.更新体验较差.同时也比较麻烦.每一次发布 ...

  4. NOIp 2014 #2 联合权值 Label:图论 !!!未AC

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  5. [WP8.1UI控件编程]Windows Phone自定义布局规则

    3.2 自定义布局规则 上一节介绍了Windows Phone的系统布局面板和布局系统的相关原理,那么系统的布局面板并不一定会满足所有的你想要实现的布局规律,如果有一些特殊的布局规律,系统的布局面板是 ...

  6. 【Oracle】同义词问题

    优点: 1.节省数据库空间,多用户可以操作同一张表: 2.扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互: 3.利用Database Link.创建同义词可以实现不同数据库服务器之间的 ...

  7. iOS9 tableVIewCell的分割线不显示,只有在滑动的时候才显示?

    1.如果用6plus模拟器的话,电脑分辨率达不到那么高,因此就看不到分割线. 2.把模拟器换成6s 或 5s,就没问题了.

  8. 详解SpringMVC请求的时候是如何找到正确的Controller[附带源码分析]

    目录 前言 源码分析 重要接口介绍 SpringMVC初始化的时候做了什么 HandlerExecutionChain的获取 实例 资源文件映射 总结 参考资料 前言 SpringMVC是目前主流的W ...

  9. JS中常遇到的浏览器兼容问题和解决方法【转】

    今天整理了一下浏览器对JS的兼容问题,希望能给你们带来帮助,我没想到的地方请留言给我,我再加上: 常遇到的关于浏览器的宽高问题: //以下均可console.log()实验 var winW=docu ...

  10. Linux磁盘及文件系统管理

    在LINUX中我们知道一个很重要的概念,那就是"一切皆文件",这里的一切表示所有在LINUX系统的对象,自然也包括了LINUX中的硬盘设备.在LINUX中所有设备都被抽象成一个文件 ...