诗和远方

Linux内核tty设备

tty一词源于Teletypes,或Teletypewriters,它是最早出现的一种终端字符型设备,类似打字机。

最初tty是指连接到Unix系统上的物理或者虚拟终端。随着时间的推移,当通过串行口能够建立起终端连接后,这个名字也用来指任何的串口设备。它还有多种类,例如串口(ttySn、ttySACn、ttyOn)、USB到串口的转换器(ttyUSBn),还有需要特殊处理才能正常工作的调制解调器等。

tty虚拟设备支持虚拟控制台,它能通过键盘及网络连接或者通过xterm会话登录到计算机上。

终端为主机提供了人机接口,每个人都通过终端使用主机的资源。(起初终端和控制台都不是个人电脑的概念,而是多人共用的小型中型大型计算机上的概念。)终端有字符终端和图形终端两种。一台主机可以连很多终端。

控制台是一种特殊的人机接口, 是人控制主机的第一人机接口。而主机对于控制台的信任度高于其他终端。

对此还可以结合内核启动代码中init进程打开/dev/console和执行两次sys_dup(0),以及标准输入、标准输出、标准出错,还有就是进程fork后的标准输入输出的复制情况来一起理解。


linux按POSIX标准把个人计算机当成小型机来用,在控制台上通过getty软件虚拟了六个字符哑终端(或者叫虚拟控制台终端tty1-tty6)(数量可以在/etc/inittab里自己调整)和一个图型终端, 在虚拟图形终端中又可以通过软件(如rxvt)再虚拟无限多个伪终端(pts/0等)。

Linux系统的终端设备一般有以下几种:

1、控制台

系统控制台/dev/console 是与操作系统交互的设备。系统所产生的信息会发送到该设备上。平时我们看到的PC只有一个屏幕和键盘,它其实就是控制台。

当前控制台: /dev/tty。你可以输入命令 “tty"显示当前映射终端,也可以使用命令“ps -ax”来查看其他进程与哪个控制终端相连。

虚拟控制台 /dev/ttyn(是进程虚拟控制台,对应tty1-n)比较特殊的是/dev/tty0,他代表当前虚拟控制台,是当前所使用虚拟控制台的一个别名。因此不管当前正在使用哪个虚拟控制台(注意:这里是虚拟控制台,不包括伪终端),系统信息都会发送到/dev/tty0上。

2、伪终端pty(pseudo-tty)

它多用于模拟终端程序,是远程登陆(telnet、ssh、xterm等)后创建的控制台设备。它是成对出现的逻辑终端设备(即master和slave设备, 对master的操作会反映到slave上)。

使用telnet 或ssh等方式登录Linux主机,此时均通过pty设备。

当telnet从远端获取了一个字符时,该字符就会通过ptmx、pts/*传递给 getty程序,而getty程序就会通过pts/*、ptmx和telnet程序往网络上返回“login:”字符串信息。这样,登录程序与telnet程序就通过“伪终端”进行通信。

telnet<--->/dev/ptmx(master)<--->pts/*(slave)<--->getty

实验:

ls /dev/pts/*

3、串口终端(/dev/ttySn)

串行端口对应的设备名称是/dev/tts/0(或/dev/ttyS0)、/dev/tts/1(或/dev /ttyS1)等,设备号分别是(4,0)、(4,1)等(对应于win系统下的COM1、COM2等)。

若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可。例如,在命令行提示符下键入:echo tekkaman> /dev/ttyS1会把“tekkaman”发送到连接在ttyS1(COM2)端口的设备上。

Linux

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Catalog
标签列表
最新
最热
常用网站
站点信息
  • 文章总数:2015
  • 页面总数:1
  • 分类总数:17
  • 标签总数:517
  • 评论总数:0
  • 浏览总数:556728
Archives
Copyright © 2017-2019 www.my889.com Some Rights Reserved.
推荐使用 Chrome 浏览器浏览本站
沪ICP备17052342号
Sitemap XML