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

Android 4.2調試RT3070 WiFi模塊

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

周一

1.PC Ubuntu上測試該WiFi模塊
  得出兩個結果,Ubuntu 12.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 <[email protected]> Date: Thu Dec 26 10:59:28 2013 +0800 change fw path   commit 742c1b56346de3f1ea79b59aae688c5d8cf30561 Author: kangear <[email protected]> Date: Wed Dec 25 16:29:52 2013 +0800 更新的ifname 和if2name的位置和名字   commit 1334bbcffc59321fee262d5ca3970a5208a85da6 Author: ybk <[email protected]> Date: Wed Dec 25 13:08:03 2013 +0800 add module_param ifname if2name   commit 35bed3ef00ed8ff38238d18a3895f05fc490d7be Author: ybk <[email protected]> Date: Tue Dec 24 14:39:11 2013 +0800 Fix: Supplicant not running, cannot connect   commit ed54e07e671c903e0cf73691d185ad43240c0a33 Author: ybk <[email protected]> Date: Tue Dec 24 14:23:55 2013 +0800 v1.0 succeed cmd   commit 7c0d98a75ab0df239c0defc4f09a27b13d9fd801 Author: ybk <[email protected]> Date: Tue Dec 24 14:18:49 2013 +0800

相關文件下載

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2014年資料/3月/4日/Android 4.2調試RT3070 WiFi模塊

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

今天的主要參考文檔:
1.《 WIFI模塊RT3070的ARM Linux移植 》 http://www.linuxidc.com/Linux/2014-03/97630.htm
2.《Android WIFI Ralink RT3070開發記錄 》 http://www.linuxidc.com/Linux/2014-03/97631.htm

周二

情況並不容樂觀,險些要放棄,因為回頭想想我還沒有為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。

Copyright © Linux教程網 All Rights Reserved