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

1

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

Eu gostaria de poder executá-los como um usuário no grupo kvm, até agora não tive sorte. Eu originalmente tentei configurar o grupo no próprio dispositivo, em seguida, os dois 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 estes não tiveram efeito, eu até tentei configurar o grupo em todos os subsistemas apenas para testar e não houve mudanças de permissão, então eu suponho que estou fazendo algo totalmente errado.

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

    
por matty 07.07.2017 / 12:27

1 resposta

0

Bem, não tenho certeza se a pergunta em si não espera resultados específicos que tornem 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 os usados pelo kernel.

Segundo: se finalmente combinar, você pode simplesmente executar seus comandos de religamento diretamente das regras do udev.

Veja um exemplo baseado no link que eu modifiquei para o meu Dispositivo PCI (ou seja, NVMe SSD) como 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"
    
por 04.11.2018 / 14:22

Tags