在Linux系统中,USB串口设备的名称通常是根据设备连接的顺序动态分配的。因此,当设备重新连接时,它可能会被分配不同的设备文件名(如/dev/ttyUSB0
、/dev/ttyUSB1
等)。要固定USB串口设备的名称,可以使用udev规则。
规则文件以.rules
为扩展名,并且通常存储在/etc/udev/rules.d/
目录中
1、查找USB串口设备的唯一标识符:通常,USB串口设备具有唯一的标识符,可以通过lsusb
命令来查看。你需要找到与你的USB串口设备相关的信息,比如厂商ID(Vendor ID)和产品ID(Product ID)。
lsusb
例如:Bus 003 Device 024: ID 1234:5678 Silicon Labs CP210x UART Bridge
其中1234是厂商ID,5678是产品ID
2、创建udev规则:创建一个udev规则文件,以根据设备的唯一标识符来创建符号链接。这样,无论设备连接到系统时分配的设备文件名是什么,都可以通过这个符号链接来引用它。
sudo vim /etc/udev/rules.d/99-usb-serial.rules
以下是一个示例udev规则文件(假设你的USB串口设备的厂商ID为1234
,产品ID为5678
):
SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="my_usb_serial"
# /etc/udev/rules.d/99-usb-serial.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="my_usb_serial"
在这个例子中,当具有指定厂商ID和产品ID的USB串口设备连接到系统时,会创建一个名为my_usb_serial
的符号链接。
3、重新加载udev规则:完成规则文件的编写后,重新加载udev规则,使其生效。你可以通过执行以下命令来实现:
sudo udevadm control --reload-rules
4、使用固定的设备文件名:现在,你可以在代码中使用这个固定的符号链接(例如/dev/my_usb_serial
)来打开USB串口设备,而不用担心设备文件名变化的问题。
这样,无论USB串口设备连接到系统时分配的设备文件名是什么,你都可以通过固定的符号链接来引用它。