我正在运行 Debian Wheezy,但我的笔记本电脑没有串行端口。为什么我有/dev/ttyS*
,当我尝试读取/写入它们时会发生什么?
我的配置:
└──> ll /dev/ttyS*
crw-rw---T 1 root dialout 4, 64 Apr 30 09:21 /dev/ttyS0
crw-rw---T 1 root dialout 4, 65 Apr 30 09:21 /dev/ttyS1
crw-rw---T 1 root dialout 4, 66 Apr 30 09:21 /dev/ttyS2
crw-rw---T 1 root dialout 4, 67 Apr 30 09:21 /dev/ttyS3
└──> sudo cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:unknown port:000002F8 irq:3
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
└──> stty -g
6d02:5:4bf:8a3b:3:1c:7f:15:4:0:1:ff:11:13:1a:ff:12:f:17:16:ff:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
└──> dmesg | grep tty
[ 0.000000] console [tty0] enabled
[ 0.653544] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 0.712718] 00:02: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
附言:这里提到的情况是,用户有一个端口,在 /dev 下他有 4 个,但我没有。
答案1
您的主板上很可能确实存在 ttyS0 端口。而且主板上很可能也有一个连接器可以使用它!当我购买上一块主板时,我也得出了这个结论(通过查看列出的端口),然后我在主板手册中查找了所有连接器。没有直接连接到外部的连接器,只有一个小的“接头”。所以我将一根电缆连接到 db9 外部连接器,一切正常!
以下三个(ttyS1-S3
)很可能不存在,但列出是因为串行端口驱动程序测试了它们,这是许多 Linux 中的默认操作。请参阅手册页setserial
,这是 Linux 启动时调用的函数。它说:
在正常启动过程中,仅初始化 COM 端口 1-4,使用默认 I/O 端口和 IRQ 值,如下所示
编辑:顺便说一句,很容易看出它们是否ttyS*
以文件形式工作。只需尝试通过控制台命令向他们发送一些内容:
cat <some_short_file> > /dev/ttyS1
可能会给出I/O error
,因为没有连接驱动程序。 同样的ttyS0
可以正常工作。>
命令中的 将cat
命令的输出重定向到串行端口。cp shortfile /dev/ttyS0
也可以工作。
编辑:ttyS1-S3 并非物理存在,因此您无法使用它们。还有其他设备可以用作虚拟端口,例如伪终端 (pty) 和循环设备。检查维基百科和ptys 手册页. 其中 ptys 是字符设备,您可以使用循环设备进行块传输(例如,用于虚拟磁盘)。维基百科和手册页文档。
答案2
这些端口实际上存在于您的主板上。它们只是没有像(某些)台式机那样连接到外部端口。