Iwlwifi

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Iwlwifi and the translation is 25% complete.
Outdated translations are marked like this.


Resources

iwlwifi es el driver para los chips actuales de Intel.

Para que funcione es necesario configurar algunas opciones del kernel. El controlador soporta 802.11a/b/g/n/ac (dependiendo del dispositivo), por lo que debe habilitarse IEEE 802.11.

IEEE 802.11

Activate at least cfg80211 (CONFIG_CFG80211) and mac80211 (CONFIG_MAC80211). For details see IEEE 802.11 section of Wi-Fi artice.

Controlador de dispositivo iwlwifi

Usa este driver para chips Intel actuales. Configúralo como módulo de esta forma: <M>. También es necesaria la opción DVM o MVM correcta, acorde a la columna Module de la tabla de firmware.

KERNEL linux-4.9
Device Drivers  --->
 
        [*] Network device support  --->
 
        --- Network device support
        [*]   Wireless LAN  --->
 
            --- Wireless LAN
            [ ]   ADMtek devices
            [ ]   Atheros/Qualcomm devices
            [ ]   Atmel devices
            [ ]   Broadcom devices
            [ ]   Cisco devices
            [*]   Intel devices
            < >     Intel PRO/Wireless 2100 Network Connection
            < >     Intel PRO/Wireless 2200BG and 2915ABG Network Connection
            < >     Intel Wireless WiFi 4965AGN (iwl4965)
            < >     Intel PRO/Wireless 3945ABG/BG Network Connection (iwl3945)
            <M>     Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi)
            <M>       Intel Wireless WiFi DVM Firmware support
            <M>       Intel Wireless WiFi MVM Firmware support
            [ ]       Enable broadcast filtering (NEW)
            [ ]       Enable runtime power management mode for PCIe devices (NEW)
                      Debugging Options  --->
            [ ]   Intersil devices
            [ ]   Marvell devices
            [ ]   MediaTek devices
            [ ]   Ralink devices
            [ ]   Realtek devices
            [ ]   Redpine Signals Inc devices
            [ ]   STMicroelectronics devices
            [ ]   Texas Instrument devices
            [ ]   ZyDAS devices
            < >   Simulated radio testing tool for mac80211
            < >   Wireless RNDIS USB support
Importante
En caso de compilar el driver dentro del kernel (<*>) en lugar de como módulo (<M>), también el firmware debe ser compilado dentro del kernel. Vea la sección When using built-in configuration.
Luego de los cambios en la configuración del kernel, no olvide recompilarlo.

Abajo se muestra cómo se puede comprobar las opciones seleccionadas una vez reconstruido el núcleo y reiniciado con él:

user $zgrep 'IWLWIFI\|IWLDVM\|IWLMVM' /proc/config.gz
Nota
El soporte para el pseudofichero /proc/config.gz se habilita a través de la característica Kernel/IKCONFIG_support.

Firmware

También es necesario firmware individual para los dispositivos como se muestra en esta tabla. Está disponible en el paquete sys-kernel/linux-firmware y en los paquetes para dispositivos específicos sys-firmware/iwlxxxx-*ucode.

Upstream Intel instructions recommend[1] adding all iwlwifi ucode to the kernel image. This is recommended for convenience, however it will bloat the kernel slightly.

root #emerge --ask sys-kernel/linux-firmware

Compilando el driver dentro del kernel

En caso de compilar el driver dentro del kernel (<*>) en lugar de como módulo (<M>), también el firmware debe ser compilado dentro del kernel.

KERNEL linux-4.1
Device Drivers  --->
 
            Generic Driver Options  --->
 
            -*- Userspace firmware loading support
            [ ]   Include in-kernel firmware blobs in kernel binary
            (iwlwifi-xxxx.ucode) External firmware blobs to build into the kernel binary
            (/lib64/firmware) Firmware blobs root directory
            [ ] Fallback user-helper invocation for firmware loading

En este caso reemplace iwlwifi-xxxx.ucode con el nombre exacto del firmware. Parece que es necesario cierta atención para FW_LOADER_USER_HELPER_FALLBACK.

Optional: savedconfig

