Linux 什么是;控制台[ttyS0]启用意味着什么?

Linux 什么是;控制台[ttyS0]启用意味着什么?,linux,serial-port,uart,Linux,Serial Port,Uart,我正在尝试通过COM端口在单板计算机和PC之间进行通信。在单板计算机上,我运行的是DebianLinux,我可以使用两个UART。在其中一个UART(ttyS1)上,我可以毫无问题地进行通信(发送和接收)。当我尝试在另一个UART(ttyS0)上通信时,发送工作正常,但是接收丢失了中的第一个字节(向PC上的控制台发送一条错误消息,说明键入的字符不是命令),然后正确接收所有未来的字符 如果我从接收切换到发送,然后再返回接收,同样的情况也会发生。如果我保持在接收模式,我可以接收字符,只要我想没有数据

我正在尝试通过COM端口在单板计算机和PC之间进行通信。在单板计算机上,我运行的是DebianLinux,我可以使用两个UART。在其中一个UART(ttyS1)上,我可以毫无问题地进行通信(发送和接收)。当我尝试在另一个UART(ttyS0)上通信时,发送工作正常,但是接收丢失了中的第一个字节(向PC上的控制台发送一条错误消息,说明键入的字符不是命令),然后正确接收所有未来的字符

如果我从接收切换到发送,然后再返回接收,同样的情况也会发生。如果我保持在接收模式,我可以接收字符,只要我想没有数据丢失。似乎是从发送到接收的转换导致了这种情况的发生

正如我前面提到的,我在另一个UART(ttyS1)上没有看到这个问题。我开始寻找两个端口不同的原因。我使用相同的程序为两个UART设置发送和接收,因此问题不在程序设置中。当我键入命令
dmesg | grep tty
时,我发现了一件事,我得到了以下信息:

[    0.000000] Kernel command line: console=ttyS0,115200 root=/dev/mmcblk0p2 roo twait loglevel=8 panic=10
[    0.446780] sunxi-uart.1: ttyS0 at MMIO 0x1c28400 (irq = 2) is a U6_16550A
[    1.114996] console [ttyS0] enabled
[    1.154643] sunxi-uart.3: ttyS1 at MMIO 0x1c28c00 (irq = 4) is a U6_16550A
我看到ttyS0具有与之相关联的“控制台[ttyS0]已启用”,而ttyS1没有。我想知道启用控制台[ttyS0]意味着什么

另外,是否有办法禁用它以查看这是否是导致“第一字节数据丢失”的原因?我在单板计算机的设置中看到ttyS0被指定为“调试端口”

我还想知道这是否类似于控制台

有人能解释一下启用控制台意味着什么吗

我看到ttyS0具有与之相关联的“控制台[ttyS0]已启用”,而ttyS1没有。我想知道启用控制台[ttyS0]意味着什么

我认为这是因为unix的历史。最初,正如我们所解释的,有两种串行端口:
/dev/tty*
/dev/cu*
长话短说,
tty
用于通过串行端口的传入连接,
cu
用于通过串行端口的传出连接在另一端,有unix控制台,串行终端

由于单板计算机通过串行端口使用控制台进行通信,并且没有“真实”控制台(我指的是显示器和键盘)将控制台绑定为伪tty(the/dev/tty),很可能您的
/dev/ttyS0
确实被内核用作输入和输出的控制台,耐心地等待终端连接并断言DTR线路。但在那里,您开始发送数据,而不遵守已有40年历史的协议


为了解决这种情况,您可能需要更改引导加载程序中的内核引导行,以便更改
控制台=/dev/ttyS0
。您可能还需要查看
/dev/inittab
并查看
getty
行。

控制台是内核日志所在的tty

引导时,您可以通过内核参数选择一个特定的参数,这可以在您提供的日志中看到,在“内核命令行:console=TTYS0115200root=/dev/mmcblk0p2 roo-twait-loglevel=8=10”行中


您可以选择另一个控制台(如果在您的平台中可用),这样ttyS0在内核引导时不会获得任何字节。

我假设第一个UART,您的意思是ttyS0在发送和接收中工作正常?实际上,ttyS1工作正常,ttyS0丢失了第一个字节。请注意更正。“发送工作正常,但接收丢失了第一个字节。””“这是不明确的。当问题发生时,哪一方在发射,哪一方在接收?“似乎是从发送到接收的转换导致了这种情况的发生。”——没有Tx或Rx“模式”(也称为半双工)。16550A USART应设置为全双工,并能够随时同时发送和接收。“console enabled”(控制台启用)消息不是问题的原因。我使用“调试”端口作为控制台,没有任何问题。您使用的是哪种终端仿真器?“但是接收丢失了第一个字节”——这似乎是您的结论。请提供原始数据或证据来支持这一点(屏幕捕获或程序代码?/“没有“真正的”控制台(我指的是显示器和键盘)”——Unix确实使用了TTY作为控制台。机械电传打字机被VDT取代。视频显示器和键盘是家用电脑和个人电脑的概念。“我使用过的许多SBC上的一个“调试”端口始终是一个3线串行端口,没有DTR线路。这正是我所说的,@sawdust。我不明白你为什么要反驳我说的和我一样的话。在最后一段中,我考虑了这两个问题:要么是内核将/dev/ttyS0作为控制台,要么是getty按原样使用它。如果它是一个getty,那么它很可能期望端口配置中出现类似tty的行为。不是真的。TTY是控制台。你误解了;我不同意你的意见。不需要“显示器和键盘”或DTR信号。Linux可以在3线串行端口作为控制台的情况下正常运行。有数千个运行嵌入式Linux的SOC可以证明这一点。到目前为止,OP没有提供任何证据表明SBC配置错误。这些信息看起来都很正常,“控制台”这个词最初来自一件家具,你可以坐在那里输入数据,并访问计算机的输出。当我谈到“真正的”控制台时,请注意下面的引语,我只是说绑定到系统的键盘+鼠标(不管它是如何完成的),我是说,从设计上讲,SBC没有这样的功能。Linux可以使用3线串行端口完美运行,但这并不意味着它可以。如果有一个
getty
绑定到串行端口,那么就有可能出现trou