在工控机上安装了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
2sudo update-grub
sudo reboot
其它原因
BIOS/UEFI 设置
去bios里设置
解决顺序问题
首先,这是工业主板/工控机常见问题:系统 ttyS0~ttyS5 的顺序 ≠ 面板丝印 COM1~COM6。
为什么乱序
内核按 I/O 地址、IRQ、ACPI 枚举顺序 编号
主板 BIOS 里 COM 序号是固件定义,Linux 不认
多串口芯片(如 EXAR/ASIX/Winbond)常 倒序、跳号 枚举
解决
目前我觉得映射对照表比较好
1. 测试对应关系
可以两两相连,然后互发信息。也可以外接串口设备来确定
以下为收发相关命令
接收
可以直接用cat1
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
6E: 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
6SUBSYSTEM=="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
2udevadm control --reload
udevadm trigger
现在可用:1
2stty -F /dev/COM1 9600
echo "Hello" > /dev/COM1
后续
写一个半自动映射的程序