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 规则的步骤,
- setpci -s 0000:02:02.0 BRIDGE_CONTROL=$(printf "%04x" $((0x0010|0x40))) (通过 setpci 发出热复位命令)
- setpci -s 0000:02:02.0 BRIDGE_CONTROL=0x0010(通过 setpci 启用 pci 设备)
- 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"