在Linux系统中,终端设备非常重要,没有终端设备,系统将无法向用户反馈信息,Linux中包含控制台Console、串行终端Serial terminal和伪终端Pseudo terminal3类终端设备。

终端设备

  tty一词源于Teletypes,或Teletypewriters,它是最早出现的一种终端设备,类似电传打字机,由Teletype公司生产。最初tty是指连接到Unix系统上的物理或者虚拟终端。终端是一种字符型设备,通常使用tty来统称各种类型的终端设备。随着时间的推移,当通过串行口能够建立起终端连接后,这个名字也用来指任何的串口设备。它还有多种类,例如串口(ttySn、ttySACn、ttyOn)、USB到串口的转换(ttyUSBn),还有需要特殊处理才能正常工作的调制解调器(比如传统的WinModem类设备)等。tty虚拟设备支持虚拟控制台,它能通过键盘及网络连接或者通过xterm会话登录到计算机上。

1. 控制台终端

  • 系统控制台 /dev/console
      是与操作系统交互的设备。系统所产生的信息会发送到该设备上。 平时我们看到的PC只有一个屏幕和键盘,它其实就是控制台。目前只有在单用户模式下,才允许用户登录控制台 /dev/console。(可以在单用户模式下输入tty命令进行确认)。
      在UNIX系统中,计算机显示器通常被称为控制台终端(Console)。它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备 特殊文件与之相关联:tty0、tty1、tty2等。当用户在控制台上登录时,使用的是tty1。使用Alt+[F1—F6]组合键时,我们就可以切换到tty2、tty3等上面去。tty1–tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因 此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。用户可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话期存在。只有 系统或超级用户root可以向/dev/tty0进行写操作。
      在Linux 中,可以在系统启动命令行CMD中指定当前的输出终端,格式如下:
    console=device, options
    其中device 指代的是终端设备,可以是tty0(前台的虚拟终端)、ttyX(第X个虚拟终端)、ttySX(第X个串口)、lp0(第一个并口)等。options 指代对device进行的设置,它取决于具体的设备驱动。对于串口设备,参数用来定义为:波特率、校验位、位数,格式为BBBBPN,其中BBBB表示波 特率,P表示校验(n/o/e),N表示位数,默认options是9600n8。
      用户可以在内核命令行中同时设定多个终端,这样输出将会在所有的终端上显示,而当用户调用open()打开/dev/console时,最后一个终端将会返回作为当前值。例如:
    console=ttyS1, 9600 console=tty0
    定义了2个终端,而调用open()打开/dev/console时,将使用虚拟终端tty0。但是内核消息会在tty0 VGA虚拟终端和串口ttyS1上同时显示。

  • 当前控制台 /dev/tty
      这是应用程序中的概念,如果当前进程有控制终端(Controlling Terminal),那么/dev/tty就是当前进程控制台的设备文件。对于你登录的shell,/dev/tty就是你使用的控制台,设备号是(5,0)。不过它并不指任何物理意义上的控制台,/dev/tty会映射到当前设备(使用命令“tty”可以查看它具体对应哪个实际物理控制台设备)。输出到/dev/tty的内容只会显示在当前工作终端上(无论是登录在ttyn中还是pty中)。你如果在控制台界面下(即字符界面下)那么dev/tty就是映射到dev/tty1-6之间的一个(取决于你当前的控制台号),但是如果你现在是在图形界面(Xwindows),那么你会发现现在的/dev/tty映射到的是/dev/pts的伪终端上。/dev/tty有些类似于到实际所使用终端设备的一个联接。
      可以使用命令“ps –ax”来查看进程与哪个控制终端相连使用命令“tty”可以查看它具体对应哪个实际终端设备。/dev/tty有些类似于到实际所使用终端设备的一个联接。

  • 虚拟控制台 /dev/ttyn
      dev/ttyn是进程虚拟控制台,他们共享同一个真实的物理控制台。tty0, tty1-6。
      比较特殊的是/dev/tty0,他代表当前虚拟控制台,是当前所使用虚拟控制台的一个别名。因此不管当前正在使用哪个虚拟控制台(注意:这里是虚拟控制台,不包括伪终端),系统信息都会发送到/dev/tty0上。只有系统或超级用户root可以向/dev/tty0进行写操作。tty0是系统自动打开的,但不用于用户登录。在Framebuffer设备没有启用的系统中,可以使用/dev/tty0访问显卡。

