일부 장치에서 Wi-Fi P2P("Wifi Direct"라고도 함)가 작동하도록 하려고 합니다. 내 목표는 그들이 "그룹 소유자"(즉, 액세스 포인트 역할)가 되도록 하는 것입니다. 그러나 다른 시스템에서는 매우 다른 결과를 얻습니다. 저는 다양한 하드웨어 장치에 대해 이야기하고 있지만생각하다내 질문은 Linux 기반입니다.
저는 Pi 4B에서 Raspberry Pi OS를 사용하여 성공했습니다. 그러나 아랍어를 실행하는 Banana Pi에서 동일한 명령을 시도하면 매우 다른 결과가 나타납니다. 하지만 궁극적인 질문은 시스템 수준이라고 생각해서 여기에 질문을 하게 되었습니다.
RPi OS에서 작동하는 방법은 다음과 같습니다(device_name은 /etc/wpa_supplicant/wpa_supplicant.conf에 설정됨).
wpa_cli p2p_group_add
ifconfig p2p-wlan0-0 192.168.0.34 metmask 255.255.0.0
dnsmasq -i p2p-wlan0-0 -F192.168.0.40,192.168.0.250 -p0 -z
wpa_cli set p2p_go_intent 15
ifconfig wlan0 down
wpa_cli wps_pbc
여기에서 Android 기기에서 연결하면 작동하고 DHCP 응답을 받습니다. 불행히도 로깅이 많지 않아 다른 것과 비교할 수 없습니다. 또한 시행착오를 거쳐 넷마스크가 255.255.255.0이면 이 방법이 작동하지 않는다는 것을 확인했습니다! ? ! ? 이상하지만 어쨌든.
내 Banana Pi(Raspbian, Ubuntu 및 Armbian 등 여러 운영 체제가 있음)에서 동일한 명령 순서를 시도하면 몇 가지 차이점을 발견합니다. 먼저 wlan0을 제거하면 그 이후에는 아무것도 작동하지 않습니다. 따라서 그대로 두면 "wpa_cli p2p_find"를 실행하지 않으면 광고가 시작되지 않습니다. 또는 "wpa_cli p2p_listen". 내 생각엔 좀 이상하긴 하지만 어쨌든. 그러나 여기서는 Android 기기가 네트워크를 찾아 부팅하지만 협상이 완료되지 않고 DHCP 임대가 제공되지 않습니다. 로그(RPiOS보다 Armbian에서 더 좋음)에는 "P2P-DEVICE-FOUND, P2P-PROV-DISC-PBC-REQ" 및 "P2P-GO-NEG-REQUEST" 시퀀스가 표시되지만 그 이후에는 아무것도 없습니다.
어쨌든 저는 다양한 변형, 다양한 커널, 다양한 OS 버전 등을 시도했습니다.가능한내 바나나 파이에 하드웨어 문제가 있지만 왜 이런 일이 발생하는지 잘 모르겠습니다. Wi-Fi는 일반적으로 괜찮고 P2P는 드라이버가 지원한다고 말하는 새로운 프레임 유형일 뿐이라고 생각합니다(brcmfmac 사용).
NetworkManager와의 상호 작용도 이상할 수 있지만 NetworkManager를 끌 수 없으며 wpa_cli는 여전히 작동합니다. 이전에 syslog에서 P2P 그룹을 활성화했을 때 syslog에 다음과 같은 메시지가 표시되었습니다.
wpa_supplicant: p2p-wlan0-0: interface state UNINITIALIZED->ENABLED
wpa_supplicant: p2p-wlan0-0: AP-ENABLED
wpa_supplicant: p2p-wlan0-0: CTRL-EVENT_CONNECTED
wpa_supplicant: P2P-GROUP-STARTED p2p-wlan0-0 GO .....
wpa_supplicant: bus: Register group object....
NetworkManager: <warn> device (p2p-dev-wlan0): P2P: WPA supplicant notified a group start but we are not trying to connect! Ignoring the event
wpa_supplicant: p2p-wlan0-0: interface state ENABLED->DISABLED
wpa_supplicant: p2p-wlan0-0: AP-DISABLED
wpa_supplicant: p2p-wlan0-0: CTRL-EVENT-DISCONNECTED
이것이 정상인지는 모르겠지만(RPi 4는 이 수준에서 문서화되지 않았기 때문에) AP 모드를 활성화한 후에는 비활성화되는 것 같습니다. 다만, 그룹 오너이므로 AP 모드로 유지하면 될 것 같습니다. 이 이벤트를 무시하는 NetworkManager가 이상한 동작을 일으킬지는 모르겠습니다. 이러한 상호 작용이 어떻게 진행되어야 하는지 잘 모르겠습니다.
또한 기본 경로 설정과 같은 다양한 변형을 시도했지만 소용이 없었습니다. 누구든지 어디로 가야할지 제안해 주시면 매우 감사하겠습니다. 불행하게도 제가 현재 갖고 있는 유일한 Linux 시스템은 Pi뿐이므로 일반 PC에서도 이 기능을 사용해 볼 수 없습니다.
또한 모든 레이어가 어떻게 함께 작동하는지 잘 모르고 특히 Wi-Fi P2P에 관한 좋은 문서가 없기 때문에 더 낮은 수준(iw 등을 사용하여)에서 무언가를 시도할 수 있는지도 모르겠습니다. 어떤 제안이라도 감사하겠습니다.
또한 NetworkManager를 종료하려고 시도했지만 그렇게 할 때마다 wpa_cli가 완전히 실패하는 것 같습니다.
답변1
그래서 답은 꽤 간단하다는 것이 밝혀졌습니다. NetworkManager를 닫아야 합니다. 그러나 NetworkManager를 닫을 때 wpa_supplicant에 대한 프로필을 지정해야 합니다(예 supplicant.conf
: ).그리고파일에는 다음 줄이 포함되어 있습니다.
ctrl_interface=/run/wpa_supplicant
나는 이것에 대해 많이 알지 못하므로 이 디렉토리가 배포판 전용인지는 알 수 없습니다.
그런 다음 wpa_supplicant를 다음과 같이 시작합니다(저는 에 넣었습니다 rc.local
).
nohup wpa_supplicant -i wlan0 -c /path/to/supplicant.conf &
그러면 NetworkManager가 그룹을 종료하지 않고도 Wifi Direct/WiFi P2P 명령을 실행할 수 있습니다.