您的位置:首页 > 移动开发 > Android开发

将RT2070USBwifi移植到android2.3…

2013-12-19 20:55 316 查看
将RT2070USBwifi移植到android2.3上!

调试方法(建议):----详细的截图和文字资料

一.
内核配置

1:Networking
supportWireless 如下图方式配配置:

[align=left][/align]

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
DriversUSB supportUSB Wireless Device Management
support

5.编译即可得到支持RT2070内核!因为wifi驱动对内核有依赖一定的先编译内核,在编译驱动!

二、驱动配置与编译

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

修改成

#ifdef RT30xx

if (IS_RT30xx(pAd))

{

if (!IS_RT3390(pAd))

RT30xx_Init(pAd);

}

#endif

#ifdef RT33xx

if (IS_RT30xx(pAd))

{

if (IS_RT3390(pAd))

RT33xx_Init(pAd);

}

#endif

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_mlan0 dgram 660 wifi wifi

oneshot

service dhcpcd /system/bin/logwrapper /system/bin/dhcpcd -d -B
mlan0

disabled

oneshot

调试结果:

1、在终端中我们能运用ifconfig mlan0 up能成功搜索到网络,并在setting中输入密码成功联网!

2、如果首次联网成功后,重启能自动连接!

不足与优化建议:

1.
在setting中关掉后在开启不能搜索到网络,可能是权限设置不对。

2.
可以自己另外自己编译wpa_supplicant,可能由他引起!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: