Archivo

Entradas Etiquetadas ‘kernel’

GPU passthrough en Proxmox

lunes, 12 de agosto de 2019 Sin comentarios

Después de haber instalado Proxmox en un HP Gen8, mi intención era la de virtualizar LibreElenc para utilizarlo como centro multimedia y un Windows 10 para poder hacer uso de mi biblioteca de Steam. Tras un poco de modding en la pequeña torre e incorporar una GTX 1050Ti (concretamente la Gigabyte GV-N105TOC-4GL) me quedaba por delante configurar Proxmox para permitir dejar paso directo de la tarjeta gráfica a los sistemas virtualizados.

Configuración de la máquina virtual

Para ello la máquina virtual debía incorporar en su fichero de configuración («/etc/pve/qemu-server/100.conf») las siguientes opciones:

  • machine: q35
  • hostpci0: 07:00,pcie=1,x-vga=on

La segunda opción depende de cada equipo y es el resultado de haber obtenido lo siguiente tras lanzar el comando «lspci»:

07:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
07:00.1 Audio device: NVIDIA Corporation GP107GL High Definition Audio Controller (rev a1)

Error al arrancar la máquina virtual

Cuando intentemos arrancar la máquina virtual, lo más probable es que nos indique lo siguiente:

vfio: failed to set iommu for container: Operation not permitted

Lo que parece en principio un problema de permisos tiene un trasfondo más complejo que afecta al kernel y que podemos comprobar con el comando «dmesg | grep -e DMAR -e IOMMU» que nos devolverá lo siguiente:

vfio-pci 0000:07:00.1: Device is ineligible for IOMMU domain attach due to platform RMRR requirement. Contact your platform vendor.

Recompilación del kernel

La forma de solucionar el problema es recompilando el kernel tras haber incorporado un pequeño parche al mismo.

Actualizaremos el sistema e instalaremos los paquetes que vamos a necesitar:

  • apt-get update
  • apt-get install git nano screen patch fakeroot build-essential devscripts libncurses5 libncurses5-dev libssl-dev bc flex bison libelf-dev libaudit-dev libgtk2.0-dev libperl-dev libperl-dev asciidoc xmlto gnupg gnupg2 rsync lintian debhelper libibery-dev libdw-dev libnuma-dev libsplang2-dev libiberty-dev libslang2-dev debhelper sphinxdoc-common

Descargaremos el código fuente del kernel que vamos a recompilar y de aquel de donde sacaremos el parche:

  • cd /usr/src/
  • git clone git://git.proxmox.com/git/pve-kernel.git
  • git clone git://git.proxmox.com/git/mirror_ubuntu-disco-kernel.git
  • mv mirror_ubuntu-disco-kernel ubuntu-disco

Hacemos una copia del parche que necesitamos y lo editamos con nano:

  • cp ubuntu-disco/drivers/iommu/intel-iommu.c ubuntu-disco/drivers/iommu/intel-iommu_new.c
  • nano ubuntu-disco/drivers/iommu/intel-iommu_new.c

En el editor de nano buscaremos con el comando «CTRL+W» el siguiente tecto:

if (device_is_rmrr_locked(dev)) {
dev_warn(dev, «Device is ineligible for IOMMU domain attach due to platform RMRR requirement. Contact your platform vendor.\n»);
return -EPERM;
}

Y lo cambiaremos a lo siguiente (se elimina el «return» y se añade al texto algo que nos haga saber más tarde que se está aplicando nuestro parche) :

if (device_is_rmrr_locked(dev)) {
dev_warn(dev, «Device was ineligible for IOMMU domain attach due to platform RMRR requirement. Parcheado.\n»);
}

De los dos ficheros generaremos un diff:

  • diff -u /usr/src/ubuntu-disco/drivers/iommu/intel-iommu.c /usr/src/ubuntu-disco/drivers/iommu/intel-iommu_new.c > remove_rmrr_check.patch

Habrá que adaptar la cabecera de ese diff generado, quedando de forma similar a este (se cambian las rutas de los ficheros y sus nombres):

— a/drivers/iommu/intel-iommu.c 2019-07-17 15:44:26.908520624 +0200
+++ b/drivers/iommu/intel-iommu.c 2019-07-17 15:48:09.380083344 +0200

Moveremos el diff al lugar donde la recompilación lo buscará:

  • cd /usr/src/pve-kernel/
  • mv ../remove_rmrr_check.patch ./patches/kernel/

Modificaremos un script que busca ficheros con nombres problemáticos:

  • nano debian/scripts/find-firmware.pl

Y comentaremos una de las primeras líneas para que quede más o menos de esta forma:

#die «strange directory name» if $dir !~ m|^(.*/)?(5.0.\d+\-\d+\-pve)(/+)?$|;

Configuraremos el Makefile:

  • nano /usr/src/pve-kernel/Makefile

En él buscaremos «EXTRAVERSION» y lo dejaremos de la siguiente forma:

  • EXTRAVERSION=-${KREL}-pve-removermrr

Y finalmente lanzaremos el make:

  • make

Si todo ha ido bien, nos habrá generado una serie de ficheros «.deb» que instalaremos de la siguiente forma:

  • dpkg -i *.deb

Si nos ha fallado por algún motivo y tenemos que relanzar de nuevo el «make» es posible que no nos deje y tengamos que añadir al fichero «Makefile» la opción «-d» quedando de esta forma:

${LINUX_TOOLS_DEB} ${HDR_DEB}: ${DST_DEB}
${DST_DEB}: ${BUILD_DIR}.prepared
cd ${BUILD_DIR}; dpkg-buildpackage –jobs=auto -b -uc -us -d
lintian ${DST_DEB}
#lintian ${HDR_DEB}
lintian ${LINUX_TOOLS_DEB}

