一、TTY子系统简介1、TTY简介TTY,源于Teleprinter的词,译为电传打字机,早期用来表示计算机终端设备。现在我们通常使用TTY,它是各种(物理/虚拟)终端的总称!Linux系统的终端设备一般分为四种:控制台终端、伪终端、串行终端和其他类型。下面我们就来详细了解一下Linux下的这些常用终端,为学习LinuxTTYFramework打下基础吧!2.控制台终端控制台终端包括:系统控制台、当前控制台和虚拟控制台。2.1系统控制台系统控制台,也就是我们Linux下的/dev/console,是一个与操作系统交互的设备,系统产生的信息都会发送给这个设备。目前仅在单用户模式下,允许用户登录控制台/dev/console。控制台具有缓冲的概念并为内核提供打印输出。内核将要打印的内容加载到缓冲区__log_buff中,然后将控制台指向一个激活的终端,以确定打印到哪里。console指向活动终端。比如我们在启动内核时,传入参数cnotallow=ttyS1,将console终端指向ttyS1串口设备。2.2当前控制台这是应用程序中的一个概念。如果当前进程有控制终端(ControllingTerminal),那么/dev/tty就是当前进程控制台的设备文件。对于登录的Shell,/dev/tty就是你使用的console,设备号(5,0),/dev/tty会映射到当前设备(使用命令tty查看它是哪个实际的物理console设备对应),/dev/tty的输出只会显示在当前工作的终端上。可以输入命令tty显示当前映射的实际终端,如:/dev/tty1或/dev/pts/0等。2.3虚拟控制台/dev/ttyn是一个进程虚拟控制台,它们共享同一个真实的物理终端安慰。在PC上,用户可以使用Ctrl+Alt+Fn进行切换,这个虚拟控制台对应tty1~n,其中:/dev/tty1代表第一个虚拟控制台;使用Ctrl+ALT+F2切换时,系统虚拟控制台为/dev/tty2,当前控制台(/dev/tty)指向/dev/tty2,特殊的为/dev/tty0,代表当前virtualconsole,其实就是当前使用的虚拟控制台的一个别名。因此,无论当前使用的是哪个虚拟控制台(注意:这里是虚拟控制台,不包括伪终端),系统信息都会被重新定位到/dev/tty0。只有系统或超级用户root可以写入/dev/tty0。tty0是系统自动开启的,但不用于用户登录3.伪终端伪终端(PseudoTerminal)是开发的终端。多用于模拟终端程序,是远程登录(telnet、ssh、xterm等)设备后创建的控制台。它是成对出现的逻辑终端设备(即主设备和从设备,对主设备的操作会反映到从设备上)。简单的说,master终端连接的是sshd、telnetd等用户空间的远程协议处理进程,而slave终端连接的是shell等实际进程。4、串口终端串口终端(SerialPortTerminal)是连接到计算机串口的终端设备。计算机将每个串行端口视为一个字符设备。因此,这些串口对应的设备名称为/dev/ttyS0、/dev/ttyS1等,设备号为(4,0)、(4,1)等。要向某个端口发送数据,您可以使用命令行将标准输出重定向到这些特殊文件名。我们可以在命令提示符下键入:echo"tekkaman">/dev/ttyS1将向连接到ttyS1(COM2)端口的设备发送“tekkaman”。内核2.6之后,部分三星芯片将串口终端设备节点命名为ttySACn。TI的Omap系列芯片从2.6.37开始。芯片自带的UART设备开始使用专有的omap-uart驱动,所以设备节点命名为ttyOn,以区别于使用8250驱动时的设备名“ttySn”。5.其他类型对于许多不同的字符设备,还有许多其他类型的终端设备专用文件,例如**/dev/ttyIn**终端设备用于ISDN设备。https://blog.csdn.net/liangzc1124/article/details/127469767
