Ubuntu系统上的USB端口号绑定

本文介绍了为何要绑定USB端口号以及如何操作。通过查询USB设备端口信息,创建并编辑`usb_device.rules`文件,设置设备ID和权限,可以将USB设备的端口号绑定为固定名称,方便测试和使用。操作完成后,设备将以预设的名字如`IMU`出现在系统中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 为什么绑定USB端口号

USB端口号会随设备的插拔发生变化,不方便测试,因此需要将USB端口号绑定。
2 如何绑定USB端口号

将端口重映射到新的固定的名字,并且设置其权限为可读。
2.1 查询USB设备端口信息

在未插入USB设备前,打开终端,执行以下命令查看USB端口信息:

lausb

1

输出如下:

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 13d3:56a6 IMC Networks
Bus 001 Device 003: ID 0bda:b023 Realtek Semiconductor Corp.
Bus 001 Device 114: ID 413c:301a Dell Computer Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

1
2
3
4
5

然后,插入设备,再次在终端执行命令:

lsusb

1

输出如下:

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 13d3:56a6 IMC Networks
Bus 001 Device 003: ID 0bda:b023 Realtek Semiconductor Corp.
Bus 001 Device 114: ID 413c:301a Dell Computer Corp.
Bus 001 Device 123: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

1
2
3
4
5
6

可以看出,新插入设备的端口信息为:

Bus 001 Device 123: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x UART Bridge / myAVR mySmartUSB light

1

其中:

ID 10c4:ea60:表示USB设备的ID(这个ID由芯片制造商设置,可以唯一表示该设备)
10c4:usb_device_descriptor.idVendor
ea60:usb_device_descriptor.idProduct

2.2 创建usb_device.rules文件

切换到/etc/udev/rules.d,新建IMU.rules并打开:

cd /etc/udev/rules.d
sudo touch IMU.rules
sudo gedit IMU.rules

1
2
3

添加:

KERNEL==“ttyUSB*”, ATTRS{idVendor}“10c4”, ATTRS{idProduct}“ea60”, MODE:=“0777”, SYMLINK+=“IMU”

1

其中:

ATTRS{idVendor}和ATTRS{idProduct}对应2.1中的设备ID
MODE为读写权限
SYMLINK为想要绑定的USB设备的名字

保存IMU.rules后,重新插拔USB设备。
2.3 验证

打开终端,执行命令:

ls -l /dev |grep ttyUSB

1

输出:

lrwxrwxrwx 1 root root 7 11月 19 17:59 IMU -> ttyUSB0
crwxrwxrwx 1 root root 188, 0 11月 19 17:59 ttyUSB0
在这里插入图片描述
这样就说明USB端口号就绑定成功了,USB设备的端口号就是/dev/IMU。
3 参考

https://www.cnblogs.com/CZM-/p/6113475.html

Ubuntu系统中,固定USB设备的端口号是一个常见的需求,特别是在使用多个USB串口设备时。由于Linux内核默认为每次插入的USB设备动态分配端口号(如`/dev/ttyUSB0`, `/dev/ttyUSB1`等),当设备被拔出并重新插入后,其对应的设备文件名称可能会发生变化。这会导致应用程序无法正确识别设备或连接失败。 要实现USB设备端口号的固定绑定,通常通过udev规则来完成。这种方法基于设备的唯一属性(如供应商ID、产品ID或序列号)创建符号链接,从而确保设备始终映射到相同的路径。 ### 创建udev规则以固定USB设备端口号 1. **获取设备信息** 使用`lsusb`命令可以查看USB设备的供应商ID和产品ID: ```bash lsusb ``` 输出示例如下: ``` Bus 001 Device 005: ID 10c4:ea60 Silicon Labs CP210x UART Bridge ... ``` 其中`10c4`是供应商ID(`idVendor`),`ea60`是产品ID(`idProduct`)[^1]。 2. **查看设备属性** 使用`udevadm`命令查看设备的具体属性,用于编写更精确的udev规则: ```bash udevadm info --name=/dev/ttyUSB0 --attribute-walk ``` 找出可用于匹配的唯一属性,如`ATTRS{idVendor}`、`ATTRS{idProduct}`或`ATTRS{serial}`等。 3. **创建udev规则文件** 在`/etc/udev/rules.d/`目录下创建一个新的规则文件,例如`99-usb-serial.rules`: ```bash sudo nano /etc/udev/rules.d/99-usb-serial.rules ``` 添加如下格式的规则行,将设备绑定到固定的符号链接名称: ```bash KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", SYMLINK+="lidar" ``` 上述规则表示:对于所有匹配`idVendor=10c4`和`idProduct=ea60`的USB串口设备,将其绑定到`/dev/lidar`路径,并设置访问权限为所有用户可读写[^4]。 4. **重启udev服务并验证规则** 更新udev规则并重新加载服务: ```bash sudo udevadm control --reload-rules sudo systemctl restart udev ``` 拔插设备后检查是否生成了正确的符号链接: ```bash ls -l /dev | grep ttyUSB ``` 预期输出应包含类似以下内容: ``` lrwxrwxrwx 1 root root 7 Nov 29 14:03 lidar -> ttyUSB0 crw-rw-rw- 1 root dialout 188, 0 Nov 29 14:03 ttyUSB0 ``` 表明设备已成功绑定至`/dev/lidar`,并且即使设备重新插入,该路径也不会改变[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值