kvm 그룹의 사용자가 pci 장치에서 드라이버 바인딩을 해제할 수 있도록 udev 규칙 세트를 작성하려고 합니다. 문제의 명령은 다음과 같습니다.
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
kvm 그룹의 사용자로서 이러한 작업을 수행할 수 있기를 원하지만 지금까지는 운이 없었습니다. 처음에는 다음 변형을 사용하여 장치 자체에 그룹을 설정한 다음 xhci_hcd 및 vfio-pci 드라이버에 그룹을 설정해 보았습니다.
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"
그러나 이들 중 어느 것도 아무런 영향을 미치지 않았습니다. 테스트를 위해 전체 하위 시스템에 그룹을 설정하려고 시도했지만 권한은 변경되지 않았으므로 완전히 잘못된 일을 하고 있는 것 같습니다.
내가 뭘 잘못하고 있는지에 대한 조언이 있습니까? 감사해요.
답변1
글쎄요, 질문 자체가 특정 결과를 기대하지 않는지 잘 모르겠습니다. 그러면 답변이 쉬워지기보다는 어려워질 것입니다.
첫째: 사용하려는 KERNEL/SUBSYSTEM 속성이 실제로 커널에서 사용하는 속성인지 확인하려면 "udevadm info -a -p /sys/devices/"를 사용해야 합니다.
둘째: 일치가 끝나면 udev 규칙에서 직접 rebind 명령을 실행할 수 있습니다.
다음은 다음을 기반으로 한 예입니다.http://vogelchr.blogspot.com/2016/02/linuxudev-unbound-from-one-kernel.html본딩 메커니즘이 4.15+ 커널에서 다르게 작동하기 때문에 PCI 장치(예: NVMe SSD)에 맞게 수정했습니다.
udev 규칙:DRIVER=="nvme", ATTRS{subsystem_device}=="0xa801",ATTRS{subsystem_vendor}=="0x144d", RUN+="/usr/local/sbin/rebind_pci_driver.sh %k vfio-pci"
이를 스크립트라고 부르자:
#!/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"