使用udev规则固定设备名

OS: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规则编写的更多细节,可以查看 这里