本文以realtek 8192CU WiFi模块为例,介绍USB wifi在Jelly Bean 4.1的调试笔记。

1、WIFI打不开现象概述

WiFi打不开是指您在UI的settings下选中WiFi选项,将其置为on(打开),但最终结果是自动变成off(关闭)、正在打开Wi-Fi、正在扫描等一系列不能正常打开WiFi的提示。

2、问题分析流程

WiFi打不开从硬件和软件两方面进行定位,一般是先硬件,然后软件。总体分析流程如图:

3、确认硬件可以识别

8192CU WiFi模块是基于usb接口,在UI将wifi设置为ON状态,通过串口输入lsusb确认设备可以识别。

红色标记 Bus 002 Device 003: ID 0bda:8176 就是平台上8192CU usb WiFi的vid和pid,能显示这个说明系统可以正常识别8192CU usb WiFi设备,硬件没问题。

4、确认驱动已加载

确认硬件没问题后,接着查看驱动是否加载,lsmod。

当你在UI的settings里将WiFi置于on状态,如果能正常打开,这时在串口输入lsmod,会有以下结果

红色标记 8192cu ko,说明8192CU WiFi 驱动已经成功加载上,如果此时没有看到此ko文件,请 切换到平台 /system/lib/ 目录下,查看此目录下是否有 8192CU 的 ko 。

可以看到平台下有8192cu.ko。如果您平台下有这个文件,请进入5进行进一步分析,如果您的平台没有这个文件,请进入6进行进一步分析。

5、平台/system/lib下有驱动ko文件

首先确保其权限至少为 -rw-r--r-- (即 644 ) ,如果权限不对,请按照下面操作修改权限:

chmod644 8192cu.ko

如果这些都是正常的话 请先进行手动加载

手动加载操作说明:先切换到平台/system/lib/目录下,然后进行如下操作:

insmod8192cu.ko

如果手动加载成功的话,请进入a进行下一步分析,如果手动加载不成功的话,请进入b进行下一步分析

a . 手动加载可以成功,说明 UI 加载不成功应该是系统配置文件不对 ,没有加载到指定路径的驱动。

如果您是Android 4.1请按照如下配置:

确保device\xxx录下BoardConfig.mk文件中有如下配置:

WIFI_DRIVER := rtl8192cu

WIFI_DRIVER_MODULE_PATH := /system/lib/8192cu.ko

WIFI_DRIVER_MODULE_NAME := 8192cu

其中 WIFI_DRIVER 指定您从 UI 打开 WiFi 要加载什么驱动; WIFI_DRIVER_MODULE_PATH 说明你要加载驱动的 ko 文件放在什么地方; WIFI_DRIVER_MODULE_NAME 指明驱动模块的名字。

b. 手动加载驱动也不成功,一般有两个原因:

(1) 编译内核时没有将cfg80211协议编进去,对于g18公板这块是默认配置上,如果没有配置上,您在编译内核前,先进入common目录,输入make menuconfig,配上Networkingsupport里面的内容

(2) 编译驱动的内核和您目前平台的跑的内核不是同一份code,这个从手动加载不成功的log可以很明显就看出来的,所以务必使编译驱动的内核和您目前平台跑的内核是同一份code。最安全方法是重新打包升级

对于是这两种原因的哪一个,从加载驱动不成功的log可以很容易看出来魔数不匹配。

6、平台/system/lib下没有驱动ko文件

您需要编译8192CU的ko文件,驱动在common/drivers/net/wireless/rtl8xxx_CU。将其拷贝到/system/lib/目录下并修改其权限,修改权限命令如下:

chmod644 8192cu.ko

注意:在编译8192CU驱动时,保证编译驱动的内核code和系统当前运行的内核code是同一份code,否则ko文件加载不上,会提示编译的驱动和当前系统的内核的版本不匹配的错误信息。

如果这样操作还是出现加载不上,那按照下述步骤打包升级。

(1)先按照6中的a配置好相应文件

