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
在第三个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设备重命名。
(8)把所有USB设备重命名后,运行以下命令查看USB设备名更改情况:
ls -l /dev |grep ttyUSB
至此,所有的USB设备都被唯一的绑定到自定义的名字上,再也不用担心设备号窜动了。
还没有评论,来说两句吧...