虚拟终端实现中是否存在两个“虚拟串口”?

虚拟终端实现中是否存在两个“虚拟串口”?

下图展示了物理终端的情况(例如:VT100)已连接到运行 Unix 的计算机(例如:等离子11):

在此输入图像描述

请注意以蓝色突出显示的组件,这表明终端通过串行端口连接到计算机(图像显示“UART”而不是“串行端口”)。因此,基本上,终端有一个串行端口,通过电线连接到计算机上的串行端口(该图像也没有显示终端串行端口的组件)。

您可以在终端端更改串口波特率,也可以在计算机端更改串口波特率(参见这里)。


下图展示了虚拟终端在现代 Linux/Unix 机器上的实现方式:

在此输入图像描述

请注意以蓝色突出显示的组件,这表明终端仿真器直接连接到线路规程,而不使用两个“虚拟串行端口”。

现在我的问题是:这个图像(虚拟终端实现)显示了整个组件,还是应该在终端仿真器之后存在一个“虚拟串行端口”,而在线路规则之前应该存在另一个“虚拟串行端口”?

如果这两个“虚拟串口”确实存在,您是否也可以更改它们的波特率?

我从这两张图片中得到了这里

答案1

线路规则控制通过“线路”(即早期 UNIX 系统中的电线)对特殊字符(如软件流控制或字符生成信号)的处理。有几种可能的线路规则,tty 驱动程序调用负责该 tty 的线路规则。

所以在线路纪律前面有一个“虚拟串口”是完全没有意义的。第一张照片中没有,第二张照片中也没有。

线路规则反过来只调用内核的其他部分(串行端口驱动程序(USB、UART 等)或虚拟控制台的模拟器等),并且如果字符到达,也会被相应的驱动程序调用。因此,从某种意义上说,这是一个“虚拟交换机”,您可以在其中挂接不同的组件。

但是没有一对串行端口驱动程序能够以某种方式模拟以一定的速度通过线路将字节发送为位,然后将其从位重新组装为字节。因为这会不必要地缓慢,并且不提供功能。

不过,您可以设置波特率、停止位数量等。全部蒂蒂的。这些参数只是被不需要它们的驱动程序忽略,例如虚拟控制台。

答案2

波特率定义如下/etc/inittab

1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

本例中波特率为 38400。

相关内容