本文旨在解决Linux发行版之一的Ubuntu设备节点绑定的问题,其他Linux发行版也可参照本文步骤。该问题具体描述如下:
例如,现在有两个USB设备,一个为卫星通信模块(以下简称卫星模块),另外一个为无线电通信模块(以下简称无线模块)。
默认情况下,Ubuntu会按照接入顺序接入设备分配设备节点。但是,由于这两个模块均一直插在Ubuntu设备上,并没有强烈的先后顺序,因此其接入顺序是随机的:可能/dev/ttyUSB0对应卫星模块,/dev/ttyUSB1对应无线模块;也可能/dev/ttyUSB0对应无线模块,/dev/ttyUSB1对应卫星模块。
对于这种情况,由于设备与设备节点之间的关系并不固定,实际使用时会造成诸多不便。因此,往往需要将设备与特定的设备节点相绑定。
看完本文,您将了解如何在Ubuntu系统上绑定设备与设备节点。
一、查看厂商id与设备id
为了绑定设备与设备节点,我们首先需要查看设备的厂商id和设备id。假设该设备当前的设备节点为/dev/ttyUSB0,此时打开终端,键入下面的命令:
udevadm info -q property -n /dev/ttyUSB0
可以得到下面的执行结果,其中,ID_VENDOR_ID即为厂商ID,ID_MODEL_ID即为设备ID。我们记录这两个ID的值。
二、创建绑定规则
接着,我们需要创建绑定规则。Ubuntu的绑定规则位于/etc/udev/rules.d目录下,我们在该目录下创建规则文件,文件名可以任意,但尽量规范,方便后续管理。
sudo nano /etc/udev/rules.d/add-usb-rule.rules
在打开的编辑窗口中输入以下内容,其中,idVendor的等号后填写前面的厂商ID,idProduct的等号后填写前面的设备ID,SYSLINK+等号后填写你想绑定的设备节点。这里我的厂商ID为“1a86”,设备ID为“7523”,设备节点为“wirelessModule”。如果想添加多条绑定规则,则换行后按照相同的方式添加即可。
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="wirelessModule"
创建完成后,请务必重启Ubuntu系统。
三、检验绑定
重启完成后,打开Ubuntu终端,输入以下命令检验是否绑定成功,请将grep之后的名称替换为你设定的设备节点名称:
ls /dev | grep wirelessModule
执行结果如图所示:
此后,我们就可以通过/dev/wirelessModule节点访问该设备,该映射是持久的,重启或者关机之后该映射依旧存在。