
Estoy intentando escribir un conjunto de reglas udev para permitir que un usuario de un grupo kvm desvincule los controladores en un dispositivo pci. Los comandos en cuestión son:
echo '0000:0b:00.0' > /sys/bus/pci/devices/0000:0b:00.0/driver/unbind
echo 0x1912 0x0014 > /sys/bus/pci/drivers/vfio-pci/new_id
Me gustaría poder ejecutarlos como usuario del grupo kvm, hasta ahora no he tenido suerte. Originalmente intenté configurar el grupo en el dispositivo, luego los controladores xhci_hcd y vfio-pci, usando variaciones de lo siguiente:
SUBSYSTEM=="pci", ATTR{vendor}=="0x1912", ATTR{device}=="0x0014", OWNER="root", GROUP="kvm"
KERNEL=="xhci_hcd", SUBSYSTEM=="drivers", OWNER="root", GROUP="kvm"
KERNEL=="vfio-pci", SUBSYSTEM=="drivers", OWNER="root", GROUP="kvm"
Pero esto no tuvo ningún efecto, incluso intenté configurar el grupo en todos los subsistemas solo para probar y no hubo cambios en los permisos, así que supongo que estoy haciendo algo completamente mal.
¿Algún consejo sobre lo que estoy haciendo mal? Gracias.
Respuesta1
Bueno, no estoy seguro de si la pregunta en sí no espera resultados específicos que puedan hacer que obtener la respuesta sea más difícil que fácil.
Primero: debe usar "udevadm info -a -p /sys/devices/" para verificar si los atributos KERNEL/SUBSYSTEM que intentó usar son realmente los que usa el kernel.
Segundo: si finalmente coincide, puede ejecutar los comandos de vinculación directamente desde las reglas de udev.
He aquí un ejemplo basado enhttp://vogelchr.blogspot.com/2016/02/linuxudev-unbinding-from-one-kernel.htmlque modifiqué para mi dispositivo PCI (es decir, NVMe SSD) ya que el mecanismo de enlace se comporta de manera diferente para mí en el kernel 4.15+.
regla udev:DRIVER=="nvme", ATTRS{subsystem_device}=="0xa801",ATTRS{subsystem_vendor}=="0x144d", RUN+="/usr/local/sbin/rebind_pci_driver.sh %k vfio-pci"
Y el guión que llamamos:
#!/bin/sh
set -e
logger -t "$0" "Rebind device $1 to driver $2."
echo "$1" >"/sys/bus/pci/devices/$1/driver/unbind"
sleep 1
echo "$1" >"/sys/bus/pci/drivers/$2/bind"