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/"を使用する必要があります。
2番目:一致が終わったら、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"