(2)将8192CU驱动8192cu.ko编译出来,并将其拷贝到device\xxx下

(3)打包升级。

在经过如上这些定位和解决之后,从 UI 的 settings 加载 WiFi 驱动应该是没有问题了,正常情况下到此步的时候 UI 界面可以显示出 WiFi 扫描到的不同 AP ,但是也不排除 WiFi 还是打不开,这时候打不开主要有以下现象,将 WiFi 至于 on ,发现一闪而过,又变成 off ,还有就是界面上显示“正在打开 Wi-Fi......” ,还有就是显示正在扫描,这时候出现的问题可能在 wpa_supplicant

这块,请进入8进行进一步分析。

8、wpa_supplicant分析

8.1 wpa_supplicant相关文件和服务的确认

(1) 确认平台 /system/bin/ 下 wpa_supplicant 存在:

操作步骤说明如下:

130|root@android:/system/bin# ls -l wpa_supplicant

-rwxr-xr-x root     shell      686672 2008-08-01 12:00

同时确保文件操作属性至少为 -rwxr-xr-x(755)

(2) 对于 Android 4.1 确认 device\xxx下init.rc中存在如下service

service p2p_supplicant /system/bin/wpa_supplicant \

-ip2p0 -Dnl80211  -c/data/misc/wifi/p2p_supplicant.conf\

-e/data/misc/wifi/entropy.bin-puse_p2p_group_interface=1\

-N  -iwlan0-Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf

class main

socket wpa_wlan0 dgram 0660 wifi wifi

disabled

oneshot

service wpa_supplicant /system/bin/wpa_supplicant \

-iwlan0 -Dnl80211  -c/data/misc/wifi/wpa_supplicant.conf\

-e/data/misc/wifi/entropy.bin

class main

socket wpa_wlan0 dgram 0660 wifi wifi

disabled

其中p2p_supplicant是当WiFi作为p2p功能启动的服务,wpa_supplicant是WiFi作为station功能启动的服务。

8.2 将WiFi至于on,发现一闪而过,又变成off

对于这种现象主要存在两种情况 :

(1) 平台下缺少 wpa_supplicant 和 p2p_supplicant 的配置文件

确认平台/data/misc/wifi/目录下是否存在wpa_supplicant.conf和p2p_supplicant.conf文件,并确认这些文件操作权限,操作说明如下:

130|root@android:/data/misc/wifi# ls -l *supplicant.conf

-rw-rw---- system   wifi          219 2013-07-03 03:28p2p_supplicant.conf

-rw-rw---- system   wifi          374 1970-01-02 00:35wpa_supplicant.conf

(2) 对WiFi提供的接口进行确认:

这部分主要是您要清楚WiFi作为什么功能,即WiFi是仅仅作为station功能,还是要开启p2p功能,当WiFi作为station功能时候开启的是wpa_supplicant服务,当WiFi作为p2p功能开启的是p2p_supplicantf服务。

当WiFi作为station功能时开启的是wpa_supplicant,这时候一般不会出现接口错误,因为这时候wpa_supplicant服务中只用到wlan0接口,即使上层不定义wlan0底层驱动也会默认产生wlan0接口

当WiFi作为p2p功能时开启的是p2p_supplicant,这时候可能会出现接口错误,因为p2p_supplicant服务会用到p2p0接口,所以您需要提前定义好p2p0。

如果你没有定义p2p0接口,但加载时候有时候会首先启动p2p_supplicant服务,由于p2p_supplicant服务会用到p2p0这个接口,所以出现加载失败。那么怎样才能使系统不首先启动p2p_supplicant服务,而是首先启动wpa_supplicant服务?这是因为您平台/etc/permisssions/目录下有android.hardware.wifi.direct.xml这个文件,只要将这文件删掉或者重命名下,修改后记得要reboot下才能生效,操作说明如下:

130|root@android:/etc/permissions# ls -l

-rw-r--r-- root  root         158 2008-08-01 12:00 amlogic.libplayer.xml

-rw-r--r--root  root          150 2008-08-01 12:00amlogic.pppoe.xml

-rw-r--r--root  root          168 2008-08-01 12:00amlogic.subtitle.xml

-rw-r--r-- root  root   975 2008-08-01 12:00 android.hardware.usb.accessory.xml

-rw-r--r-- root  root   868 2008-08-01 12:00 android.hardware.usb.host.xml

-rw-r--r-- root   root    843 2008-08-01 12:00 android.hardware.wifi.direct.xml

-rw-r--r--root  root    829 2008-08-01 12:00 android.hardware.wifi.xml

-rw-r--r--root  root  1050 2008-08-01 12:00 android.software.live_wallpAPer.xml

-rw-r--r--root  root    880 2008-08-01 12:00android.software.sip.voip.xml

-rw-r--r--root  root    828 2008-08-01 12:00com.android.location.provider.xml

-rw-r--r-- root  root 828 2008-08-01 12:00com.google.widevine.software.drm.xml

-rw-r--r--root  root    10536 2008-08-01 12:00 platform.xml

-rw-r--r--root  root    2614 2008-08-01 12:00tablet_core_hardware.xml

怎么判断启动的是 p2p_supplicant 还是 wpa_supplicant ?因为您在没有定义 p2p0时启动 p2p_supplicant 服务,从 log 里面可以很明显看到如下 log :

wpa_supplicant( 4316):p2p0: Failed to initialize driver interface

提示:为避免因为接口出现加载失败,按照以下设置就不会出现此类错误:

对于Android 4.1,确保device\xxx目录下Boarconfig.mk中有如下内容:

WIFI_DRIVER_MODULE_ARG  := "ifname=wlan0 if2name=p2p0"

9、UI上“正在打开Wi-Fi......”

这个现象一般会有如下几种情况:

(1) 缺少配置文件:按照8的步骤确认

(2) 驱动加载失败,使底层的网络接口都没有产生,以致 supplicant 对底层的网络接口初始化失败,但是 supplicant 会尝试重复初始化几次,如果不断初始化一段时间后还是会失败,最终 supplicant 退出, UI 上 WiFi 变成 off 。

怎么查看平台下的 WiFi 模块的接口有没有产生,直接在串口输入 netcfg 命令,操作如下:

130|root@android:/# netcfg

lo       UP            127.0.0.1/8   0x00000049 00:00:00:00:00:00

eth0     DOWN       0.0.0.0/0   0x00001002 00:56:0b:d9:59:65

sit0      DOWN        0.0.0.0/0   0x00000080 00:00:00:00:00:00

ip6tnl0   DOWN     0.0.0.0/0   0x0000008000:00:00:00:00:00

wlan0  UP    192.168.0.138/24  0x00001043 34:08:04:df:9a:63

p2p0  UP      0.0.0.0/0   0x00001003 36:08:04:df:9a:63

这是我在自己机器上操作结果,红色标记的 wlan0 和 p2p0 接口就是WiFi模块产生的两个与supplicant进行通信的接口。

(3) 底层WiFi模块确实已经在系统产生了相应接口,但是supplicant对这些接口进行初始化的时候失败,这主要是因为底层驱动提供给supplicant的接口函数有问题,这个一般是底层驱动的问题,请反馈给作者进一步分析。

10、 UI上“正在扫描AP......”

一般出现这种现象应该是supplicant和底层WiFi驱动通信有问题,请反馈给作者分析。

