[005] ubuntu下绑定USB设备的串口名称(KERNELS硬件端口号绑定)

1、为什么要绑定USB设备的串口名称?

用ubuntu系统来做硬件控制的时候,常使用USB串口与传感器或者驱动器进行信息通信。ubuntu系统在开机的时候会为每一个插入的USB设备自动升序命名,如ttyUSB0、ttyUSB1......(有些也会命名为ttyACM0、ttyACM1......),而程序运行时也就直接和这些设备名进行读写操作。

但是这里存在一个问题,每次开机后,USB设备名都有可能发生窜动,比如上一次开机这个设备被命名为ttyUSB0,这次开机却被命名为ttyUSB3,因此不得不回到程序里把串口名更改,并重新编译,费时费力。

当然,也有办法解决这个问题,就是把每一个USB设备都取一个“别名”,之后我们在程序里就不再呼唤系统自动命名的设备名,而是直接与自定义的“别名”交互。

2、常规绑定USB设备的串口名称的方法

(1)绑定软件设备号,即idVendor和idProduct。

(2)绑定硬件序列号,查找serial。

以上两种方法我都试过,但在我这里不太好使,因为我使用了USB-hub做接口拓展,当我在查询某个USB设备的软件设备号或者硬件序列号时,会查询到多个结果(有时候又出现多个USB设备的软件设备号或者硬件序列号完全相同)(×—× 有点绕,读者自己捋一捋),我估计是拓展坞的存在使这些编号混乱了。

不过,也把这个博主的帖子放下面,也许这两种方法对你适用:

https://blog.csdn.net/qq_35386301/article/details/84566214

3、KERNELS硬件端口号绑定USB串口名称

这是我实践后总结的,最有效率的一种办法,详细步骤如下:

(1)ubuntu电脑关机状态,把除了鼠标键盘外的所有USB设备拔掉。

(2)ubuntu电脑开机。

(3)把你想命名的第一个USB设备插上电脑,系统自动将其命名为ttyUSB0,通过ls /dev命令可以找到这个设备名。

(4)通过以下命令查看ttyUSB0的KERNELS硬件端口号:

udevadm info --attribute-walk --name=/dev/ttyUSB0

[005] ubuntu下绑定USB设备的串口名称(KERNELS硬件端口号绑定)_第1张图片

在第三个looking at...的下方,就是这个USB 设备的KERNELS硬件端口号:KERNELS == "2-3:1.0"。

(5)在/etc/udev/rule.d 下产生相应的规则文件,将ttyUSB0命名为你喜欢的名字。

        首先,通过以下命令创建规则文件:

sudo gedit /etc/udev/rules.d/usb.rules

        在打开的文本框里输入以下代码,保存退出:

KERNELS=="2-3:1.0", MODE:="0777", GROUP:="dialout", SYMLINK+="usb_rplidar"

通过以上两步,就把ttyUSB0取别名为usb_rplidar,以后在程序里直接访问usb_rplidar,就可以与这个设备通信了。

(6)运行以下命令使修改立即生效:

sudo udevadm trigger

(7)重复步骤3-6,用同样的办法把剩下的USB设备重命名。

[005] ubuntu下绑定USB设备的串口名称(KERNELS硬件端口号绑定)_第2张图片

(8)把所有USB设备重命名后,运行以下命令查看USB设备名更改情况:

ls -l /dev |grep ttyUSB

[005] ubuntu下绑定USB设备的串口名称(KERNELS硬件端口号绑定)_第3张图片

至此,所有的USB设备都被唯一的绑定到自定义的名字上,再也不用担心设备号窜动了。

你可能感兴趣的:(ROS,通讯,绑定USB串口号,USB设备重命名)