使用udev规则固定设备名
15 Mar 2014OS:ubuntu 12.04LTE
查询设备信息
udevadm info --attribute-walk --name=/dev/video0
其中/dev/video0
是一个usb的摄像头。当有其他视频设备插入机器的时候,就不能够保证这个摄像头的设备文件还是/dev/video0
了,可能是/dev/video1
等等,这样就无法唯一标识这个设备,将不利于自动化脚本处理。
下面通过编写自己的udev 规则来固定这个设备的设备名称。
输出(节选):
looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-5/1-5:1.0/video4linux/video0':
KERNEL=="video0"
SUBSYSTEM=="video4linux"
DRIVER==""
ATTR{name}=="A4 TECH HD PC Camera"
ATTR{index}=="0"
上面的输出可以确定该设备的系统设备名为 A4 TECH HD PC Camera
编写udev规则
ubuntu下udev rules文件在/etc/udev/rules.d/
下,在该目录下建立文件: 60-usb_camera.rules
,文件内容如下:
SUBSYSTEM=="video4linux",ATTRS{name}=="A4 TECH HD PC Camera",SYMLINK+="usb_camera"
这条语句告知udev,当发现插入设备的SUBSYSTEM为video4linux,并且设备的name属性是A4 TECH HD PC Camera,那么建立一个软链接到这个设备的设备文件。 usb_camera就是我们需要的固定设备名称。我在这里只是简单匹配了name这个属性,可能不适合其他复杂的环境。 键值对的名称一定要严格匹配,”[“,”]”需要转义。
重启udev
重启udev服务使新的规则生效:
/etc/init.d/udev restart
测试新规则
重新插入usb摄像头,在/dev/目录下可以发现设备usb_camera。在自动化脚本中,我们可以直接使用/dev/usb_camera
更多参考
关于udev规则编写的更多细节,可以查看 这里