热度 12
2012-5-14 09:21
1262 次阅读|
0 个评论
三星coretx-A8开发板/友坚开发板S5PV210开发板 RT2070/RT3070 USBwifi在android2.3下的调试方法 测试者:longtian 测试日期:2012-3-30 测试平台:UT-S5PV210 软件平台:android2.3 问题描述: 将RT2070USBwifi移植到android2.3上! 调试方法(建议):----详细的截图和文字资料 深圳市友坚恒天科技有限公司http://www.urbetter.com/main.asp 销售热线:0755-86038900 / 26050792转802 QQ:1732094339 Email: jennifer_zhang@urbetter.com 手机:13418792487 张顺香 一. 内核配置 1:Networking supportWireless 如下图方式配配置: 2. Device Drivers Network device support Wireless Lan如下图方式配配置: Wireless LAN 目录里IEEE 802.11 for Host AP (Prism2/2.5/3 andWEP/TKIP/CCMP)都选择上,目的是打开CONFIG_WIRELESS_EXT=y CONFIG_WEXT_PRIV=y 3. Device Drivers Generic Driver Option如下图方式配配置 4. Device DriversUSB supportUSB Wireless Device Management support 5.编译即可得到支持RT2070内核! 二、驱动配置与编译 1. 根目录Makefile修改 CHIPSET = 5370修改为3070 OSABL 为 NO RT28xx_DIR = $(shell pwd) 修改为 RT28xx_DIR = /home/android//home/android/2011_0407_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.2_DPO 3070驱动所有位置 屏蔽#PLATFORM = PC,打开PLATFORM = SMDK 修改交叉编译环境和内核所在代码路径 ifeq ($(PLATFORM),SMDK) #LINUX_SRC = /home/bhushan/itcenter/may28/linux-2.6-samsung #CROSS_COMPILE = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux- LINUX_SRC = /home/android/android2.3.4_kernel_2.6.35_dev CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-endif 2. os\linux\目录下的config.mk文件修改 HAS_APCLI=y HAS_WPA_SUPPLICANT=y HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y HAS_AUTO_CH_SELECT_ENHANCE=y 3. 驱动代码修改 1) chips\rtmp_chip.c的VOID RtmpChipOpsHook函数中将 #ifdef RT30xx if (IS_RT30xx(pAd)) { if (IS_RT3390(pAd)) RT33xx_Init(pAd); else RT30xx_Init(pAd); } #endif /* RT30xx */ 修改成 #ifdef RT30xx if (IS_RT30xx(pAd)) { if (!IS_RT3390(pAd)) RT30xx_Init(pAd); } #endif /* RT30xx */ #ifdef RT33xx if (IS_RT30xx(pAd)) { if (IS_RT3390(pAd)) RT33xx_Init(pAd); } #endif /* RT33xx */ 2) include\os\rt_linux.h中申明修改 //#define RTUSB_URB_ALLOC_BUFFER(_dev, _size, _dma) usb_alloc_coherent(_dev, _size, GFP_ATOMIC, _dma) //#define RTUSB_URB_FREE_BUFFER(_dev, _size, _addr, _dma) usb_free_coherent(_dev, _size, _addr, _dma) #define RTUSB_URB_ALLOC_BUFFER(pUsb_Dev,BufSize, pDma_addr) usb_alloc_coherent(pUsb_Dev,BufSize, GFP_ATOMIC, pDma_addr) #define RTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr) usb_free_coherent(pUsb_Dev, BufSize,pTransferBuf, Dma_addr) linux\rt_linux.c 3) linux\rt_linux.c中int RtmpOSNetDevAttach函数添加如下代码 strcpy( pNetDev-name, "mlan0"); 也可以修改:修改ralink的wifi的驱动,更名ra0为mlan0 include\rtmp_def.h #define INF_MAIN_DEV_NAME "mlan" #define INF_MBSSID_DEV_NAME "mlan” (改os/linux/Makefile.6 MOD_NAME = wlan 将文件中所有rt$(CHIPSET)sta-objs 替换成RT2070,然后编译,最后生成RT2070.ko。没调试) 注:此处所用的名字要与上层使用的节点名保持一致,你也可以修改在此说明一下上层主要有这几处用到节点名: \frameworks\base\wifi\java\android\net\wifi\WifiStateTracker.java (在WifiStateTracker.java中要将tiwlan0改成mlan0,该处的mlan0是供dhcpcd服务获得ip,dns之类的信息) init.rc启动wpa_supplicant守护进程里面与启动dhcpcd服务 (wpa_supplicant与dhcpcd都是表示该进程应用的对象) dhcpcd服务配置文件,dhcpcd.conf里面 init.rc设置setprop wifi.interface "mlan0" 4) os\linux\rt_main_dev.c 打开MODULE_LICENSE("GPL");的屏蔽; (最新版驱动包肯不需修改) int MainVirtualIF_close函数直接返回0;(解决不能反复关闭wifi问题) 5) make,即可在os/linux的目录下找到rt3070sta.ko 6) 在common下的rtusb_dev_id.c的数组里面rtusb_dev_id = "/data/system/wpa_supplicant"; 该路径为wifi设备接口所放置 static const char SUPP_CONFIG_TEMPLATE = "/data/misc/wifi/wpa_supplicant.conf"; 系统中真实wpa_supplicant.conf在系统中所放置的目录(注:该目录与wpa_supplicant服务所指定的文件路径需一致) 3. wap_supplicant.conf与dhcpcd.conf文件修改 wap_supplicant.conf文件: 1) 将ctrl_interface修改问ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi(注:该路径需与wifi.c中的IFACE_DIR 对应 chown wifi wifi /data/misc/wifi chown wifi wifi /data/misc/wifi/wpa_supplicant.conf #cp system/etc/wifi/wpa_supplicant.conf ./data/misc/wifi/ mkdir /data/misc/dhcp 0777 dhcp dhcp chown dhcp dhcp /data/misc/dhcp chmod 0770 /data/misc/dhcp setprop wifi.interface "mlan0" setprop wlan.driver.status "ok" 6. 在init.rc里面增加wifi的服务,如下: service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant \ -Dwext -imlan0 -c/data/misc/wifi/wpa_supplicant.conf -dd group wifi inet socket wpa_wlan0 dgram 660 wifi wifi oneshot service dhcpcd /system/bin/logwrapper /system/bin/dhcpcd -d -B mlan0 disabled oneshot 调试结果: 1、在终端中我们能运用ifconfig mlan0 up能成功搜索到网络,并在setting中输入密码成功联网! 2、如果首次联网成功后,重启能自动连接! 不足与优化建议: 在setting中关掉后在开启不能搜索到网络,可能是权限设置不对。 可以自己另外自己编译wpa_supplicant,可能由他引起!