移植 wifi模块的更多相关文章

  1. 天嵌E9平台下进行USB Wifi模块RT3070驱动的移植

    因为项目工作须要,要在天嵌E9平台下实现wifi的点对点,点对多点的传输. Wifi 模块芯片:雷凌3070芯片 嵌入式平台:E9(ARM) 交叉编译环境:arm-none-linux-gnueabi ...

  2. wifi 模块RTL8188以及mt7601u 移植测试

    kernel version:4.4.12 kernel make menuconfig // make menuconfig [*] Networking support ---> Netwo ...

  3. 【wifi移植 1】 ap6210 wifi模块移植

    1. 编译wifi相关功能为模块,生成bcmdhd.ko:由bcmdhd.ko的模块信息可知,该模块依赖于cfg80211.ko和rfkill.ko. 2. 写脚本,开机自动加载wifi模块. 3. ...

  4. ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于(Wi-Fi模块AT指令TCP透传方式),MQTT通信控制升级

    实现功能概要 前面的版本都是,定时访问云端的程序版本,如果版本不一致,然后下载最新的升级文件,实现升级. 这一节,在用户程序里面加入MQTT通信,执行用户程序的时候,通过接收MQTT的升级命令实现升级 ...

  5. 智能家居常用WiFi模块

    WiFi模块 WiFi模块就是整个系统的控制中心,控制很简单,就是输出一个开关信号控制继电器,而这个模块的核心是WiFi的连接,手机连接WiFi时需要扫描,输入密码,而这类本身没有屏幕和键盘的硬件设备 ...

  6. Beaglebone Black– 智能家居控制系统 LAS - 刷 WiFi 模块 ESP8266 Firmware 和 ESP8266 直接收发 GPIO 信号

    用 Windows 来刷 ESP8266 固件有很多中文教程,来试试直接用 BBB 刷吧.目标是 NodeMCU,ESP-01 可用,就是我买的那个. 接线方式在上一篇.当 echo ‘BB-UART ...

  7. wifi 模块

    #include"STC12C5A.H" #include <string.h> #include<intrins.h> #define uint unsi ...

  8. 有人WIFI模块使用详解

    补充 模块在连接路由器时如果希望模块固定IP 不过发现固定IP之后好像连接路由器的等待时间增加了 用的这一款 看一下现在可能用到了引脚 这个模块也有三种模式AP,STA,AP+STA 先说一下模块在A ...

  9. 第一次 刷 WiFi 模块esp8266 感谢创客阿正

    在正哥指导下 第一次 刷 WiFi 模块  少走了 不少弯路 套件里的 两块 机智云  ==== 我的电脑 需要单独供电 先 对应 接好 ic0要记得接gnd 等待上电时要断电重启 等  用助手 返回 ...

随机推荐

  1. Matches Puzzle Game

    Matches Puzzle Game 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5456 数位DP 首先我把C-A=B改为A+B=C(我觉得会简单 ...

  2. Bullcow 牡牛和牝牛(bzoj 3398)

    Description     约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排.但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡 ...

  3. 复习i++和++j

    一,新建一个Default.aspx页面 在Default.aspx.cs

  4. thinkphp u 方法

    public function test(){ $this->display();echo U('Index/test',array('id'=>1),false,'localhost') ...

  5. flask部署 supervisor的使用

    安装supervisor sudo apt-get install supervsor   配置 打开 /etc/supervisor/supervisor.conf 可以看到 同目录文件夹下的 co ...

  6. Java IO 过滤流 BufferedInput/OutputStream

    Java IO 过滤流 BufferedInput/OutputStream @author ixenos 概念 BufferedInput/OutputStream是实现缓存的过滤流,他们分别是Fi ...

  7. 花括号中的json数据--->转为数组array

    //正式服务器 更换航班 public function changef(){ $str = '{"airportTax":50,"arriModifyTime" ...

  8. 转Rollback后undo到底做了些什么?

    转自:http://biancheng.dnbcw.info/oracle/309191.html Rollback后undo到底做了些什么? 从概念上讲,undo正好与redo相对.当你对数据执行修 ...

  9. HDU 1240 Asteroids!(BFS)

    题目链接 Problem Description You're in space.You want to get home.There are asteroids.You don't want to ...

  10. 驱动力—— 通信引擎(上)—— ESFramework 4.0 进阶(03)

    在ESFramework 4.0 进阶(02)-- 核心:消息处理的骨架流程一文中我们详细介绍了ESFramework中消息处理的骨架流程,并且我们已经知道,ESFramework中的所有通信引擎使用 ...