No processo de tentar diagnosticar desistências de WiFi, descobri que o domínio regulatório na minha interface WiFi está definido como "mundo" (00) e alterá-lo para minha região (EUA) deve ajudar a corrigir o problema. No entanto, todas as tentativas que fiz foram ignoradas.
Correr iw reg set US
não tem efeito evidente:
$ 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)
Depois de pesquisar bastante sobre o assunto, parece que o que deveria acontecer é fazer iw reg set
com que o kernel emita um evento udev, o que faz crda
com que seja executado e expele as informações regulatórias relevantes. No entanto, quase como posso dizer udevadm
, esse evento nunca é emitido. A ausência deste evento é corroborada pelo seguinte kluge não funcionando:
$ sudo iw reg set US; sudo COUNTRY=US crda
Failed to set regulatory domain: -7
A mensagem de erro é de crda
. O kernel aceitará alterações regulatórias de WiFi apenas se tiver emitido um evento / solicitação do udev para eles e estiver esperando uma resposta. Como crda
falha, o kernel claramente não esperava por isso, sugerindo que nenhum evento udev foi emitido.
A interface WiFi é um Intel 7265D; cujo driver do kernel é iwlmvm
. Eu tenho crda
e wireless-regdb
instalado, e /etc/default/crda
contém REGDOMAIN=US
. Remover e recarregar o iwlmvm
driver não tem efeito.
Alguma sugestão do que mais deve ser verificado?
dmesg
saída ou em qualquer um dos logs que sugira que foi feita alguma tentativa de alterar o domínio regulatório. A única mensagem para esse efeito aparece quando o driver é carregado pela primeira vez, informando: "região mestre DFS: unset"Respostas:
Tentei revisar esse problema ontem e ainda tenho o problema, mesmo com o kernel 4.6.3. A instalação manual da imagem de firmware mais recente também não ajudou. No entanto, experimentar
iw reg set US
um segundo laptop executando o mesmo kernel funcionou bem.A máquina com problema é um Thinkpad X1 Carbon (Gen.3), que possui uma placa WiFi Intel 7265D; a máquina em funcionamento é um Thinkpad T440p, que possui um Intel 7260. Portanto, concluo que há um erro no driver ou firmware 7265D.
Gambiarra
Eu também descobri uma solução alternativa para o 7265D. Esteja ciente de que esta é uma solução alternativa e pode causar conflitos se / quando uma correção real for lançada:
sudo modprobe -r iwlmvm
cfg80211
módulo do kernel, usando um parâmetro do kernel para forçar o domínio regulador (neste caso, 'US'):sudo modprobe cfg80211 ieee80211_regdom=US
sudo modprobe iwlmvm
Agora você deve ver a interface WiFi configurada para o domínio regulatório dos EUA (ou qualquer outro):
Atualização 2016.11.17: corrigida no Kernel 4.8 Series
Verifiquei esse problema novamente hoje pela primeira vez, depois de atualizar algumas semanas atrás, para um kernel 4.8.x, e descobri que a interface WiFi agora parece estar aceitando corretamente o domínio regulador. Isso aconteceu no ou antes da versão 4.8.5 do kernel.
fonte
Após algumas pesquisas de código, descobri qual é o problema:
O dispositivo Intel WiFi aparece como um dispositivo "autônomo", portanto, o conjunto de registros iw não será aplicado a ele.
Tudo que você precisa fazer é definir o
iwlwifi
parâmetrolar_disable=1
:modprobe -r iwlwifi & modprobe iwlwifi lar_disable=1
echo "options iwlwifi lar_disable=1" >/etc/modprobe.d/iwlwifi.conf
fonte
/etc/modprobe.d/iwlwifi.conf
pode existir, portanto, é melhor anexar. Use em>>
vez de>
ouecho "options iwlwifi lar_disable=1" | sudo tee -a /etc/modprobe.d/iwlwifi.conf
(obtém privilégios de root, conforme necessário).fonte