Comprobación de la instalación

Una vez que tengamos el nuevo kernel instaldo mediante los «.deb» anteriores, reiniciaremos la máquina y cuando lancemos nuestra máquina virtual, mediante el comando «dmesg | grep -e DMAR -e IOMMU» obtendremos el mensaje:

vfio-pci 0000:07:00.1: Device is ineligible for IOMMU domain attach due to platform RMRR requirement. Parcheado.

Fuente

Las pautas han sido sacadas de lo que ahora es un pequeño tutorial pero en su día fue un verdadero quebradero de cabeza.

Huawei Watch 2 con ROM personalizada, Magisk y EdXposed

miércoles, 15 de mayo de 2019 Sin comentarios

El Huawei Watch 2 es un reloj inteligente que incorpora la versión Oreo de Android Wear. Si queremos dotarlo de una versión optimizada y «rooteada» del sistema hay que seguir algunos pasos:

  1. Cargar el recovery de TWRP. No lo instalaremos porque me ha dado problemas al desvincularlo del teléfono.
  2. Instalar la ROM personalizada desde TWRP.
  3. Instalar Magisk desde TWRP.
  4. Instalar Riru-Core v19 desde Magisk.
  5. Instalar el módulo EdXposed para Magisk.
  6. Instalar el administrador de EdXposed.

Precaución

Estos pasos pueden dejar tu reloj inservible (bricked) y borrar todo su contenido, así que procede bajo tu propia responsabilidad.

Recovery de TWRP

  1. En el reloj vamos a «Ajustes->Sistema->Información» y pulsamos sobre «Número de compilación» 7 veces. Eso nos habilitará las opciones de desarrollador.
  2. Vamos a «Ajustes->Opciones para desarrolladores» y activamos «Depuración ADB».
  3. Conectar el reloj al ordenador y abrir un terminal para poner lo siguiente:
    • «adb devices» (nos mostrará nuestro reloj).
    • «adb reboot bootloader» (reiniciará el reloj en un modo que nos permitirá realizar los siguientes pasos).
    • «fastboot devices» (muestra nuestro reloj).
    • «fastboot oem unlock» (desbloquea el arranque del reloj, motivo por el cual, a partir de ahora, cada vez que encendamos el reloj nos saldrá un aviso de tal hecho pero que no afecta al funcionamiento del reloj).
    • Habrá que mantener pulsado el botón según nos lo pida en pantalla para aceptar el desbloqueo del reloj.
    • «fastboot reboot» (reiniciamos).
  4. Procedemos a lanzar el recovery poniendo lo siguiente en un terminal:
    • «adb reboot bootloader» (reiniciará el reloj en un modo que nos permitirá realizar los siguientes pasos).
    • «fastboot boot oreo-recovery.img» (carga el TWRP que podemos descargar desde aquí).
    • Hacemos copia de seguridad de system, boot, etc.
    • «fastboot flash recovery oreo-recovery.img» (en caso de que lo queramos dejar instalado, pero no lo recomiendo).

Nota: si queremos arrancar en «bootloader» manualmente, solo tenemos que apagar el reloj, mantener pulsado el botón de encendido y, cuando vibre, soltamos y volvemos a pulsar una vez más el botón.

Instalar ROM

  1. Habiendo arrancado el TWRP del paso anterior, podemos copiar la ROM correspondiente al reloj que habremos descargado para la versión LTE/4G o la versión BT/Classic y también Magisk.
  2. Desde el menú de TWRP hacemos un «Wipe data» y «Factory reset».
  3. Pulsaremos sobre «Install», buscaremos el fichero .zip que hemos copiado y que contiene la ROM y esperaremos a que finalice el proceso.
  4. Tras lo anterior reiniciaremos de nuevo en TWRP desde las opciones de reinicio que nos ofrece él mismo.
  5. Iremos a la opción «Install» y seleccionaremos el .zip de Magisk.
  6. Reiniciamos el sistema y dejamos que el reloj arranque para realizar la configuración inicial y emparejamiento con el móvil.

Instalar Riru-Core

  1. Desde el reloj abrimos la aplicación de Magisk y desde el menú superior izquierdo podemos acceder a «Descargas».
  2. Arriba a la derecha podremos pulsar sobre la lupa y buscar «Riru».
  3. Instalaremos «Riru – Core» y «Riru – EdXposed (YAHFA)». Este último se podría instalar mediante TWRP.
  4. Reiniciamos el reloj.

Instalar EdXposed

  1. En el reloj vamos a «Ajustes->Sistema->Información» y pulsamos sobre «Número de compilación» 7 veces. Eso nos habilitará las opciones de desarrollador.
  2. Vamos a «Ajustes->Opciones para desarrolladores» y activamos «Depuración ADB».
  3. Conectar el reloj al ordenador y abrir un terminal para poner lo siguiente:
    • «adb install EdXposedInstaller_v2.2.4-release.apk» (esto instalará la aplicación para administrar EdXposed y que habremos descargado desde aquí).
  4. Abriremos la aplicación de EdXposed y ya podremos instalar módulos como Xposed Edge.

Es posible que me haya dejado algo, pero básicamente está todo sacado de los enlaces que he puesto arriba de XDA.

Categories: Android Wear Tags: , , , , ,

Problemas con la Wifi con un adaptador RTL8723BE

jueves, 16 de abril de 2015 Sin comentarios

Parece ser que existe un bug en el kernel que provoca una funcionalidad extremadamente lenta o incluso la imposibilidad de establecer conexión a través de la Wifi en ciertos equipos que utilizan el RTL8723BE.

La solución provisional es la de descargar los drivers y compilarlos con dos sencillos comandos:

$ make

$ sudo make install

Categories: GNU/Linux Tags: , ,