TTY

参考文档

Linux 设备文件简介
/dev/tty, /dev/console and /dev/ttyN
Linux的终端类型


TTY

tty是Teletype的缩写,Teletype是最早出现的一种终端设备,很象电传打字机,是由Teletype公司生产的。后来,出现了各种类型的终端设备,这些终端设备都统称为TTY,即终端.

所有的终端都是字符型设备,分为很多类型.


/dev目录下的终端文件

linux@ubuntu:~/work/tmp$ ls /dev/tty*
/dev/tty    /dev/tty16  /dev/tty24  /dev/tty32  /dev/tty40  /dev/tty49  /dev/tty57  /dev/tty8       /dev/ttyS14  /dev/ttyS22  /dev/ttyS30
/dev/tty0   /dev/tty17  /dev/tty25  /dev/tty33  /dev/tty41  /dev/tty5   /dev/tty58  /dev/tty9       /dev/ttyS15  /dev/ttyS23  /dev/ttyS31
/dev/tty1   /dev/tty18  /dev/tty26  /dev/tty34  /dev/tty42  /dev/tty50  /dev/tty59  /dev/ttyprintk  /dev/ttyS16  /dev/ttyS24  /dev/ttyS4
/dev/tty10  /dev/tty19  /dev/tty27  /dev/tty35  /dev/tty43  /dev/tty51  /dev/tty6   /dev/ttyS0      /dev/ttyS17  /dev/ttyS25  /dev/ttyS5
/dev/tty11  /dev/tty2   /dev/tty28  /dev/tty36  /dev/tty44  /dev/tty52  /dev/tty60  /dev/ttyS1      /dev/ttyS18  /dev/ttyS26  /dev/ttyS6
/dev/tty12  /dev/tty20  /dev/tty29  /dev/tty37  /dev/tty45  /dev/tty53  /dev/tty61  /dev/ttyS10     /dev/ttyS19  /dev/ttyS27  /dev/ttyS7
/dev/tty13  /dev/tty21  /dev/tty3   /dev/tty38  /dev/tty46  /dev/tty54  /dev/tty62  /dev/ttyS11     /dev/ttyS2   /dev/ttyS28  /dev/ttyS8
/dev/tty14  /dev/tty22  /dev/tty30  /dev/tty39  /dev/tty47  /dev/tty55  /dev/tty63  /dev/ttyS12     /dev/ttyS20  /dev/ttyS29  /dev/ttyS9
/dev/tty15  /dev/tty23  /dev/tty31  /dev/tty4   /dev/tty48  /dev/tty56  /dev/tty7   /dev/ttyS13     /dev/ttyS21  /dev/ttyS3
linux@ubuntu:~/work/tmp$ ls -l /dev/tty*
crw-rw-rw- 1 root tty     5,  0  2月 23 22:24 /dev/tty
以下省略,都是字符文件
linux@ubuntu:~/work/tmp$ ls /dev/pts/
0  1  2  4  6  7  ptmx
linux@ubuntu:~/work/tmp$ ll /dev/console  
crw------- 1 root root 5, 1  2月 23 20:51 /dev/console

linux中的设备

Linux 中的设备按照存取方式的不同,可以分为两种:

  • 字符设备

    无缓冲且只能顺序存取

  • 块设备

    有缓冲且可以随机(乱序)存取

而按照是否对应物理实体,也可以分为两种:

  • 物理设备

    对实际存在的物理硬件的抽象

  • 虚拟设备

    不依赖于特定的物理硬件,仅是内核自身提供的某种功能

无论是哪种设备,在 /dev 目录下都有一个对应的文件(节点),并且每个设备文件都必须有主/次设备号,主设备号相同的设备是同类设备,使用同一个驱动程序(虽然目前的内核允许多个驱动共享一个主设备号,但绝大多数设备依然遵循一个驱动对应一个主设备号的原则)。可以通过 cat /proc/devices 命令查看当前已经加载的设备驱动程序的主设备号。

注意:在 /dev 目录下除了各种设备节点之外还通常还会存在:FIFO管道、Socket、软/硬连接、目录。这些东西并不是设备文件,因此也就没有主/次设备号。


终端类型

之前说了,终端都是字符类型,那么按照是否对应物理实体的话,分为物理设备和虚拟设备两种

那么有以下几种类型

  1. 虚拟控制台

    对应下面几个文件
    /dev/tty
    /dev/tty0
    /dev/console
    /dev/tty1 - /dev/tty63
    
    /dev/tty代指当前TTY设备
    echo hello > /dev/tty 会打印hello到当前屏幕 
    /dev/tty0
    echo hello > /dev/tty0 会打印hello到当前屏幕(注意只在/dev/tty1下实验成功)
    /dev/console是一个虚拟的tty,它映射到真正的tty上
    echo hello > /dev/console 会打印hello 到当前屏幕(注意只在/dev/tty1下实验成功)
    
    可以在Ubuntu界面下键入组合键ctrl + alt + F1,然后登录,然后输入命令tty,会输出/dev/tty1
    
    /dev/console是个只输出的设备,功能很简单,只能在内核中访问
    tty是char设备,可以被用户程序访问。
    实际的驱动比如串口对一个物理设备会注册两次,一个是tty,一个是console,并通过在console的结构中记录tty的主次设备号建立了联系。
    
    在内核中,tty和console都可以注册多个。当内核命令行上指定console=ttyS0之类的参数时,首先确定了printk实际使用那个 console作为输出,其次由于console和tty之间的对应关系,打开/dev/console时,就会映射到相应的tty上。用一句话说: /dev/console将映射到默认console对应的tty上。
    
    /dev/console是一个虚拟的tty,它映射到真正的tty上,console有多种含义,这里特指printk输出的设备,驱动使用register_console注册一个console。
    
    tty1 –tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。
    所以说tty0 和console是一样的?
    
    串口TTY和虚拟TTY是两种实际常用的TTY。串口TTY基于串口构建,设备节点的形式为/dev/ttyS<N>的形式,一般主设备号为4,<N>一般为64~255。虚拟TTY用于给非TTY的设备提供TTY形式的接口,一般主设备号为4,<N>一般为0~63。
    
    
  2. 串口

    对应下下面几个文件
    /dev/ttyS0 - /devttyS191
    
  3. USB转串口

    对应下面几个文件
    /dev/ttyUSB0 - ?
    
  4. 伪终端

    对应下面几个文件
    /dev/pts/0 -/dev/pts/14 ?
    通过ssh 上去的就是这个终端
    其实在Ubuntu界面下打开的终端也是这个终端
    
  5. 其他终端

    /dev/ttyprintk
    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值