歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

Copyright © Linux教程網 All Rights Reserved