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ć?


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

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

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


-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"

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.