我有一个完全更新的 Archlinux 安装,我使用 udev 根据 USB 总线和端口号在设备节点上设置特定权限,以便我可以重定向端口(而不是基于产品/供应商 ID 的设备)到虚拟机。
这以前可以在相同的操作系统上运行,但重新安装后,每次重新启动时总线编号都会发生变化,我必须手动调整 udev 规则和虚拟机配置,只有在下次重新启动时才能再次重复该过程。
有时巴士显示为 3,有时显示为 8,现在显示为 7;我不想在所有 USB 端口上设置这些(不安全)权限,以避免安全灾难,那么我该如何解决这个问题并拥有持久的 USB 总线编号呢?
答案1
来自内核源代码 (drivers/usb/core/usb.c):“busnum 可以根据 modprobe 顺序、cardbus 或 pci 热插拔等轻松更改”。因此,我们需要通过 PCI 拓扑来确定哪个“busid”属于控制器。您还可以通过查看“/sys/bus/usb/devices/usbN/”来枚举所有 USB 设备(“serial”是 PCI 插槽号,“busnum”是逻辑总线号,“NM/NMK/.. . 是一个物理拓扑,您可以在其中找到您需要的所有内容)如果您使用 libvirt,您可以使用 busnum/devnum 而不是 vid/pid。 要与 udev 一起使用,您可以使用“... ACTION”编写脚本和 udev 规则。 ==“add”,PROGRAM =“/path/to/script [params]”,SYMLINK + =“%c”...“。抱歉我的英语不好。