三星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[]里面增加{USB_DEVICE(0x148F,0x2070)},不然会造成加载驱动的时候识别不到设备,
因为USB驱动识别是根据idVendor和idProduct来识别设备的,2070的设备号为idVendor=148f, idProduct=2070。
7) 将rt3070sta.ko拷贝到目录/system/wifi/下,将RT2870STA.dat拷贝到/system/Wireless/RT2870STA/目录下
三、文件系统支持修改
1. wap_supplicant不需要编译,android会带该工具 ,本人调试用wap_supplicant而非wap_supplicant_6
2. wifi移植所需在android系统修改的一些文件
打开目录文件hardware/libhardware_legacy/wifi/wifi.c
#define WIFI_DRIVER_MODULE_PATH "/system/wifi/rt3070sta.ko"
该目录为wifi驱动所放置的路径
#define WIFI_TEST_INTERFACE "mlan0"
该名字为在data/ data/system/wpa_supplicant /下wifi设备名称
static const char IFACE_DIR[] = "/data/system/wpa_supplicant";
该路径为wifi设备接口所放置
static const char SUPP_CONFIG_TEMPLATE[] = "/system/etc/wifi/wpa_supplicant.conf";
wpa_supplicant.conf模板所放置的目录
static const char SUPP_CONFIG_FILE[] = "/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[]所指路径一致)
2) 该文件中的example等配置可以删除
3) 将该文件中的update_config=1打开,该开关为需要android界面去保存对ssid的wifi密码等值
Dhcpcd.conf文件:
在该文件中添加如下项,并将多余的配置项删除
interface mlan0 option subnet_mask, routers,domain_name_servers
将wap_supplicant.conf拷贝到/ system/etc/wifi/与/data/misc/wifi/下个一份,将Dhcpcd.conf文件拷贝到/system/etc/dhcpcd/下 (在文中没找到的文件夹就新建,建议在android2.3.4_GB_dev\out\target\product\smdkv210这下面修改,省事。。)
4.增加调试信息,android已经移植adb我们可以直接# logcat来查看调试信息,系统调试信息输出支持修改:
wpa_supplicant默认信息显示的等级为SG_INFO,为了输出更多信息,可修改:
修改external/wpa_supplicant/common.c
把int wpa_debug_level = MSG_INFO;
改为:int wpa_debug_level = MSG_DEBUG;
修改external/wpa_supplicant/common.h
把宏定义#define wpa_printf(level, ...)中的if ((level) >= MSG_INFO)
改为if ((level) >= MSG_DEBUG)
5. 在init.rc里面增加wifi相关文件的权限设定,如下
mkdir /data/misc/wifi 0770 wifi wifi
mkdir /data/misc/wifi/sockets 0770 wifi wifi
chmod 0770 /data/misc/wifi
chmod 0660 /data/misc/wifi/wpa_supplicant.conf #与wifi.c中的SUPP_CONFIG_FILE[]对应
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、如果首次联网成功后,重启能自动连接!
不足与优化建议:
文章评论(0条评论)
登录后参与讨论