USB wifi調試筆記


本文以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驅動通信有問題,請反饋給作者分析。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM