regra udev para usuários não-root desvinculando drivers pci?

regra udev para usuários não-root desvinculando drivers pci?

Estou tentando escrever um conjunto de regras do udev para permitir que um usuário em um grupo kvm desvincule drivers em um dispositivo PCI. Os comandos em questão são:

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

Gostaria de poder executá-los como usuário do grupo kvm, mas não tive sorte até agora. Originalmente, tentei configurar o grupo no próprio dispositivo e, em seguida, nos drivers xhci_hcd e vfio-pci, usando variações do seguinte:

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"

Mas isso não teve efeito, até tentei definir o grupo em todos os subsistemas apenas para testar e não houve alterações de permissão, então presumo que estou fazendo algo totalmente errado.

Alguma indicação sobre o que estou fazendo de errado? Obrigado.

Responder1

Bem, não tenho certeza se a pergunta em si não espera resultados específicos que possam tornar a obtenção de sua resposta mais difícil do que fácil.

Primeiro: você deve usar "udevadm info -a -p /sys/devices/" para verificar se os atributos KERNEL/SUBSYSTEM que você tentou usar são realmente aqueles usados ​​pelo kernel.

Segundo: se finalmente corresponder, você poderá simplesmente executar seus comandos de religação diretamente das regras do udev.

Aqui está um exemplo baseado emhttp://vogelchr.blogspot.com/2016/02/linuxudev-unbinding-from-one-kernel.htmlque modifiquei para meu dispositivo PCI (ou seja, SSD NVMe), pois o mecanismo de ligação se comporta de maneira diferente para mim no kernel 4.15+.

regra do udev:DRIVER=="nvme", ATTRS{subsystem_device}=="0xa801",ATTRS{subsystem_vendor}=="0x144d", RUN+="/usr/local/sbin/rebind_pci_driver.sh %k vfio-pci"

E o script que chamamos:

#!/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"

informação relacionada