사용할 수 없습니다FRITZ!WLAN USB 메모리 스틱 N내 Raspberry Pi 1B를 내 무선 네트워크에 연결합니다. 몇 가지 문제가 보이지만 근본 원인을 찾아 제거할 수 없습니다. 이 문제는 Raspbery Pi 3B에서 재현될 수 있습니다.
부팅 프로세스가 끝나면 무선 네트워크를 사용할 수 없으며 네트워크 장치가 나타나지만 ifconfig
IP 주소는 없습니다. iwconfig
보고서
wlan0 IEEE 802.11abgn ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off
수동 수리(작동)
ifup wlan0
다음을 사용하여 wlan0을 수동으로 시작하면
wpa_supplicant[854]: Successfully initialized wpa_supplicant
dhclient: Internet Systems Consortium DHCP Client 4.3.1
dhclient: DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 8
wpa_supplicant[855]: wlan0: Associated with xx:xx:xx:xx:xx:xx
wpa_supplicant[855]: wlan0: WPA: Key negotiation completed with xx:xx:xx:xx:xx:xx [PTK=CCMP GTK=CCMP]
[...]
wpa_supplicant[855]: wlan0: CTRL-EVENT-CONNECTED - Connection to xx:xx:xx:xx:xx:xx completed [id=0 id_str=]
dhcpcd[485]: wlan0: carrier acquired
wpa_supplicant[855]: wlan0: CTRL-EVENT-REGDOM-CHANGE init=COUNTRY_IE type=COUNTRY alpha2=DE
dhcpcd[485]: wlan0: adding address xxxx::xxxx:xxxx:xxxx:xxxx
dhcpcd[485]: wlan0: IAID 43:0d:1f:fd
dhcpcd[485]: wlan0: rebinding lease of xxx.xxx.x.xx
dhcpcd[485]: wlan0: soliciting an IPv6 router
dhclient: DHCPREQUEST on wlan0 to 255.255.255.255 port 67
dhclient: bound to xxx.xxx.x.xx -- renewal in 335050 seconds.
그러나 (헤드리스) 시스템이 감독 없이 시작되고 연결되기를 원합니다.
가설
아마도 문제는 펌웨어를 로드한 후 USB 스틱이 USB ID를 변경했다는 것일까요?
시스템 로그idVendor=057c 및 idProduct=를 사용하여 부팅 프로세스 초기(t=4.2s)에서 스틱이 인식되었음을 알려줍니다.84ff. 그 직후(t=5.3s) "FRITZ! WLAN selfinstall 1.00 PQ:0 ANSI:0 CCS" 레이블이 있는 SCSI CD-ROM이 감지되었습니다. 나는 스틱 자체가 기계가 일부 USB 칩 펌웨어를 로드할 수 있도록 드라이버를 제공한다고 생각합니다.
t=12초에서 t=15.5초 사이에 _wpa_supplicant_가 네트워크 장치를 시작하려고 시도하지만 실패합니다.
wpa_supplicant[264]: Successfully initialized wpa_supplicant
wpa_supplicant[264]: Could not read interface wlan0 flags: No such device
wpa_supplicant[264]: nl80211: Driver does not support authentication/association or connect commands
wpa_supplicant[264]: Could not read interface wlan0 flags: No such device
wpa_supplicant[264]: WEXT: Could not set interface 'wlan0' UP
wpa_supplicant[264]: wlan0: Failed to initialize driver interface networking[198]: Configuring network interfaces...wpa_supplicant: /sbin/wpa_supplicant daemon failed to start
networking[198]: run-parts: /etc/network/if-pre-up.d/wpasupplicant exited with return code 1
networking[198]: Failed to bring up wlan0.
networking[198]: done.
오랜 시간(t=30초) 후에 USB 장치의 연결이 끊어졌다가 다시 연결되어 idVendor=057c, idProduct=가 표시됩니다.8401. 곧(t=34.2s),DHCPCD다시 시도했지만 네트워크에 연결할 수 없습니다.
dhcpcd[484]: wlan0: adding address xxxx::xxxx:xxxx:xxxx:xxxx
dhcpcd[484]: wlan0: waiting for carrier
kernel: [ 35.199371] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
khcpcd[484]: wlan0: carrier acquired
dhcpcd[484]: wlan0: IAID 43:0d:1f:fd
dhcpcd[484]: wlan0: carrier lost
dhcpcd[484]: wlan0: deleting address xxxx::xxxx:xxxx:xxxx:xxxx
왜 실패했나요? 나는 올바른 생각을 생각할 수 없습니다.
조용히 앉아라(소용없어)
내 대체 솔루션 설정을 시도했습니다. ifup wlan0
호출해 보겠습니다.체계제공하다. 쉘 스크립트를 가능한 한 늦게 시작하려면 /etc/systemd/system/fritz.wlan.service를 작성하십시오.
[Unit]
Description=Fritz WLAN Stick N
After=ntp.target multi-user.target
[Service]
Type=oneshot
ExecStartPre=/bin/sleep 5
ExecStart=/usr/local/bin/fritz.wlan.sh
[Install]
WantedBy=multi-user.target
및 쉘 스크립트 /usr/local/bin/fritz.wlan.sh:
#!/bin/sh
/bin/sleep 660
iwconfig 2>&1 | grep ESSID:\"xxx > /dev/null || ifup wlan0 2>&1 >> /var/log/fritz.wlan.log
이것은 성공으로 이어지지 않습니다. 이 스크립트는 multi-user.target 직후에 시작됩니다.시스템 로그장치가 부팅되고 DHCP 임대를 받았지만 얼마 지나지 않아 커널이 장치의 인증을 해제하기로 결정하여 전체 연결이 해제되었음을 알려줍니다.
kernel: [ 717.685006] wlan0: deauthenticating from e0:28:6d:37:3e:f5 by local choice (Reason: 3=DEAUTH_LEAVING)
dhcpcd[465]: wlan0: carrier lost
wpa_supplicant[1330]: wlan0: CTRL-EVENT-DISCONNECTED bssid=e0:28:6d:37:3e:f5 reason=3 locally_generated=1
흡입. 후에,체계초기화 프로세스가 완료되었음을 나타냅니다. 늦었 어. 그래도 좋아.
systemd[1]: Started Fritz WLAN Stick N.
systemd[1]: Startup finished in 3.332s (kernel) + 11min 54.388s (userspace) = 11min 57.720s.
ifup wlan0
시작할 때 문제가 있었던 것은 아닐까 ?체계대화형 루트 쉘을 통하지 않고?
해키(그러나 효과적인) 폴백
예약 된 일들/var/run/fritz.wlan은 재부팅 시 생성됩니다. 또 다른 cron 작업에는 파일이 존재하는지 확인하기 위해 1분마다 쉘 스크립트 검사가 있습니다. 항상 1분 지연을 유지하기 위해 이 스크립트는 /var/run.fritz.wlan.2를 터치하고 첫 번째 파일을 삭제하고 종료합니다. 두 번째 파일이 존재할 때 다음 분에 호출되면 스크립트가 호출되어 ifup wlan0
두 번째 파일을 삭제하고 종료됩니다.
개선 사항은 매분마다 스크립트를 트리거하는 크론 작업을 제거하는 것입니다.
그래도 문제를 완전히 이해하고 적절한 해결책을 찾고 싶습니다. 어떤 제안이 있으십니까?