2. 串行端口终端(/dev/tty*)

  是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间串行端口设备通常被称为终端设备,那时它的最大用途就是用来连接终端,所以这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0)、/dev/tts/1(或/dev /ttyS1)等,设备号分别是(4,0)、(4,1)等(对应于win系统下的COM1、COM2等)。若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。

3. 伪终端 Pseudo Terminal

  是成对的逻辑终端设备,并存在成对的设备文件,如/dev/ptyp3和/dev/ttyp3,它们与实际物理设备并不直接相关。如果 一个程序把ttyp3看作是一个串行端口设备,则它对该端口的读/写操作会反映在该逻辑终端设备对应的ptyp3上,而ptyp3则是另一个程序用于读写 操作的逻辑设备。这样,两个程序就可以通过这种逻辑设备进行互相交流,使用ttyp3的程序会认为自己正在与一个串行端口进行通信。
  是终端的发展,为满足现在需求(比如网络登陆、xwindow窗口的管理)。它多用于模拟终端程序,是远程登陆(telnet、ssh、xterm等)后创建的控制台设备。
  历史上,有两套伪终端软件接口:

  • BSD接口:较简单,master为/dev/pty[p-za-e][0-9a-f] ;slave为 /dev/tty[p-za-e][0-9a-f] ,它们都是配对的出现的。例如/dev/ptyp3和/dev/ttyp3。但由于在编程时要找到一个合适的终端需要逐个尝试,所以逐渐被放弃。
  • Unix 98接口:使用一个/dev/ptmx作为master设备,在每次打开操作时会得到一个master设备fd,并在/dev/pts/目录下得到一个slave设备(如 /dev/pts/3和/dev/ptmx),这样就避免了逐个尝试的麻烦。由于可能有好几千个用户登陆,所以/dev/pts/*是动态生成的,不象其他设备文件是构建系统时就已经产生的硬盘节点(如果未使用devfs、udev、mdev等) 。第一个用户登陆,设备文件为/dev/pts/0,第二个为/dev/pts/1,以此类推。它们并不与实际物理设备直接相关。现在大多数系统是通过此接口实现pty。
      我们在X Window下打开的终端或使用telnet 或ssh等方式登录Linux主机,此时均通过pty设备。例如,如果某人在网上使用telnet程序连接到你的计算机上,则telnet程序就可能会打开/dev/ptmx设备获取一个fd。此时一个getty程序就应该运行在对应的/dev/pts/*上。当telnet从远端获取了一个字符时,该字符就会通过ptmx、pts/传递给 getty程序,而getty程序就会通过pts/、ptmx和telnet程序往网络上返回“login:”字符串信息。这样,登录程序与telnet程序就通过“伪终端”进行通信。

借鉴博客:
https://blog.csdn.net/huchuan1985/article/details/46699037
https://blog.csdn.net/titan_max/article/details/51329218
https://blog.csdn.net/dog250/article/details/78766716
https://blog.csdn.net/dog250/article/details/78818612

linux TTY devices相关推荐

  1. 一文彻底讲清Linux tty子系统架构及编程实例

    [摘要]本文详细解读了linux系统下的tty子系统的深层次原理和架构,并参考了LDD3中的代码实例讲述了无硬件下实现一个简单的tty设备驱动模块的编写.对了解tty子系统及下部串口驱动模块的学习有较 ...

  2. linux TTY子系统(3) - tty driver

    了解linux tty driver 1.TTY device   kernel从设备模型和字符设备两个角度对它进行了抽象: 设备模型的角度   为每个"数据通道"注册了一个stu ...

  3. linux tty结构体,linux tty驱动架构分析

    再看Linux tty驱动过程中发现linux的驱动构架中,面向对象的思想已经根深蒂固.就比如这串口驱动,代码中经常有一些貌似和串口无关的代码,比如,tty_register_driver等.但我们却 ...

  4. linux怎么看tty连接哪个端口,Linux TTY framework(4)_TTY driver

    Linux TTY framework(4)_TTY driver 作者:wowo 发布于:2016-10-25 22:40 分类:TTY子系统 1. 前言 本文将从驱动工程师的角度去看TTY fra ...

  5. Linux TTY Driver

    引用 蜗窝科技-tty驱动分析 彻底理解Linux的各种终端类型以及概念 - dog250 Linux终端和Line discipline图解 - dog250 Linux设备驱动-tty驱动 - 看 ...

  6. Linux TTY子系统(1) - 了解TTY

    了解linux tty 1.TTY概述   TTY 是 Teletype 或 Teletypewriter 的缩写,原来是指电传打字机,后来这种设备逐渐键盘和显示器取代.不管是电传打字机还是键盘显示器 ...

  7. linux tty设备驱动,18.1. 一个小 TTY 驱动

    ## 18.1. 一个小 TTY 驱动 为解释 tty 核心如何工作, 我们创建一个小 tty 驱动, 可以被加载, 以及写入读出, 并且卸载. 任何一个 tty 驱动的主要数据结构是 struct ...

  8. 2.9 Linux tty终端

    Linux在内核启动完成以后,需要启动用户态的各种应用服务,让linux可以提供给用户使用.通常用户程序的执行过程如图所示. 其执行顺序是/sbin/init --–>/sbin/mingett ...

  9. linux内核去掉pty,Linux tty pty pts观念区别

    基本观点: 1. tty(终端装备的统称): tty一词源于Teletypes,或许teletypewriters,原来指的是电传打字机,是议决串行线用打印机键盘议决阅读和发送信息的东西,后来这东西被 ...

最新文章

  1. 代码整洁之道——童子军军规
  2. 从手机App通过WebSocket向浏览器推送数据
  3. java deep clone util_Java Clone深拷贝与浅拷贝的两种实现方法
  4. 基础入门_Python-内建函数.运维开发中eval内建函数的最佳实践?
  5. kali linux超级用户_如何优雅的在Linux上使用Powershell]
  6. 作死 | 程序猿的花式作死,因为你的幽默,你的前途有了!
  7. kali linux nmap命令的使用
  8. steam方舟服务器直连,方舟服务器在steam上等待发布 | 手游网游页游攻略大全
  9. 手机qq2010java触屏_手机QQ2010(Java触屏)Beta2发布:操作更流畅
  10. 深度学习七:GAN和DCGAN入门
  11. 深度学习数据增强(data_augmentation):Keras ImageDataGenerator
  12. 快手如何通过算法和算力支撑用户的增长
  13. 【YBT2023寒假Day11 B】催眠大师(费用流)
  14. 【梁小国】教你怎么签自己的名字
  15. [IJCAI2016]Makeup Like a Superstar: Deep Localized Makeup Transfer Network
  16. 《Java并发编程的艺术》读后笔记-Java中的并发工具类(第八章)
  17. linux vim操作提示:“Can't open file for writing”或“operation not permitted”的解决办法
  18. 写给地方网站的创业新手(转载)
  19. 记录战斗记录你,详解妖尾战斗录像系统
  20. CSR8670项目实战:BlueHeartSound电子心音计

热门文章

  1. apollo 配置中心 支持php,Apollo配置中心搭建过程
  2. String类的copyValueOf与valueOf的区别以及valueOf与toString的区别
  3. 向上取整函数:ceil
  4. 八年,回归博客园——说说我的感想
  5. Django世界-迈出第十步-Redis前言(上)
  6. C++ 学习之查找算法adjacent_find(相邻重复查找)、binary_search(二分法查找)
  7. java以下声明变量中 是不合法的_Java考试题(一)
  8. vue几条常见的表单验证规则
  9. Endnote X9收藏网址--安装、使用
  10. 设计模式:分解与抽象