Virtualbox udev 规则 SUBSYSTEM=="usb_device" 与 SUBSYSTEM=="usb",带参数

Virtualbox udev 规则 SUBSYSTEM=="usb_device" 与 SUBSYSTEM=="usb",带参数

在 VirtualBox 手册中(https://www.virtualbox.org/manual/UserManual.html),有这样一个相当通用的句子:«[...] /etc/udev/rules.d/60-vboxdrv.rules, 的描述文件(udev如果存在),这使得vboxusers组中的所有用户都可以访问 USB 设备。»

我查看了文件的内容:

/etc/udev/rules.d$ cat 60-vboxdrv.rules 
KERNEL=="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
KERNEL=="vboxdrvu", OWNER="root", GROUP="root", MODE="0666"
KERNEL=="vboxnetctl", OWNER="root", GROUP="vboxusers", MODE="0660"
SUBSYSTEM=="usb_device", ACTION=="add", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
SUBSYSTEM=="usb_device", ACTION=="remove", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh --remove $major $minor"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/usr/lib/virtualbox/VBoxCreateUSBNode.sh --remove $major $minor"

插入USB设备时似乎有两个相同的规则。唯一的区别在于SUBSYSTEM=="usb_device", ACTION=="add"和之间SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device"。谁能解释其中的区别吗?

移除设备时也是如此。

另外,什么是$major$minor?这些变量是由 ? 创建的吗udev

答案1

暂时我已经找到了第二个问题的答案,即什么$major$minor是什么。首先,它们在官方 udev 文档:

$专业,%M

The kernel major number for the device.

$次要,%m

The kernel minor number for the device.

我们可以通过以下方式看到与每个设备关联的两个变量: sudo udevadm monitor --udev --subsystem-match=usb --property。它输出udev与插入设备相关的变量。

他们的解释在这里:https://www.oreilly.com/library/view/linux-device-drivers/0596000081/ch03s02.html

主设备号标识与设备关联的驱动程序。例如,/dev/null 和 /dev/zero 均由驱动程序 1 管理,而虚拟控制台和串行终端由驱动程序 4 管理;同样,vcs1 和 vcsa1 设备均由驱动程序 7 管理。内核在打开时使用主设备号将执行分派给相应的驱动程序。

次设备号仅由主设备号指定的驱动程序使用;内核的其他部分不使用它,而只是将其传递给驱动程序。一个驱动程序控制多个设备是很常见的(如列表所示);次要编号为驱动程序提供了区分它们的方法。

相关内容