sábado, 24 de octubre de 2020

Cómo instalar driver para Realtek RTL8812BU en Ubuntu

Recientemente he adquirido un dispositivo WiFi en formato USB 3.0 el cual indica ser compatible con Linux.
Aunque en los sistemas operativos soportados de la caja no lo especifica, en el manual que le acompaña así lo afirma y en el CD de drivers existe una carpeta específica para Linux.
Existen dos carpetas en función del chip utilizado y aunque no hay referencia alguna a cúal es el que monta este, se trata de un Realtek RTL8812BU.
Le acompaña un readme.txt el cual explica de manera no muy sencilla el proceso de instalación, pero esta no funciona. En su lugar este enlace da pistas de cómo proceder.

Estos son los pasos para Ubuntu -probado en 20.04-:
  • Necesitamos conexión a Internet para obtener los archivos necesarios.
  • Abrimos una terminal y nos vamos a una carpeta cualquiera de /home, por ejemplo /home/rtl8812bu
  • Entramos en esa carpeta y tecleamos lo siguiente:
    • sudo apt-get update
    • git clone https://github.com/cilynx/rtl88x2BU_WiFi_linux_v5.3.1_27678.20180430_COEX20180427-5959
    • cd rtl88x2BU_WiFi_linux_v5.3.1_27678.20180430_COEX20180427-5959
    • VER=5.3.1
    • sudo rsync -rvhP ./ /usr/src/rtl88x2bu-${VER}
    • sudo dkms add -m rtl88x2bu -v ${VER}
    • sudo dkms build -m rtl88x2bu -v ${VER}
    • sudo dkms install -m rtl88x2bu -v ${VER}
    • sudo modprobe 88x2bu
  • Si conectamos el USB deberá detectarlo y en conectividad aparecerá el módulo WiFi desde el cual podremos conectarnos a reder 2.4 y 5 GHz
Para acabar de verificar que todo funciona, solo tenemos que reiniciar el equipo y verificar que sigue siendo detectado por Linux

Nota: después de actualizar a Ubuntu 20.10, el driver deja de funcionar por lo que debe ser reinstalado

Para ello, primero deberemos limpiar del sistema el driver anterior:
  1. Nos vamos a la carpeta /var/lib/dkms y borramos la subcarpeta rtl****
  2. Nos vamos a la carpeta lib/modules/KERNEL_VERSION/updates/dkms/ y borramos el archivo rtl***.ko
  3. Finalmente: sudo /sbin/depmod -a 
  4. Reiniciamos

Otra fuente probada en Ubuntu 20.10 con kernel 5.8.0-25- generic es esta
sudo apt update
sudo apt -y install dkms git bc
git clone https://github.com/fastoe/RTL8812BU.git
cd RTL8812BU
VER=$(sed -n 's/\PACKAGE_VERSION="\(.*\)"/\1/p' dkms.conf)
sudo rsync -rvhP ./ /usr/src/rtl88x2bu-${VER}
sudo dkms add -m rtl88x2bu -v ${VER}
sudo dkms build -m rtl88x2bu -v ${VER}
sudo dkms install -m rtl88x2bu -v ${VER}
sudo modprobe 88x2bu
sudo reboot
Pero NO funciona, dando errores de compilación.
Es necesario modificar las siguientes líneas de código:
  • /usr/src/rtl88x2bu-5.6.1/include/rtw_security.h
    /*struct sha256_state {
    u64 length;
    u32 state[8], curlen;
    u8 buf[64];
    };*/

  • /usr/src/rtl88x2bu-5.6.1/os_dep/linux/ioctl_cfg80211.c
            //.mgmt_frame_register = cfg80211_rtw_mgmt_frame_register,