Solución error ( r8822be: halmac_init_hal failed) al conectar WiFi con el driver rtl8822be

Foros

Muchos, a día de hoy no han podido usar las más modernas tarjetas de red WIFi de Realtek, el caso de la tarjeta Realtek® RTL8822BE, Wi-Fi 2x2 802.11ac + BT4.1, M.2 card, la cual usa el protocolo 802.11ac que es hasta 6 veces más rápido que el estanda 802.11n. Al revisar nuestros archivos log con dmesg por ejemplo, nos damos cuenta del algo cómo esto:

[  545.070367] r8822be: [ERR]Pwr cmd polling timeout!!
[  545.070376] r8822be: [ERR]Pwr cmd offset : 5!!
[  545.070380] r8822be: [ERR]Pwr cmd value : 0!!
[  545.070384] r8822be: [ERR]Pwr cmd msk : 2!!
[  545.070387] r8822be: [ERR]Read offset = 5 value = 2!!
[  545.070391] r8822be: [Err]pwr sub seq parser fail, status = 0x28!
[  545.070394] r8822be: Handle power off cmd error
[  602.204925] r8822be: halmac_init_hal failed

Les empezaré contando que es lo que causa el problema, el protocolo ASPM (Active State Power Management).

Active State Power Management (ASPM) es un protocolo de administración de energía utilizado para administrar dispositivos de enlace serie basados ​​en PCI Express (PCIe) a medida que los enlaces se vuelven menos activos a lo largo del tiempo. Normalmente se usa en computadoras portátiles y otros dispositivos móviles de Internet para prolongar la duración de la batería.

Si bien ASPM reduce el consumo de energía, también puede aumentar la latencia ya que el bus en serie debe ser "activado" desde el modo de bajo consumo de energía, posiblemente reconfigurado y el enlace de host a dispositivo re-establecido. Esto se conoce como latencia de salida de ASPM y ocupa un tiempo valioso que puede ser molesto para el usuario final si es demasiado obvio cuando ocurre. Sin embargo, esto puede ser aceptable para la informática móvil cuando la vida útil de la batería es crítica.

Actualmente, dos modos de baja potencia están especificados por la especificación PCIe 2.0; L0s y L1 modo. El primer modo se refiere a establecer el modo de baja potencia para una dirección del enlace en serie solamente, generalmente aguas abajo del controlador PHY. El segundo modo, L1, es bidireccional y da como resultado mayores reducciones de potencia, aunque con la penalización de una mayor latencia de salida.

Si ejecutamos en nuestra terminal el comando modinfo r8822be podemos observar las opciones que tiene y demás:

[email protected]:~$ modinfo r8822be
filename:       /lib/modules/4.16.13-1-hardened/kernel/drivers/staging/rtlwifi/r8822be.ko.xz
description:    Realtek 802.11n PCI wireless core
license:        GPL
author:         Larry Finger	<[email protected]>
author:         Realtek WlanFAE	<[email protected]>
author:         lizhaoming	<[email protected]>
description:    PCI basic driver for rtlwifi
license:        GPL
author:         Larry Finger	<[email protected]>
author:         Realtek WlanFAE	<[email protected]>
author:         lizhaoming	<[email protected]>
firmware:       rtlwifi/rtl8822befw.bin
description:    Realtek 8822BE 802.11n PCI wireless
license:        GPL
author:         Larry Finger	<[email protected]>
author:         Realtek WlanFAE	<[email protected]>
description:    Realtek 802.11n PCI wireless core
license:        GPL
author:         Larry Finger	<[email protected]>
author:         Realtek WlanFAE	<[email protected]>
description:    Realtek 802.11n PCI wireless core
license:        GPL
author:         Larry Finger	<[email protected]>
author:         Realtek WlanFAE	<[email protected]>
srcversion:     18BA8597A1A219EB1BD1EE1
alias:          pci:v000010ECd0000B822sv*sd*bc*sc*i*
depends:        mac80211,cfg80211
staging:        Y
retpoline:      Y
intree:         Y
name:           r8822be
vermagic:       4.16.13-1-hardened SMP preempt mod_unload modversions 
parm:           debug_level:int
parm:           swenc:Set to 1 for software crypto (default 0)
 (bool)
parm:           ips:Set to 0 to not use link power save (default 1)
 (bool)
parm:           swlps:Set to 1 to use SW control power save (default 0)
 (bool)
parm:           fwlps:Set to 1 to use FW control power save (default 1)
 (bool)
parm:           msi:Set to 1 to use MSI interrupts mode (default 1)
 (bool)
parm:           dma64:Set to 1 to use DMA 64 (default 0)
 (bool)
parm:           aspm:Set to 1 to enable ASPM (default 1)
 (int)
parm:           debug:Set debug level (0-5) (default 0)
parm:           debug_mask:Set debug mask (default 0) (ullong)
parm:           disable_watchdog:Set to 1 to disable the watchdog (default 0)
 (bool)

Cómo nos damos cuenta, la opción aspm tiene un valor por defecto de 1, lo que significa que está activo por defecto. Lo que vamos a hacer es iniciar el módulo r8822be con la opción aspm desactivada, ¿cómo hacerlo?

Existen dos formas:

· Parcial

Este método funcionará solo mientras el equipo no se reinicie y el módulo r8822be no sea re-cargado. También puede probar y ver si esto resuelve su problema, en caso de que lo haga, continúe en la siguiente forma de hacer el cambio.

sudo modprobe -rv r8822be
sudo modprobe -v r8822be aspm=0

Luego de haberlo ejecutado, debe poder conectarse a WiFi sin ningún problema, entonces vamos a hacer el cambio permanente.

· Permanente

Cómo la opción aspm=0 soluciona el problema, vamos a convertirla en un cambio permanente.

Crearemos un archivo llamado /etc/modprobe.d/r8822be.conf con nuestro editor de texto favorito y añadimos esta línea:

options r8822be aspm=0

Con esto el cambio se aplicará cada vez que inicie el sistema y listo,podremos conectarnos al WiFi con nuestra tarjeta de red.

Espero les haya gustado, cualquier duda déjela en los comentarios.

Acerca del autor

Especialista en Seguridad Informática bajo certificación OSCP, especialista en técnicas de privacidad y seguridad en la red, desarrollador back-end, miembro de la FSF y Fundador de Security Hack Labs. Entusiasta de la tecnología y amante de GNU/Linux. Twitter: @edu4rdshl XMPP/Email: [email protected]