
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"