通过 setpci 热重置 pci 后,udev 规则不会触发

通过 setpci 热重置 pci 后,udev 规则不会触发

udev 规则(放置在 /etc/udev/rules.d/00pci_dev_removal_entry.rules 中)

ACTION=="添加" ATTRS{class}=="0x010802" RUN+="echo PCI_device_class_0x010802_detected > /tmp/udev_notification.out"

ACTION=="删除" ATTRS{class}=="0x010802" RUN+="echo PCI_device_class_0x010802_removed > /tmp/udev_notification.out"

执行以下操作后,没有迹象表明 udev 规则被触发或运行,

sudo udevadm 控制 --reload-rules && udevadm 触发器

以下是触发 udev 规则的步骤,

  1. setpci -s 0000:02:02.0 BRIDGE_CONTROL=$(printf "%04x" $((0x0010|0x40))) (通过 setpci 发出热复位命令)
  2. setpci -s 0000:02:02.0 BRIDGE_CONTROL=0x0010(通过 setpci 启用 pci 设备)
  3. echo 1 > /sys/bus/pci/devices/0000:05:00.0/rescan

在 ubuntu 20.04 上测试了上述 udev 规则。需要注意的是,执行 setpci(热重置禁用和启用)后,可以看到 pci dev 条目被删除并添加到“lspci”命令中。

因此,没有与 setpci 相关的问题。

如有任何线索能够帮助找出为什么 udev 规则没有被触发,我们将不胜感激。

答案1

在此行添加“options 参数”后,能够从内核接收 udev 通知。ACTION=="remove|add", ATTRS{class}=="0x010802", RUN+="/bin/sh /bin/pcidev_change.sh",选项="last_rule"

相关内容