WiFi: `iw reg set US` nie ma wpływu

13

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 USnie 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 setspowoduje, że jądro wyemituje zdarzenie udev, które spowoduje crdawykonanie 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ę crdanie 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 crdai wireless-regdbzainstalowałem i /etc/default/crdazawiera REGDOMAIN=US. Usunięcie i ponowne załadowanie iwlmvmsterownika nie ma wpływu.

Jakieś sugestie co jeszcze sprawdzić?

ewhac
źródło
1
Czy sprawdziłeś dziennik jądra, aby zobaczyć, czy jakieś zmiany zostały wprowadzone? Otrzymuję takie same wyniki, jak na stdout, ale moje logi mówią, że domena regulacyjna została rzeczywiście zaktualizowana.
saiarcot895
Nie mogę znaleźć żadnych dmesgdanych 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”
ewhac
1
Twoje rozwiązanie brzmi dobrze. Proszę przenieść go do odpowiedzi zamiast do edycji pytania. Następnie możesz zaakceptować własną odpowiedź.
roaima

Odpowiedzi:

11

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 USdrugiego 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:

  • Usuń wszystkie sterowniki jądra WiFi i moduły zależne:
    sudo modprobe -r iwlmvm
  • Zainstaluj cfg80211moduł jądra, używając parametru jądra do wymuszenia domeny regulacyjnej (w tym przypadku „US”):
    sudo modprobe cfg80211 ieee80211_regdom=US
  • Ponownie zainstaluj sterowniki jądra WiFi:
    sudo modprobe iwlmvm

Powinieneś teraz zobaczyć interfejs WiFi skonfigurowany dla amerykańskiej (lub jakiejkolwiek) domeny regulacyjnej:

$ iw reg get
country US: DFS-FCC
    (2402 - 2472 @ 40), (N/A, 30), (N/A)
    (5170 - 5250 @ 80), (N/A, 17), (N/A)
    (5250 - 5330 @ 80), (N/A, 23), (0 ms), DFS
    (5490 - 5730 @ 160), (N/A, 23), (0 ms), DFS
    (5735 - 5835 @ 80), (N/A, 30), (N/A)
    (57240 - 63720 @ 2160), (N/A, 40), (N/A)

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.

$ iw reg get
global
country 00: DFS-UNSET
    (2402 - 2472 @ 40), (6, 20), (N/A)
    (2457 - 2482 @ 20), (6, 20), (N/A), AUTO-BW, PASSIVE-SCAN
    (2474 - 2494 @ 20), (6, 20), (N/A), NO-OFDM, PASSIVE-SCAN
    (5170 - 5250 @ 80), (6, 20), (N/A), AUTO-BW, PASSIVE-SCAN
    (5250 - 5330 @ 80), (6, 20), (0 ms), DFS, AUTO-BW, 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)

phy#0 (self-managed)
country US: DFS-UNSET
    (2402 - 2482 @ 40), (6, 22), (N/A), AUTO-BW, NO-HT40PLUS, NO-80MHZ, NO-160MHZ
    (5170 - 5250 @ 80), (6, 22), (N/A), NO-OUTDOOR, AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5250 - 5330 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5490 - 5730 @ 80), (6, 22), (0 ms), DFS, AUTO-BW, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5735 - 5815 @ 80), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40PLUS, NO-160MHZ, PASSIVE-SCAN
    (5815 - 5835 @ 20), (6, 22), (N/A), AUTO-BW, IR-CONCURRENT, NO-HT40MINUS, NO-HT40PLUS, NO-80MHZ, NO-160MHZ, PASSIVE-SCAN
ewhac
źródło
To nie zadziałało dla mojego Intel Wireless 7265D, w Internecie jest kilka wątków, w których wspomina się, że ustawienie 00-Świat jest zakodowane na stałe w oprogramowaniu sprzętowym lub zablokowanym sprzętowo.
CMCDragonkai
6

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ć iwlwifiparametr lar_disable=1:

  1. Albo ręcznie: modprobe -r iwlwifi & modprobe iwlwifi lar_disable=1
  2. Automatycznie: echo "options iwlwifi lar_disable=1" >/etc/modprobe.d/iwlwifi.conf
Philip
źródło
Dziękuję Ci; Spróbuję tego. BTW, co to jest „LAR”? Czy to jest rzecz unikania radaru dla pasma 5GHz?
ewhac
Plik /etc/modprobe.d/iwlwifi.confmoże istnieć, dlatego lepiej go dołączyć. Albo użyj >>zamiast >lub echo "options iwlwifi lar_disable=1" | sudo tee -a /etc/modprobe.d/iwlwifi.conf(w razie potrzeby otrzymuje uprawnienia roota).
Lucas
1
@ewhac unix.stackexchange.com/a/385590/3285
Evan Carroll
-2
 #!/bin/bash

echo "hello root"
git clone git://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git

echo ""
cd wireless-regdb/
sleep 3

echo ""
gedit db.txt
sleep 1

echo ""
make

echo ""
sudo rm /lib/crda/regulatory.bin

echo ""
sudo cp regulatory.bin /lib/crda/regulatory.bin

echo ""
sudo cp $USER.key.pub.pem /lib/crda/pubkeys/

echo ""
sudo iw reg get

echo ""
ip link set wlan1 down
sleep 3

echo "Boosting Tx Power To 30 Fixed"
iw dev wlan1 set txpower fixed 30mbm
sleep 3

echo "starting wlan1"
ip link set wlan1 up
sleep 2

echo "Checking wlan1 TxPower"
iw dev
sleep 3

echo "Checking Regulatory Domain"
iw reg get
sleep 2

echo "Good Luck"
Joel Cruz
źródło
Proszę opisać przedstawiony kod. Pomóż użytkownikom nauczyć się łowić ryby, a nie tylko dać im rybę.
NotAnUnixNazi
Wiem, że to nie odpowiada na pytanie i Jan może mieć rację. Ale jest to wskazówka we właściwym kierunku świadomości wykorzystywanych plików. Poza tym nie mam tego folderu /lib/crda/regulatory.bin
JackGrinningCat