linux多个串口如何区分
linux多个串口如何区分详细介绍
在 Linux 系统中,多个串口设备的区分主要通过设备文件命名规则、硬件类型及系统工具来实现。以下是详细说明:
一、串口设备分类及命名规则
Linux 下的串口设备根据硬件类型分为三类,命名规则不同:
1.
传统硬件串口(COM 口,基于 BIOS/ISA)
- 设备名:
/dev/ttyS0、/dev/ttyS1、/dev/ttyS2...
对应传统 PC 的串口(如 COM1 对应ttyS0,COM2 对应ttyS1,依此类推),由主板硬件或 BIOS 配置决定。 - 适用场景:老旧主板自带串口,或通过 PCI/PCIe 扩展卡添加的传统串口(部分驱动可能仍映射为
ttySx)。
2.
USB 转串口设备(如 PL2303、CH340、CP2102 等芯片)
- 设备名:
- 多数驱动映射为
/dev/ttyUSB0、/dev/ttyUSB1...(按插入顺序编号,首次插入为 0,下次为 1,依此类推)。 - 部分 USB-CDC 类设备(如 Arduino 串口)可能映射为
/dev/ttyACM0、/dev/ttyACM1...
- 多数驱动映射为
- 特点:依赖 USB 转串口驱动,设备名随插入顺序变化(可通过 udev 规则固定)。
3.
PCI/PCIe 扩展串口卡(多端口串口卡)
- 设备名:
- 由驱动决定,可能是
/dev/ttySx(传统驱动)或/dev/ttyACMx、/dev/ttyUSBx(新型驱动,如 FTDI 多端口卡)。 - 例如:4 端口 PCIe 串口卡可能对应
ttyS2、ttyS3、ttyS4、ttyS5(需结合硬件文档确认)。
- 由驱动决定,可能是
二、区分串口设备的常用方法
1.
通过系统日志(dmesg)查看设备连接信息
- 插入设备后,执行以下命令实时监控设备接入:bash
- 输出示例(USB 转串口设备):plaintext
[12345.678] usb 1-2: FTDI USB Serial Device converter now attached to ttyUSB0 # 设备对应ttyUSB0[12346.901] usb 1-3: ch341-uart converter now attached to ttyUSB1 # 第二个设备对应ttyUSB1
- 传统串口 / PCI 卡:plaintext
[0.123] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A # 主板自带串口ttyS0[5.678] pci 0000:01:00.0: Serial controller: device XYZ Corp. (ttyS2 registered) # PCI卡串口ttyS2
2.
列出所有串口设备文件
bash
/dev/tty*
- 常见设备名分类:
- 传统串口:
ttyS0、ttyS1... - USB 转串口(非 CDC 类):
ttyUSB0、ttyUSB1... - USB-CDC 设备(如 Arduino):
ttyACM0、ttyACM1... - PCI/PCIe 串口卡:可能混合上述命名,需结合
dmesg或硬件驱动确认。
- 传统串口:
3.
通过 USB 设备信息区分(针对 USB 转串口)
- 查看 USB 设备的厂商和型号:bash
lsusb - 结合
dmesg中VID:PID与ttyUSBx的对应关系,确定具体设备。
4.
通过 PCI 设备信息区分(针对 PCI/PCIe 串口卡)
- 列出 PCI 设备:bash
lspci - 示例输出:plaintext
02:00.0 Serial controller: Silicon Labs CP210x UART Bridge (rev 02) # PCI卡对应设备,查看驱动映射的tty名
三、固定设备名称(避免插入顺序影响)
若需稳定设备名(如脚本中使用固定串口),可通过udev 规则实现:
1.
为 USB 设备创建规则
- 基于
VID/PID或设备序列号:bashlsusb
/etc/udev/rules.d/99-serial.rules
- 添加规则(示例:将 VID:PID=1a86:7523 的设备命名为
ttyUSB_weather_station):plaintextSUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="ttyUSB_weather_station"
2.
为 PCI 设备创建规则
- 基于 PCI 设备的
vendor和device ID:bashlspci - 添加规则(示例):plaintext
SUBSYSTEM=="tty", ATTRS{vendor}=="0x1234", ATTRS{device}=="0x5678", SYMLINK+="ttyPCI_serial"
3. 应用规则
bash
udevadm control --reload-rules
四、总结
- 命名规则:根据硬件类型区分
ttySx(传统 / PCI 串口)、ttyUSBx/ttyACMx(USB 转串口)。 - 实时查看:通过
dmesg监控设备接入,结合lsusb/lspci定位硬件信息。 - 固定名称:使用 udev 规则按 VID/PID 或序列号命名,确保设备名稳定。
通过以上方法,可清晰区分 Linux 下的多个串口设备,并根据需求配置稳定的访问方式。