The savedconfig USE flag could be set for Linux firmware in order to avoid unneeded stuff in /lib/firmware/.

As for example the Intel® Centrino® Advanced-N 6205 needs iwlwifi-6000g2a-ucode while anything else may be commented out or deleted.

ARCHIVO /etc/portage/savedconfig/sys-kernel/linux-firmwareTake care that version number is removed
iwlwifi-6000g2a-5.ucode
iwlwifi-6000g2a-6.ucode

In order to not lose these settings on next firmware update the version number needs to be removed:

user $cd /etc/portage/savedconfig/sys-kernel
root #mv linux-firmware{-20200316,}

Nombres de los dispositivos de red

Advertencia
This section is obsolete. See Udev#Optional: Disable_or_override_predictable_network_interface_naming for updated instructions.

Los nombres de dispositivos de red eth0, eth1, etc. tal y como los suministra el núcleo podrían cambiar en el arranque (ver dmesg) por la regla udev /lib/udev/rules.d/80-net-name-slot.rules.

Para mantener el nombrado clásico, se puede sobrescribir esta regla con un fichero vacío con el mismo nombre en el directorio /etc/udev/rules.d:

root #touch /etc/udev/rules.d/80-net-name-slot.rules


Testing

Después de reiniciar con el nuevo kernel o de cargar los módulos, Se puede chequear la disponibilidad del dispositivo usando los siguientes métodos:

Sistema de archivos /sys

Get the device name by listing the /sys/class/net directory contents using ls -al or the tree command (provided by the app-text/tree package):

user $tree /sys/class/net
/sys/class/net/
├── enp2s14 -> ../../devices/pci0000:00/0000:00:1e.0/0000:02:0e.0/net/enp2s14
├── lo -> ../../devices/virtual/net/lo
├── sit0 -> ../../devices/virtual/net/sit0
└── wlp8s0 -> ../../devices/pci0000:00/0000:00:1c.0/0000:08:00.0/net/wlp8s0

Orden ip

Para obtener el nombre del dispositivo y verificar que la tarjeta inalámbrica es detectada, ejecute el siguiente ip comando:

user $ip addr
3: wlan0:   ...

Orden ifconfig

El comando ifconfig es provisto por el paquete sys-apps/net-tools. Usa ifconfig -a para listar todas las tarjetas de red detectadas, incluso si aún no están activas o habilitadas:

user $ifconfig -a
wlan0     ...

Una tarjeta de red puede ser activada de la siguiente forma:

root #ifconfig -v wlan0 up
SIOCSIFFLAGS: Operation not possible due to RF-kill
WARNING: at least one error occurred. (-1)

En este ejemplo, la habilitación de la tarjeta de red falló debido a que el estado RF-kill (radio frequency kill state) está habilitado (usualmente para evitar el consumo de energía y no conectar por accidente a una red inalámbrica).

Orden iw

Si el controlador de la tarjeta de red soporta nl80211, entonces el comando iw del paquete net-wireless/iw puede mostrar las tarjetas de red inalámbricas:

root #iw dev
   phy#0
	Interface wlan0
		ifindex 4
		type managed

modprobe y modinfo

modprobe no debe devolver nada:

root #modprobe iwlwifi

Puede obtenerse más información sobre el módulo con modinfo iwlwifi.

user $modinfo iwlwifi

lspci

lspci debe mostrar iwlwifi tanto Kernel driver in use: como Kernel modules:.

root #lspci -k
xx:xx.x Network controller: Intel Corporation Wireless xxxx
        Kernel driver in use: iwlwifi
        Kernel modules: iwlwifi

El identificador xx:xx.x será útil para buscar información específica con dmesg.

dmesg

Comprobar la salida de dmesg. Reemplazar xx:xx.x por el identificador que se muestra en lspci y wlan por el nombre de la interfaz de red.

user $dmesg | grep -i -E 'xx:xx.x|wlan|iwl|80211'

Resolución de problemas

No se ha cargado el núcleo

Comprobar que se ha cargado el núcleo correcto. A continuación se muestra cómo se puede hacer esto (depende del la característica IKCONFIG):

