En el proceso de tratar de diagnosticar los abandonos de WiFi, descubrí que el dominio regulador en mi interfaz WiFi está configurado en "mundo" (00), y cambiarlo a mi región (EE. UU.) Debería ayudar a solucionar el problema. Sin embargo, cada intento que hice para hacerlo ha sido ignorado.
Correr iw reg set US
no tiene un efecto 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)
Después de una búsqueda exhaustiva en Google sobre el tema, parece que lo que se supone que sucede es iw reg set
que el kernel emite un evento udev, lo que hace crda
que se ejecute y revele la información normativa relevante. Sin embargo, cerca de lo que puedo decir udevadm
, este evento nunca se emite. La ausencia de este evento es corroborada por el siguiente kluge que no funciona:
$ sudo iw reg set US; sudo COUNTRY=US crda
Failed to set regulatory domain: -7
El mensaje de error es de crda
. El kernel aceptará cambios regulatorios de WiFi solo si ha emitido un evento / solicitud de udev para ellos y espera una respuesta. Como crda
falla, el núcleo claramente no lo esperaba, lo que sugiere que no se emitió ningún evento udev.
La interfaz WiFi es una Intel 7265D; de quién es el controlador del núcleo iwlmvm
. Tengo crda
e wireless-regdb
instalado, y /etc/default/crda
contiene REGDOMAIN=US
. Eliminar y volver a cargar el iwlmvm
controlador no tiene ningún efecto.
¿Alguna sugerencia de qué más consultar?
dmesg
salida ni en ninguno de los registros que sugiera que se haya intentado cambiar el dominio regulador. El único mensaje en ese sentido aparece cuando el controlador se carga por primera vez, informando: "Región maestra DFS: sin establecer"Respuestas:
Intenté revisar este problema ayer, y todavía tengo el problema incluso con el kernel 4.6.3. La instalación manual de la última imagen de firmware tampoco ayudó. Sin embargo, probar
iw reg set US
una segunda computadora portátil con el mismo núcleo funcionó bien.La máquina problemática es una Thinkpad X1 Carbon (Gen.3), que tiene una tarjeta WiFi Intel 7265D; la máquina de trabajo es un Thinkpad T440p, que tiene un Intel 7260. Por lo tanto, concluyo que hay un error en el controlador o firmware 7265D.
Solución alterna
También descubrí una solución para el 7265D. Tenga en cuenta que esta es una solución alternativa y puede causar conflictos si / cuando se lanza una solución real:
sudo modprobe -r iwlmvm
cfg80211
módulo del núcleo, utilizando un parámetro del núcleo para forzar el dominio regulador (en este caso, 'EE. UU.'):sudo modprobe cfg80211 ieee80211_regdom=US
sudo modprobe iwlmvm
Ahora debería ver la interfaz WiFi configurada para el dominio regulador de EE. UU. (O lo que sea):
Actualización 2016.11.17: corregido en Kernel 4.8 Series
Revisé este problema nuevamente hoy por primera vez después de actualizar hace un par de semanas a un kernel 4.8.x, y descubrí que la interfaz WiFi ahora parece estar aceptando correctamente el dominio regulador. Esto sucedió en o antes de kernel rev 4.8.5.
fuente
Después de una investigación de código descubrí cuál es el problema:
El dispositivo Intel WiFi aparece como un dispositivo "autogestionado", por lo que no se le aplicará el iw reg set.
Todo lo que necesita hacer es configurar el
iwlwifi
parámetrolar_disable=1
:modprobe -r iwlwifi & modprobe iwlwifi lar_disable=1
echo "options iwlwifi lar_disable=1" >/etc/modprobe.d/iwlwifi.conf
fuente
/etc/modprobe.d/iwlwifi.conf
puede existir, por lo que es mejor agregarlo. O use en>>
lugar de>
oecho "options iwlwifi lar_disable=1" | sudo tee -a /etc/modprobe.d/iwlwifi.conf
(obtiene privilegios de root según sea necesario).fuente