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设备都被唯一的绑定到自定义的名字上,再也不用担心设备号窜动了。

连接到HUB的USB设备KERNELS路径通常可以通过以下步骤找到: 1. 运行`lsusb`命令,查看USB设备的Vendor ID和Product ID。例如,假设我们要查找连接到HUB上的USB鼠标设备,可以运行以下命令: ``` $ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 006: ID 046d:c077 Logitech, Inc. M105 Optical Mouse Bus 001 Device 005: ID 05e3:0612 Genesys Logic, Inc. Hub Bus 001 Device 004: ID 05e3:0745 Genesys Logic, Inc. Logilink CR0012 Bus 001 Device 002: ID 05e3:0610 Genesys Logic, Inc. 4-port hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub ``` 从输出中可以看到,该鼠标设备的Vendor ID为046d,Product ID为c077。 2. 进入/sys/bus/usb/devices目录,查找对应的USB设备节点。例如,在上面的输出中,该鼠标设备连接到了Bus 001的Device 006,因此我们可以进入/sys/bus/usb/devices/1-3目录,查看该设备KERNELS路径: ``` $ cd /sys/bus/usb/devices/1-3 $ ls -l total 0 drwxr-xr-x. 4 root root 0 Apr 20 17:20 1-3:1.0 lrwxrwxrwx. 1 root root 0 Apr 20 17:20 bDeviceClass -> ../../../../../../../class/input/ lrwxrwxrwx. 1 root root 0 Apr 20 17:20 bDeviceProtocol -> ../../../../../../../class/input/mouse0/protocol lrwxrwxrwx. 1 root root 0 Apr 20 17:20 bDeviceSubClass -> ../../../../../../../class/input/ lrwxrwxrwx. 1 root root 0 Apr 20 17:20 bcdDevice -> ../../../../../../../class/input/mouse0/version lrwxrwxrwx. 1 root root 0 Apr 20 17:20 bus -> ../../../../../../../bus/usb/ lrwxrwxrwx. 1 root root 0 Apr 20 17:20 configuration -> ../../../../../../../usb1/1-3/1-3:1.0/configuration -rw-r--r--. 1 root root 4.0K Apr 20 17:20 descriptors -rw-r--r--. 1 root root 4.0K Apr 20 17:20 devnum lrwxrwxrwx. 1 root root 0 Apr 20 17:20 device -> ../../../../../../../usb1/1-3/ -rw-r--r--. 1 root root 4.0K Apr 20 17:20 idProduct -rw-r--r--. 1 root root 4.0K Apr 20 17:20 idVendor -rw-r--r--. 1 root root 4.0K Apr 20 17:20 maxchild drwxr-xr-x. 2 root root 0 Apr 20 17:20 power lrwxrwxrwx. 1 root root 0 Apr 20 17:20 product -> ../../../../../../../usb1/1-3/1-3:1.0/product -r--r--r--. 1 root root 4.0K Apr 20 17:20 quirks -rw-r--r--. 1 root root 4.0K Apr 20 17:20 speed lrwxrwxrwx. 1 root root 0 Apr 20 17:20 subsystem -> ../../../../../../../bus/usb/ -rw-r--r--. 1 root root 4.0K Apr 20 17:20 uevent lrwxrwxrwx. 1 root root 0 Apr 20 17:20 usb_device -> ../../../../../../../usb1/1-3/ ``` 从输出中可以看到,该鼠标设备KERNELS路径为1-3:1.0。 因此,连接到HUB的USB设备KERNELS路径通常是/sys/bus/usb/devices/<Bus>-<Device>:<Interface>,其中Bus和Device是通过`lsusb`命令获得的,Interface通常为0或1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值