Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 4.2上調試RT3070 WiFi模塊

Android 4.2上調試RT3070 WiFi模塊

編輯:關於Android編程

Android4.2調試RT3070 WiFi模塊


歷時4天,終於有所收獲,今天來總結一下。

周一

1.PC ubuntu上測試該WiFi模塊
  得出兩個結果,ubuntu12.10是支持這個WiFi模塊的驅動是rt2x00usb和rt2x00lib等等,產品id:148f:3070。同樣也帶來了一些困惑怎麼會那麼多模塊呢?Rtl8192cu的就一個模塊,這到Android上怎麼辦呢?了解到標准linux的驅動和各個廠商的驅動是不同步的,前者要之後後者一些,於是我繼續做了以下的事。
  
拆WiFi模塊了解具體型號
對於型號有點模糊,了解具體型號最好的方法就是拆機,直接看芯片上的型號,這樣一點也不會模糊了,於是動手拆了該WiFi模塊,看到芯片的型號如下:
Ralink RT3070L TPKY371F9 1234PT 確定其真正型號為RT3070
2.找官方最新驅動
找到這裡是!號外:這個型號叫Ralink(雷凌)現在已經並入了MTK(聯發科)。
RT3070驅動下載地址:http://www.mediatek.com/_en/07_downloads/01_windows.php?sn=501
3.編譯驅動模塊
編譯過程很曲折,還好保留了過程(這裡),用GIT記錄了,並記錄了每次改動。這裡看一下git log:
commit 2f3f683eec43ce123017b5302002e14e01367a2b Author: ybk Date: Thu Dec 26 10:59:28 2013 +0800 change fw path
commit 742c1b56346de3f1ea79b59aae688c5d8cf30561 Author: kangear Date: Wed Dec 25 16:29:52 2013 +0800 更新的ifname 和if2name的位置和名字
commit 1334bbcffc59321fee262d5ca3970a5208a85da6 Author: ybk Date: Wed Dec 25 13:08:03 2013 +0800 add module_param ifname if2name
commit 35bed3ef00ed8ff38238d18a3895f05fc490d7be Author: ybk Date: Tue Dec 24 14:39:11 2013 +0800 Fix: Supplicant not running, cannot connect
commit ed54e07e671c903e0cf73691d185ad43240c0a33 Author: ybk Date: Tue Dec 24 14:23:55 2013 +0800 v1.0 succeed cmd
commit 7c0d98a75ab0df239c0defc4f09a27b13d9fd801 Author: ybk Date: Tue Dec 24 14:18:49 2013 +0800 0.0 version
今天的主要參考文檔:
1.《 wifi模塊rt3070的arm+linux移植 》
2.《android wifi ralink rt3070開發記錄》

周二

情況並不容樂觀,險些要放棄,因為回頭想想我還沒有為Android編譯過WiFi驅動模塊,我潛意識裡覺得我編譯的驅動模塊一定是缺少什麼東西的。至少現在驅動模塊可以編譯過,插入內核模塊正常,但是我通過busybox ifconfig並沒有看到wlan或者其它。
1.找到網絡接口
調試Android驅動最重要的是確定問題在哪一層,一層一場的來搞定。層層是耦合性很松的,可以單獨調試某層。現在是網絡接口並沒有看到,問題是在哪呢?看這個文章《wifi模塊rt3070的arm+linux移植 》看到ifconfig後還可以跟-a參數,於是趕緊查查這個是什麼意思,是顯示所有的網絡接口,使用了一下,果真出現了ra0。著實興奮,然後就是改接口名字為wlan0,這個屬於驅動編譯決定的。
2.手動啟動並掃描AP.
(1).#busybox ifocnfig -a # 查看所有網絡接口
(2). # busybox ifconfig wlan0 up # 使用該網卡
(3). # iwlist wlan0 scan # 搜索AP 並記下ESSID這裡以ChinaNet為例。
(4). # iwconfig wlan0 essid ChinaNet #連接無密碼的ESSID,為了測試專門設置一個無密碼的。
(5). # dhcp wlan0 # 獲取ip地址
(6). # busybox ifconfig #再看網卡狀態,可以看到已經成功獲取ip地址了。
(7). # ping 115.29.210.26 #先ping百度ip.(最好ping百度,Google不建議)
(8). # ping www.baidu.com #ping百度域名 成功。


周三

這天先做了很多雜事,把固件路徑規劃一下,這個還是和驅動編譯有關,改了重新編譯驅動就可以了。重點是手動啟動wpa_supplicant。wpa_supplicant具體錯誤是:
Supplicant not running, cannot connect.
1.手動啟動wpa_supplicant
  當驅動模塊沒有問題的時候,我就強行上它上路了,但是從Settings中打開的時候,模塊拋入成功-》wpa_supplicant啟動失敗,所以要找找啟動不起來的原因了。
  遇到了兩個疑惑,看到的例子是使用的wext協議啟動的,而目前Android BSP上帶的幾個都是用nl80211啟動的。通過嘗試RT3070適合的是wext協議。wpa_supplicant正常啟動後,啟動端會有響應,可以從/proc/kmsg中看出。最終定下來的啟動參數為:
service rt_supplicant /system/bin/wpa_supplicant \
    -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf
    #-Dnl80211 -iwlan0 -puse_p2p_group_interface=1 -e/data/misc/wifi/entropy.bin
    #   we will start as root and wpa_supplicant will switch to user wifi
    #   after setting up the capabilities required for WEXT
    #   user wifi
    #   group wifi inet keystore
    class main
    socket wpa_wlan0 dgram 660 wifi wifi
    disabled
  Oneshot


添加到init.rk30board.rc中,然後以在hardware/libhardware_legacy/wifi/wifi.c中判斷如果是RT3070就啟動rt_supplicant。以區別用其它協議啟動的wpa_supplicant。
意外上路
這次再次將wifi模塊上路,從Settings中直接打開看流程,很意外,上路正常,順利搜索到AP上。連接網絡測試,一切OK。


周四

今天就剩下整理代碼和文檔了,這兩項可並不是小事。整理代碼包括規范代碼,和去除添加的調試信息。記錄文檔是因為記憶是會消失的,但是記錄的文字可不會。所以記錄文檔還要好好的記錄。
類型:RT3070
模塊:rt3070sta.ko
參數:ifname=wlan0 if2name=p2p0
協議:wext
固件:/etc/firmware/RT2870STA.dat

最後的優化,關於AP模式還是有一點問題的,可以在接下來的時間解決它。具體的錯誤是:Unable to open connection to supplicant on "/data/misc/wifi/sockets/p2p0": No such file or directory


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved