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