Android Oreo8.0 使用wpa_supplicant和wpa_cli(更新AndroidPie9.0)

使用wpa_cli關鍵是先啓動wpa_supplicant,而啓動wpa_supplicant關鍵是要指定好啓動參數,文件路徑要對。

 

  • 啓動WLAN

(1)加載驅動 
android系統需要先load driver。手動調試dirver ko的時候,先調用insmod命令加載指定的wifi驅動。 

再調用iwconfig可以看到驅動是否加載成功,如下,可以看到wlan0已經有了,則驅動加載成功。

# ifconfig -a

p2p0      Link encap:Ethernet  HWaddr b2:72:bf:d9:55:9f  Driver hif_pci
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3000
          RX bytes:0 TX bytes:0


wlan0     Link encap:Ethernet  HWaddr b0:72:bf:53:55:9f  Driver hif_pci
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3000
          RX bytes:0 TX bytes:0


lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope: Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 TX bytes:0


sit0      Link encap:IPv6-in-IPv4
          NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 TX bytes:0


eth0      Link encap:Ethernet  HWaddr 00:04:9f:05:58:c7  Driver fec
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 TX bytes:0

(2)打開wlan0 
            ifconfig wlan0 up

 

 

  • 啓動wpa_supplicant

命令如下:可以參考下自己init.xxx.rc是如何配置的,參數可能會不一樣。

/vendor/bin/hw/wpa_supplicant -d -B –iwlan0 –Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf 
 -C/data/misc/wifi/sockets

-i:指定網口; 

-D:指定驅動類型; 

-c:指定了wpa_supplicant的配置文件。

-C : ctrl_interface parameter 

配置文件/data/misc/wifi/wpa_supplicant.conf,-d參數是打開wpa_supplicant的打印。

這裏AndroidPie9.0 改變了wpa_supplicant.conf ctrl_interface 的路徑:

我這邊是改爲了/vendor/etc/wifi/wpa_supplicant.conf   和   /data/vendor/wifi/wpa/sockets


所以能正確啓動wpa_supplicant的關鍵就是這邊要指定正確的參數路徑。

然後確保wpa_supplicant已經運行起來了,可以ps -A | grep wpa看下。

console:/ # ps -A | grep wpa
wifi          4100     1   18316   4904 poll_schedule_timeout 0 S wpa_supplicant
 

  • 啓動wpa_cli
wpa_cli -i網口 -p socket所在路徑

例如像我剛纔那麼調用的話,則用下面命令啓動:

wpa_cli -iwlan0 -p /data/misc/wifi/sockets/

進入如下界面則已經可以正常調試了。

wpa_cli v2.0-devel-4.4.2_rtw_r12456.20141113_beta
Copyright (c) 2004-2013, Jouni Malinen <[email protected]> and contributors

This software may be distributed under the terms of the BSD license.
See README for more details.



Interactive mode

> 

如果一直顯示如果出現“Could not connect to wpa_supplicant - re-trying”,那表示 wpa_cli 不能和wpa_supplicant 建立 socket 連接,這時要檢查 wpa_supplicant 進程是否還在,還有socket所在路徑wlan0是否存在(在我的例子是/data/misc/wifi/sockets/wlan0)。

 

 

  • 使用wpa_cli 進行debug 

掃描ap

輸入scan命令

> scan
OK
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-SCAN-RESULTS 
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=0 BSSID=00:00:00:00:00:00 SSID=
> 

 

wpa_supplicant有“CTRL-EVENT-SCAN-RESULTS ”的回覆,則可以輸入scan_results可以看到掃描結果,如下。

 

> scan_results
bssid / frequency / signal level / flags / ssid
14:75:90:7b:9c:b2       5745    -52     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      TP-LINK_5G_9CB2
a0:63:91:45:9a:ed       5785    -63     [WPA2-PSK-CCMP][WPS][ESS]       LinuxBSPtest_5G
a4:6c:2a:54:03:d7       5765    -57     [WPA2-EAP-CCMP][ESS]    NXP
a4:6c:2a:54:03:db       5765    -58     [WPA-PSK-TKIP][WPA2-PSK-CCMP][ESS]      External-Internet
a4:6c:2a:54:03:df       5765    -58     [WPA2-EAP-CCMP][ESS]    Freescale
a4:6c:2a:54:03:d8       5765    -58     [WPA2-PSK-CCMP][ESS]    Hydra
d4:ee:07:50:a8:52       2447    -50     [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS]      Android_test

 

連接

 

從掃描結果選擇連接一個ap。

> add_network 
1
> set_network 1 ssid "HUAWEI G9 Youth"
OK
> set_network 1 key_mgmt WPA-PSK 
OK
> set_network 1 psk "xx123456"   
OK
> set_network 1 pairwise CCMP 
OK
> set_network 1 group CCMP   
OK
> set_network 1 proto WPA2
OK
> enable_network 1
OK
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-SCAN-RESULTS 
<3>WPS-AP-AVAILABLE 
<3>Trying to associate with d4:61:2e:a2:b9:e5 (SSID='HUAWEI G9 Youth' freq=2437 MHz)
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=5 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-STATE-CHANGE id=1 state=6 BSSID=00:00:00:00:00:00 SSID=HUAWEI G9 Youth
<3>Associated with d4:61:2e:a2:b9:e5
<3>CTRL-EVENT-STATE-CHANGE id=1 state=7 BSSID=d4:61:2e:a2:b9:e5 SSID=HUAWEI G9 Youth
<3>CTRL-EVENT-STATE-CHANGE id=1 state=8 BSSID=d4:61:2e:a2:b9:e5 SSID=HUAWEI G9 Youth
<3>WPA: Key negotiation completed with d4:61:2e:a2:b9:e5 [PTK=CCMP GTK=CCMP]
<3>CTRL-EVENT-CONNECTED - Connection to d4:61:2e:a2:b9:e5 completed (auth) [id=1 id_str=]
<3>CTRL-EVENT-STATE-CHANGE id=1 state=9 BSSID=d4:61:2e:a2:b9:e5 SSID=HUAWEI G9 Youth

 

步驟如下: 
(1)“add_network”,這裏返回網絡ID 爲 1。 
(2) 配置網絡的 SSID,執行 set_network 1 ssid AP 的 SSID。 
(3)配置網絡的加密方式和密碼。 
(4)啓動網絡,執行“enable_network 0”。 
(5)收到“CTRL-EVENT-CONNECTED”表示連接成功。

 

分配IP

此時已經連接上ap,dhcp分配一個IP即可。 

輸入 q 退出 wpa_cli,執行命令:dhcpcd wlan0 

此時已經可以ping通了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章