W trakcie próby zdiagnozowania porzucenia Wi-Fi odkryłem, że domena regulacyjna w moim interfejsie Wi-Fi jest ustawiona na „świat” (00), a zmiana jej na mój region (USA) powinna pomóc rozwiązać problem. Jednak każda próba, którą to zrobiłem, została zignorowana.
Bieganie iw reg set US
nie ma widocznego wpływu:
$ iw reg get
country 00: DFS-UNSET
(2402 - 2472 @ 40), (6, 20), (N/A)
(2457 - 2482 @ 40), (6, 20), (N/A), PASSIVE-SCAN
(2474 - 2494 @ 20), (6, 20), (N/A), NO-OFDM, PASSIVE-SCAN
(5170 - 5250 @ 160), (6, 20), (N/A), PASSIVE-SCAN
(5250 - 5330 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
(5490 - 5730 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
(5735 - 5835 @ 80), (6, 20), (N/A), PASSIVE-SCAN
(57240 - 63720 @ 2160), (N/A, 0), (N/A)
$ sudo iw reg set US
$ iw reg get
country 00: DFS-UNSET
(2402 - 2472 @ 40), (6, 20), (N/A)
(2457 - 2482 @ 40), (6, 20), (N/A), PASSIVE-SCAN
(2474 - 2494 @ 20), (6, 20), (N/A), NO-OFDM, PASSIVE-SCAN
(5170 - 5250 @ 160), (6, 20), (N/A), PASSIVE-SCAN
(5250 - 5330 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
(5490 - 5730 @ 160), (6, 20), (0 ms), DFS, PASSIVE-SCAN
(5735 - 5835 @ 80), (6, 20), (N/A), PASSIVE-SCAN
(57240 - 63720 @ 2160), (N/A, 0), (N/A)
Po obszernym Googlingu na ten temat wydaje się, że to, co powinno się wydarzyć, iw reg set
spowoduje, że jądro wyemituje zdarzenie udev, które spowoduje crda
wykonanie i wykasowanie odpowiednich informacji prawnych. Jednak, jak mogę powiedzieć udevadm
, to wydarzenie nigdy nie jest emitowane. Brak tego wydarzenia jest potwierdzony przez następujący kluge, który nie działa:
$ sudo iw reg set US; sudo COUNTRY=US crda
Failed to set regulatory domain: -7
Komunikat o błędzie pochodzi z crda
. Jądro zaakceptuje zmiany przepisów WiFi tylko, jeśli wyemitowało dla nich zdarzenie / żądanie udev i oczekuje odpowiedzi. Ponieważ się crda
nie udaje, jądro najwyraźniej się tego nie spodziewało, co sugeruje, że nie było emitowane żadne zdarzenie udev.
Interfejs WiFi to Intel 7265D; którego sterownikiem jest jądro iwlmvm
. Mam crda
i wireless-regdb
zainstalowałem i /etc/default/crda
zawiera REGDOMAIN=US
. Usunięcie i ponowne załadowanie iwlmvm
sterownika nie ma wpływu.
Jakieś sugestie co jeszcze sprawdzić?
dmesg
danych wyjściowych ani żadnego z dzienników, które sugerowałyby, że podjęto próbę zmiany domeny regulacyjnej. Jedyny komunikat w tej sprawie pojawia się, gdy kierowca jest najpierw załadowane, raportowania: „DFS mistrz region: Wyłączony”Odpowiedzi:
Próbowałem wczoraj wrócić do tego problemu i nadal mam problem nawet z jądrem 4.6.3. Ręczna instalacja najnowszego obrazu oprogramowania układowego również nie pomogła. Jednak wypróbowanie
iw reg set US
drugiego laptopa z tym samym jądrem działało dobrze.Problemem jest Thinkpad X1 Carbon (Gen.3), który ma kartę Intel 7265D WiFi; działającą maszyną jest Thinkpad T440p, który ma Intel 7260. W związku z tym dochodzę do wniosku, że w sterowniku lub oprogramowaniu sprzętowym 7265D występuje błąd.
Obejście
Odkryłem również obejście dla 7265D. Należy pamiętać, że jest to obejście problemu i może powodować konflikty, jeśli / kiedy zostanie opublikowana poprawka:
sudo modprobe -r iwlmvm
cfg80211
moduł jądra, używając parametru jądra do wymuszenia domeny regulacyjnej (w tym przypadku „US”):sudo modprobe cfg80211 ieee80211_regdom=US
sudo modprobe iwlmvm
Powinieneś teraz zobaczyć interfejs WiFi skonfigurowany dla amerykańskiej (lub jakiejkolwiek) domeny regulacyjnej:
Aktualizacja 2016.11.17: Naprawiono w jądrze serii 4.8
Po raz pierwszy sprawdziłem ten problem po aktualizacji kilka tygodni temu do jądra 4.8.x i odkryłem, że interfejs WiFi wydaje się teraz poprawnie akceptować domenę regulacyjną. Stało się to w lub przed wersją jądra 4.8.5.
źródło
Po kilku badaniach kodu dowiedziałem się, na czym polega problem:
Urządzenie Intel Wi-Fi pojawia się jako „samo-zmodowane” urządzenie, więc zestaw I-Reg nie zostanie do niego zastosowany.
Wszystko, co musisz zrobić, to ustawić
iwlwifi
parametrlar_disable=1
:modprobe -r iwlwifi & modprobe iwlwifi lar_disable=1
echo "options iwlwifi lar_disable=1" >/etc/modprobe.d/iwlwifi.conf
źródło
/etc/modprobe.d/iwlwifi.conf
może istnieć, dlatego lepiej go dołączyć. Albo użyj>>
zamiast>
lubecho "options iwlwifi lar_disable=1" | sudo tee -a /etc/modprobe.d/iwlwifi.conf
(w razie potrzeby otrzymuje uprawnienia roota).źródło