android上USB Wifi调试记录
.内容描述:
2014-12-15,操作记录_android上TL-WN725N USB Wifi调试过程。
初始现象:
Linux下能连接网络,Wifi Setting 界面无法设置wifi。
操作1:android wifi配置及启动脚本以适应TL-WN725N网卡。
android-4.2.2_r1\device\friendly-arm\tiny4412\BoardConfig.mk
中加入:
BOARD_USES_REALTEK_WIFI := true
BoardConfigCommon.mk中加入
BOARD_WIFI_VENDOR := realtek:
WPA_SUPPLICANT_VERSION := VER_0_8_X
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
CONFIG_DRIVER_WEXT :=y
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_rtl
BOARD_WLAN_DEVICE := rtl8192cu
WIFI_DRIVER_MODULE_NAME:= "wlan"
WIFI_DRIVER_MODULE_PATH := "/system/lib/modules/8188eu.ko"
WIFI_DRIVER_MODULE_ARG := "ifname=wlan0"
WIFI_FIRMWARE_LOADER := ""
WIFI_DRIVER_FW_PATH_STA := ""
WIFI_DRIVER_FW_PATH_PARAM := ""
加入:
#peng++
mkdir /data/system/wpa_supplicant 0777 wifi wifi
chmod 0777 /data/system/wpa_supplicant
chown wifi wifi /data/system/wpa_supplicant
操作2:TL-WN725N WIFI HAL层移植
1)RTL8188EUS_linux_v4.1.4_6773.20130222\android_ref_codes_JB_4.2\rea
ltek_wifi_SDK_for_android_JB_4.2_拷贝到
android-4.2.2_r1\hardware目录,解压改名为realtek android-4.2.2_r1\hardware\libhardware_legacy\wifi\Android.mk中
LOCAL_SRC_FILES += wifi/wifi.c
改为
ifeq ($(BOARD_WIFI_VENDOR), realtek)
LOCAL_SRC_FILES += ../realtek/wlan/libhardware_legacy/wifi/wifi_realtek.c
else
LOCAL_SRC_FILES += wifi/wifi.c
Endif
2)针对界面无法打开Wifi问题,为方便调试,修改为手动加载卸载驱动: 让wifi_load_driver,rmmod直接返回0(成功)。
int wifi_load_driver()
{
return 0;
}
static int rmmod(const char *modname)开发运维一体化
{
return 0;
}
操作3:wpa_supplicant层移植。
1)备份原有源码android-4.2.2_r1\external\wpa_supplicant_8,
复制
rtl8188EUS_linux_v4.1.4_6773.20130222\wpa_supplicant_hostapd\wpa_supplicant _8_jb_4.2_rtw_r8680.到android-4.2.2_r1\external
解压并更名为wpa_supplicant_8
2)wpa_supplicant_8\wpa_fig中加入以下配置:CONFIG_DRIVER_WEXT=y
CONFIG_DRIVER_NL80211=y
#CONFIG_P2P=y
#CONFIG_AP=y
改为
CONFIG_P2P=n
CONFIG_AP=n
然后:
fig .config
此时重新编译wpa_supllicant
3)运行wpa_supllicant时应有
….
drivers:
wext = Linux wireless extensions (generic)
nl80211 = Linux nl80211/cfg80211
…
操作3:wpa_supplicant运行调试。
1)运行wpa_supplicant -Dwext -iwlan0 -c/data/misc/wifi/f -dd -B 无反应
# ps后没发现wpa_supplicant
笔式数字万用表使用strace 调试,
strace wpa_supplicant -Dwext -iwlan0 -c/data/misc/wifi/f -dd –B 发现:
mkdir("wlan0", 0770) = -1 EACCES (Permission denied) write(2, "mkdir[ctrl_interface]", 21mkdir[ctrl_interface]) = 21
write(2, ": ", 2: ) = 2
write(2, "Permission denied", 17Permission denied) = 17
ls /data/system 查看是否有目录wpa_supplicant,并确保读写权限,所有人,所属组为Wifi。
mkdir /data/system/wpa_supplicant
chmod 660 /data/system/wpa_supplicant
chown 1010 /data/system/wpa_supplicant
chgrp 1010 /data/system/wpa_supplicant
问题二:f 配置问题。
投注系统
运行wpa_supplicant -Dwext -iwlan0 -c/data/misc/wifi/f -dd –B 依旧提示:
mkdir("wlan0", 0770) = -1 EACCES (Permission denied) write(2, "mkdir[ctrl_interface]", 21mkdir[ctrl_interface]) = 21
write(2, ": ", 2: ) = 2
write(2, "Permission denied", 17Permission denied) = 17
vi /etc/wifi/f
ctrl_interface=wlan0(android标准)
改为
ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi (Unix标准)
问题三:不能启动supplicant。
提示:E/WifiStateMachine(442): Failed to start supplicant!
经调试,发现错误发生在:
android-4.2.2_r1\hardware\realtek\wlan\libhardware_legacy\wifi\wifi_realtek.c中wifi_start_supplicant的
if (p2p_supported && wifi_ifname(SECONDARY) == NULL)
android-4.2.2_r1\external\wpa_supplicant_8\wpa_supplicant\Makefile中
#peng-- CFLAGS += -DANDROID -DANDROID_P2P -DREALTEK_WIFI_VENDOR
-DCONFIG_ANDROID_4_2_PERSISTENT_IOT
改为
CFLAGS += -DANDROID -DREALTEK_WIFI_VENDOR
-DCONFIG_ANDROID_4_2_PERSISTENT_IOT
改完后运行logcat提示
I/wpa_supplicant(1744): Successfully initialized wpa_supplicant
ps 可以看到
1157 1010 0:00 wpa_supplicant -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant
此时运行wpa_cli -p/data/system/wpa_supplicant -iwlan0
会进入
Interactive mode
> status
saw1wpa_state=DISCONNECTED
电子喇叭
address=08:57:00:98:6b:31
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=0 BSSID=00:00:00:00:00:00 SSID=
> scan
OK
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=
> [ 71.550000] ==> rtl8188e_iol_efuse_patch
[ 71.825000] RTL871X: nolinked power save leave
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE