在 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 管理。内核在打开时使用主设备号将执行分派给相应的驱动程序。
次设备号仅由主设备号指定的驱动程序使用;内核的其他部分不使用它,而只是将其传递给驱动程序。一个驱动程序控制多个设备是很常见的(如列表所示);次要编号为驱动程序提供了区分它们的方法。