debian上修复串口数量和顺序

在工控机上安装了debian12,发现串口数量和顺序都不对,记录一下

解决数量问题

检查内核启动参数 (最常见原因)

许多 Linux 发行版(包括 Debian)默认的内核参数中,串口的最大数量(8250.nr_uarts)通常被限制为 4。

1
cat /sys/module/8250/parameters/nr_uarts

如果返回 4,说明内核只允许识别 4 个串口。

修改/etc/default/grub

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash 8250.nr_uarts=8"

然后更新并重启

1
2
sudo update-grub
sudo reboot

其它原因

BIOS/UEFI 设置

去bios里设置

解决顺序问题

首先,这是工业主板/工控机常见问题:系统 ttyS0~ttyS5 的顺序 ≠ 面板丝印 COM1~COM6。

为什么乱序

  • 内核按 I/O 地址、IRQ、ACPI 枚举顺序 编号

  • 主板 BIOS 里 COM 序号是固件定义,Linux 不认

  • 多串口芯片(如 EXAR/ASIX/Winbond)常 倒序、跳号 枚举

解决

目前我觉得映射对照表比较好

1. 测试对应关系

可以两两相连,然后互发信息。也可以外接串口设备来确定

以下为收发相关命令

接收

可以直接用cat

1
cat /dev/ttyS0

发送

可以用 echo

1
echo -n "s3" > /dev/ttyS0

设置波特率

使用用stty设置波特率

1
stty -F /dev/ttyS0 9600

使用udev来映射

1) 创建规则文件

1
udevadm info --name /dev/ttyS0

找到 DEVPATH

或者更暴力一点

1
udevadm info --name /dev/ttyS* | grep DEVPATH

如输出以下

1
2
3
4
5
6
E: DEVPATH=/devices/pnp0/00:08/tty/ttyS0
E: DEVPATH=/devices/pnp0/00:03/tty/ttyS1
E: DEVPATH=/devices/pnp0/00:04/tty/ttyS2
E: DEVPATH=/devices/pnp0/00:05/tty/ttyS3
E: DEVPATH=/devices/pnp0/00:06/tty/ttyS4
E: DEVPATH=/devices/pnp0/00:07/tty/ttyS5

2) 创建规则文件
vim /etc/udev/rules.d/99-serial-fixed.rules

按你的映射写(示例):

1
2
3
4
5
6
SUBSYSTEM=="tty", DEVPATH=="/devices/pnp0/00:08/tty/ttyS0", SYMLINK+="COM5", GROUP="dialout", MODE="0660"
SUBSYSTEM=="tty", DEVPATH=="/devices/pnp0/00:03/tty/ttyS1", SYMLINK+="COM2", GROUP="dialout", MODE="0660"
SUBSYSTEM=="tty", DEVPATH=="/devices/pnp0/00:04/tty/ttyS2", SYMLINK+="COM3", GROUP="dialout", MODE="0660"
SUBSYSTEM=="tty", DEVPATH=="/devices/pnp0/00:05/tty/ttyS3", SYMLINK+="COM4", GROUP="dialout", MODE="0660"
SUBSYSTEM=="tty", DEVPATH=="/devices/pnp0/00:06/tty/ttyS4", SYMLINK+="COM6", GROUP="dialout", MODE="0660"
SUBSYSTEM=="tty", DEVPATH=="/devices/pnp0/00:07/tty/ttyS5", SYMLINK+="COM1", GROUP="dialout", MODE="0660"

3) 生效

1
2
udevadm control --reload
udevadm trigger

现在可用:

1
2
stty -F /dev/COM1 9600
echo "Hello" > /dev/COM1

后续

写一个半自动映射的程序

0%