WiFi: `iw reg set US` non ha alcun effetto


13

Nel tentativo di diagnosticare gli abbandoni WiFi, ho scoperto che il dominio normativo sulla mia interfaccia WiFi è impostato su "world" (00) e che cambiarlo nella mia regione (US) dovrebbe aiutare a risolvere il problema. Tuttavia, ogni tentativo che ho fatto per farlo è stato ignorato.

La corsa iw reg set USnon ha effetti evidenti:

$ 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)

Dopo un'approfondita ricerca su Google sull'argomento, sembra che ciò che dovrebbe accadere è che iw reg setil kernel emetta un evento udev, il che provoca crdal'esecuzione e la tosse delle informazioni normative pertinenti. Tuttavia, quasi come posso dire udevadm, questo evento non viene mai emesso. L'assenza di questo evento è confermata dal seguente Kluge che non funziona:

$ sudo iw reg set US; sudo COUNTRY=US crda
Failed to set regulatory domain: -7

Il messaggio di errore proviene da crda. Il kernel accetterà le modifiche normative WiFi solo se ha emesso un evento / richiesta udev per loro e si aspetta una risposta. Dato che crdafallisce, il kernel chiaramente non se lo aspettava, suggerendo che non è stato emesso alcun evento udev.

L'interfaccia WiFi è un Intel 7265D; il cui driver del kernel è iwlmvm. Ho crdae wireless-regdbinstallato, e /etc/default/crdacontiene REGDOMAIN=US. La rimozione e il ricaricamento del iwlmvmdriver non ha alcun effetto.

Qualche suggerimento su cosa controllare di più?


1
Hai controllato il registro del kernel per vedere se sono state apportate modifiche? Sto ottenendo lo stesso output che hai su stdout, ma i miei registri dicono che il dominio normativo è stato effettivamente aggiornato.
Saiarcot895,

Non riesco a trovare nulla dmesgnell'output o nei registri per suggerire che è stato fatto qualsiasi tentativo di cambiare il dominio normativo. L'unico messaggio in tal senso appare quando il driver viene caricato per la prima volta, riportando: "Regione master DFS: unset"
ewhac

1
La tua soluzione suona bene. Spostalo in una risposta anziché in una modifica nella domanda. Quindi accetti anche la tua risposta.
roaima,

Risposte:


11

Ho provato a rivedere questo problema ieri, e ho ancora il problema anche con il kernel 4.6.3. Anche l'installazione manuale dell'immagine firmware più recente non ha aiutato. Tuttavia, provare iw reg set USsu un secondo laptop con lo stesso kernel ha funzionato bene.

La macchina problematica è un Thinkpad X1 Carbon (Gen.3), che ha una scheda WiFi Intel 7265D; la macchina funzionante è un Thinkpad T440p, che ha un Intel 7260. Concludo quindi che c'è un bug nel driver o nel firmware 7265D.

Soluzione

Ho anche scoperto una soluzione alternativa per il 7265D. Tieni presente che questa è una soluzione alternativa e può causare conflitti se / quando viene rilasciata una correzione effettiva:

  • Rimuovere tutti i driver del kernel WiFi e i moduli dipendenti:
    sudo modprobe -r iwlmvm
  • Installa il cfg80211modulo del kernel, usando un parametro del kernel per forzare il dominio normativo (in questo caso, 'US'):
    sudo modprobe cfg80211 ieee80211_regdom=US
  • Reinstalla i driver del kernel WiFi:
    sudo modprobe iwlmvm

Ora dovresti vedere l'interfaccia WiFi configurata per il dominio normativo USA (o qualunque altra cosa):

$ 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)

Aggiornamento 2016.11.17: risolto in Kernel 4.8 Series

Ho verificato nuovamente questo problema oggi per la prima volta dopo aver aggiornato un paio di settimane fa un kernel 4.8.xe ho scoperto che l'interfaccia WiFi sembra ora accettare correttamente il dominio normativo. Questo è accaduto nel o prima del kernel rev 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

Questo non ha funzionato per il mio Intel Wireless 7265D, ci sono alcuni thread su Internet che menzionano che l'impostazione 00-World è hardcoded nel firmware o hardware bloccato.
CMCDragonkai,

6

Dopo alcune ricerche sul codice ho scoperto qual è il problema:

Il dispositivo WiFi Intel appare come un dispositivo "autogestito", quindi il set iw reg non verrà applicato ad esso.

Tutto quello che devi fare è impostare il iwlwifiparametro lar_disable=1:

  1. O manualmente: modprobe -r iwlwifi & modprobe iwlwifi lar_disable=1
  2. Automaticamente: echo "options iwlwifi lar_disable=1" >/etc/modprobe.d/iwlwifi.conf

Grazie; Ci proverò. A proposito, che cos'è "LAR"? È quella cosa da evitare radar per la banda 5GHz?
ewhac,

Il file /etc/modprobe.d/iwlwifi.confpotrebbe esistere, quindi è meglio aggiungere. Utilizzare >>invece di >o echo "options iwlwifi lar_disable=1" | sudo tee -a /etc/modprobe.d/iwlwifi.conf(ottiene i privilegi di root in base alle esigenze).
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"

Si prega di fare una descrizione del codice presentato. Aiuta gli utenti a imparare a pescare, non solo dare loro un pesce.
NotAnUnixNazi

So che non risponde alla domanda e Jan potrebbe avere ragione. Ma è un suggerimento nella giusta direzione della consapevolezza dei file sottostanti utilizzati. Inoltre non ho quella cartella /lib/crda/regulatory.bin
JackGrinningCat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.