Android와 Linux 간에 Wi-Fi 직접 연결을 설정하려고 합니다. rtl8188au를 사용하고 있습니다.
wpa_supplicant를 사용하여 Wi-Fi에 직접 연결하는 방법에 대한 몇 가지 팁을 찾아서 wpa_supplicant v2.0을 얻었습니다. 이것이 제가 Wi-Fi-Direct를 위해 한 일입니다.
1.Compiled rtl8288au driver, activated nl80211.
2.Compiled wpa_supplicant and wpa_cli for nl80211.
3.Run wpa_supplicant on linux, with option -Dnl80211. success.
4.Set ip address for wlan0.
5.Run wpa_cli, and try to connect to android device.
한동안 연결이 성공했지만 얼마 지나지 않아 연결이 끊어졌습니다.
이것은 wpa_cli 로그입니다.
wpa_cli -p /var/run/wpa_supplicant
> p2p_find
OK
<3>P2P-DEVICE-FOUND e6:fa:ed:8a:5e:e8 p2p_dev_addr=e6:fa:ed:8a:5e:e8
pri_dev_type=10-0050F204-5 name='[Phone] Kulong' config_methods=0x188
dev_capab=0x25 group_capab=0x0
>
>
> p2p_connect e6:fa:ed:8a:5e:e8 pbc
OK
<3>P2P-FIND-STOPPED
<3>P2P-DEVICE-FOUND e6:fa:ed:8a:5e:e8 p2p_dev_addr=e6:fa:ed:8a:5e:e8
pri_dev_type=10-0050F204-5 name='[Phone] Kulong' config_methods=0x80
dev_capab=0x25 group_capab=0x8
<3>P2P-GO-NEG-SUCCESS
<3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=
<3>CTRL-EVENT-CONNECTED - Connection to 38:1d:d9:d4:db:70 completed (auth)
[id=0 id_str=]
<3>CTRL-EVENT-STATE-CHANGE id=0 state=9 BSSID=38:1d:d9:d4:db:70 SSID=DIRECT-4J
<3>CTRL-EVENT-EAP-STARTED e6:fa:ed:8a:de:e8
<3>CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1
<3>CTRL-EVENT-EAP-PROPOSED-METHOD vendor=14122 method=254
<3>WPS-REG-SUCCESS e6:fa:ed:8a:de:e8 2d96823c-8a30-5dd0-a267-e3adae8b1564
<3>P2P-GROUP-FORMATION-SUCCESS
<3>P2P-GROUP-STARTED wlan0 GO ssid="DIRECT-4J" freq=2412
passphrase="xZbKV6sF" go_dev_addr=38:1d:d9:d4:db:70
<3>WPS-SUCCESS
<3>CTRL-EVENT-EAP-FAILURE e6:fa:ed:8a:de:e8
<3>AP-STA-CONNECTED e6:fa:ed:8a:de:e8 p2p_dev_addr=e6:fa:ed:8a:5e:e8
<3>AP-STA-DISCONNECTED e6:fa:ed:8a:de:e8 p2p_dev_addr=e6:fa:ed:8a:5e:e8
<3>P2P-DEVICE-LOST p2p_dev_addr=e6:fa:ed:8a:5e:e8
무슨 문제라도 있는 걸까요?
그렇다면 wifi-direct 연결을 완료하려면 어떻게 해야 합니까?
답변1
wpa_supplicant뿐만 아니라 iwpriv,hostapd,dhcpd도 필요합니다.
이것이 Wi-Fi 직접 연결을 위해 수행하는 작업입니다.
장치 모드(Linux는 Android에 대한 연결을 요청함)
ifconfig wlan0 192.168.1.15 up
iwpriv wlan0 p2p_set enable=0
iwpriv wlan0 p2p_get status
iwpriv wlan0 p2p_get role
iwpriv wlan0 p2p_set enable=1
iwpriv wlan0 p2p_set intent=1
iwpriv wlan0 p2p_get status
iwpriv wlan0 p2p_set op_ch=6
iwpriv wlan0 p2p_set ssid=DIRECT-RT
iwpriv wlan0 p2p_set setDN="RTL8192CU"
iwlist wlan0 scan
iwpriv wlan0 p2p_get2 wpsCM=<MAC_ADDRESS_OF_TARGET_DEVICE>
iwpriv wlan0 p2p_get2 devN=<MAC_ADDRESS_OF_TARGET_DEVICE>
iwpriv wlan0 p2p_set prov_disc=<MAC_ADDRESS_OF_TARGET_DEVICE>
iwpriv wlan0 p2p_set got_wpsinfo=3
iwpriv wlan0 p2p_set nego=<MAC_ADDRESS_OF_TARGET_DEVICE>
wpa_supplicant -i wlan0 -c ./wpa_0_8.conf -B
wpa_cli wps_pbc <MAC_ADDRESS_OF_TARGET_DEVICE>
GO 모드(Android가 Linux에 대한 연결을 요청함)
iwpriv wlan0 p2p_set enable=3
iwpriv wlan0 p2p_get status
iwpriv wlan0 p2p_get role
iwpriv wlan0 p2p_set intent=1
iwpriv wlan0 p2p_set op_ch=6
iwpriv wlan0 p2p_set ssid=DIRECT-RT
./hostapd -B ./p2p_hostapd.conf
<<<<< Request connection from Android >>>>
iwpriv wlan0 p2p_get peer_deva
iwpriv wlan0 p2p_get req_cm
iwpriv wlan0 p2p_set got_wpsinfo=3
iwpriv wlan0 p2p_get peer_ifa
./hostapd_cli wps_pbc any
ifconfig wlan0 192.168.1.254
dhcpd
하지만 Wi-Fi 직접 연결에는 몇 가지 필수 조건이 있습니다.
- 무선 드라이버가 nl80211을 지원해야 합니다.
- wpa_supplicant,hostapd를 MAKE할 때 "nl80211" 옵션을 구성합니다.
- dhcpd 구성 파일. (dhcpd.conf, dhcpd.lease)
- wpa_supplicant, Hostapd 구성(conf 파일)
이 기사가 Linux와 Android 사이에서 wifi-direct를 사용하려는 사람들에게 도움이 되기를 바랍니다.