user $zgrep CONFIG_IWL /proc/config.gz

Problemas de firmware

  • Es necesario configurar el kernel para que cargue blobs binarios en sistemas que utilizan udev o systemd. En este caso el firmware de la tarjeta inalámbrica es el firmware que debe ser cargado. Más información sobre esta forma de configurar el kernel se puede encontrar en el siguiente hilo de los foros de Gentoo: FW_LOADER_USER_HELPER_FALLBACK.

Wireless no funciona

KERNEL
Device Drivers  --->
    [*] PCI support  --->
        [*] Network device support  --->
        [*]   Message Signaled Interrupts (MSI and MSI-X)

No internet connection

If you can connect to an access point, but still can't connect to any server or get any connection to the internet it might be worth a try to disable 802.11n and/or enable software encryption. You can pass the 11n_disable=1 or 11n_disable=8 and/or swcrypto=1 option to the iwlwifi module. In order to pass the option automatically on module load create the file /etc/modprobe.d/iwlwifi.conf as follows:

ARCHIVO /etc/modprobe.d/iwlwifi.confDisabling 802.11n, enabling software crypto
options iwlwifi 11n_disable=1 swcrypto=1
Nota
In newer kernels, inspected as of 5.3.7, setting 11n_disable=1 (or masked with 0x01) will result in 802.11ac being disabled. This will limit the device to a maximum of 54Mbit throughput.

"Microcode SW error detected. Restarting 0x0" message in kernel logs

root #dmesg | grep iwlwifi
(... redacted ...)
[ 5711.326985] iwlwifi 0000:28:00.0: Microcode SW error detected. Restarting 0x0.
[ 5711.326987] iwlwifi 0000:28:00.0: Start IWL Error Log Dump:
[ 5711.326990] iwlwifi 0000:28:00.0: Transport status: 0x0000004A, valid: 6
[ 5711.326992] iwlwifi 0000:28:00.0: Loaded firmware version: 71.058653f6.0 ty-a0-gf-a0-71.ucode
[ 5711.326993] iwlwifi 0000:28:00.0: 0x00000071 | NMI_INTERRUPT_UMAC_FATAL    
[ 5711.326995] iwlwifi 0000:28:00.0: 0x00008210 | trm_hw_status0
[ 5711.326998] iwlwifi 0000:28:00.0: 0x00000000 | trm_hw_status1
[ 5711.327001] iwlwifi 0000:28:00.0: 0x004DAEA2 | branchlink2
[ 5711.327003] iwlwifi 0000:28:00.0: 0x004D9974 | interruptlink1
[ 5711.327004] iwlwifi 0000:28:00.0: 0x004D9974 | interruptlink2
[ 5711.327006] iwlwifi 0000:28:00.0: 0x0000C314 | data1
[ 5711.327008] iwlwifi 0000:28:00.0: 0x00000010 | data2
[ 5711.327009] iwlwifi 0000:28:00.0: 0x00000000 | data3
(... redacted ...)
[ 5711.329587] iwlwifi 0000:28:00.0: ieee80211 phy0: Hardware restart was requested

This indicates that a severe error has been encountered by the WiFi adapter's micro-controller which led it to be reset. Consequences might be network drop outs and/and severe slow downs even after the connection to the AP has been restored. The root cause might be difficult to point out (platform own radio noise/buggy firmware/etc) however one of the very first things to try, even if the power management has been disabled for the iwlwifi module, is to prevent the WiFi adapter PCIe link to go in power save mode. This is accomplished by changing the power_scheme value used by the iwlmvm module to 1 (active):

ARCHIVO /etc/modprobe.d/iwlmvm.confChanging power_scheme to 'active'
options iwlmvm power_scheme=1

Amongst additional countermeasures suggested on https://wireless.wiki.kernel.org/en/users/drivers/iwlwifi disabling 40 MHz channels usage on the 2.4GHz band might also help:

ARCHIVO /etc/modprobe.d/cfg80211.confTurning off 40 MHz channels usage (2.4 Ghz band)
options cfg80211 cfg80211_disable_40mhz_24ghz=Y

Vea también

Recursos externos

References