将RT2070USBwifi移植到android2.3…

将RT2070USBwifi移植到android2.3上!

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

一. 内核配置
1 :Networking support Wireless 如下图方式配配置 :

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,可能由他引起!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值