Android WIFI Ralink RT3070开发记录


一、wifi基本架构 

1、开源代码移植部分(external目录下) wireless_tools、wpa_supplicant、wpa_supplicant_6(后两项已经移植过) 生成库libwpaclient.so和守护进程wpa_supplicant及iwconfig、iwlist等相关的测试程序 2、hardware/libhardware_legary/wifi/wifi.c是wifi管理库 生成libnetutils.so 同时会和wpa_supplicant守护进程通信 3、JNI部分
frameworks/base/core/jni/Android_net_wifi_Wifi.cpp 这个是无线connect、scan方面的调用
frameworks/base/core/jni/android_net_NetUtils.cpp 这个是管理网络方面的工具,如dhcp、route、net en/unable等 4、JAVA部分
frameworks/base/services/java/com/android/server/
frameworks/base/wifi/java/android/net/wifi/
frameworks/base/core/java/android/net 这个是管理网络的工具,调用第三条的第二个jni 5、WIFI Settings位于
packages/apps/Settings/src/com/android/settings/wifi/
6、WIFI驱动模块 rt5370sta.ko(此驱动兼容使用ralink的好多种设备驱动,具体可以查看USB_DEVICE_ID) wpa_supplicant通过wireless_ext 接口和驱动通信 7、WIFI 硬件模块 D-Link DWA-125 芯片:ralink RT3070 二、wifi开发记录 1、5370驱动编译安装及使用过程 set the "MODE = STA" in Makefile and chose the TARGET to Linux by set "TARGET = LINUX" set 'HAS_WPA_SUPPLICANT=y' and 'HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y' #wpa_supplicant -Dwext -iwlan0 -c wpa_supplicant.conf -d (-c这里需要指定下wpa_supplicant.conf的路径) wpa_supplicant.conf 内容: ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
network={
ssid="home"
scan_ssid=1
key_mgmt=WPA-PSK
psk="very secret passphrase"
} // 这个地方的大括号中的内容可在settings中点击选择某个ap后自动生成
#sudo su (android平台需要自己添加脚本编译,和这里写的有差异)
#make clean
#make
#make install
#modprobe rt5370sta
#ifconfig wlan0 up #iwconfig wlan0 #iwlist wlan0 scan 这时候已经可以扫描wi-fi网络了 下面是dhcpcd wlan0即可。 2、几个可执行程序:wpa_supplicant,wpa_cli等。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,可以使用wpa_cli来搜索、设置、和连接网络等,这两个可执行程序很重要 在android中主要是Settings这个属于system的进程调用的libhardware_legecy库中的wifi.c文件和wpa_supplicant通信,同时也调用了wpa_supplicant中提供的libwpa_client.so库,这两个进程间通过socket通信收发数据来得到当前状态,同时也是通过wifi.c来启动和停止init.rc中的wpa_supplicant进程。 dhcpcd用来自动获取ip。 iwconfig iwevent iwgetid iwlist iwpriv iwspy这几个是测试命令,可用来测试wifi当前的情况,以及scan ap等。 3、以上是命令测试过程,下面进行代码的修改部分说明(broadcom BCM7231) wpa_supplicant 和wpa_cli原生android2.3已经移植,但是没有wireless tool工具,需要将工具移植进来, 不过这些工具相对都比较容易移植,不再详述,下载源码位置如下 http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html。   然后从驱动开始修改起 1)修改5370驱动 设备名include/rtmp_def.h 修改两个宏定义从ra0修改为wlan0; LINUX_SRC=... (android的kernel位置)

ifeq($(PLATFORM),BCM7431)

LINUX_SRC= ${ANDROID_PATH}/kernel #修改path为你的android目录

endif

驱动编译后会生成两个文件:RT5370STA.ko 和RT2870STA.dat,后面

会看到需要拷贝这两个文件到系统中。

ioctl 驱动代码接口在os/linux/sta_ioctl.c 及 sta/sta_cfg.c中,如果遇到一些错误,一般在这里都能查找到.

2)把rt5370sta.ko拷贝到.../lib/modules目录中

                    include$(CLEAR_VARS)
                    LOCAL_MODULE := rt5370sta.ko
                    LOCAL_MODULE_TAGS:= user
                    LOCAL_MODULE_CLASS:= SHARED_LIBRARIES
                    LOCAL_MODULE_PATH:= $(TARGET_OUT_SHARED_LIBRARIES)/modules
                    LOCAL_SRC_FILES:= ${RT5370_PATH}/rt5370sta.ko    #PATH
                    include$(BUILD_PREBUILT)

3) 查看wifi.c文件ko路径及名字是否正确,若不正确需要修改正确

4) 修改init.rc文件

 

chmod 0771 /system/etc/wifi wifi wifi

chmod 0660 /system/etc/wifi/wpa_supplicant.conf

chown wifi wifi /system/etc/wifi/wpa_supplicant.conf

mkdir /data/misc/wifi 0771 wifi wifi

mkdir /data/misc/wifi/sockets 0771 wifi wifi

#wpa_supplicant socket

mkdir /data/system/ 0771 system system

mkdir /data/system/wpa_supplicant 0771 wifi wifi

mkdir /data/misc/dhcp 0771 system system

 

chmod 0777 /system/etc/dhcpcd/dhcpcd-run-hooks

chmod 0777 /data/misc/dhcp/

mountyaffs2 mtd@system /system ro remount

setprop wifi.interface wlan0

 

service wpa_supplicant /system/bin/wpa_supplicant -dd -Dwext -iwlan0 -c/system/etc/wifi/wpa_supplicant.conf

#group system wifi inet

disabled

oneshot

service dhcpcd_wlan0 /system/bin/dhcpcd wlan0 // 这里的service需要修改为dhcpcd_wlan0(android2.2 和2.3有差异,我这里是2.3),而不是dhcpcd!

group system dhcp

disabled

oneshot

  • 1
  • 2
  • 3
  • 4
  • 下一页

相关内容