Linux下dev/console、tty、pts、ttySn的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/uestcyms/article/details/87070148

dev设备

按照读取方式:

  • 字符设备(Character devices):无缓冲且只能顺序读取。
  • 块设备(Block devices):有缓冲且可以随机(乱序)读取。

按照是否对应物理实体:

  • 物理设备:对实际存在的物理硬件的抽象。
  • 虚拟设备:不依赖特定的物理硬件,仅是内核自身提供的某种功能。(虚拟设备与真实设备的关系是多对多)

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

设备号的来历
linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。

crw-------  1 root root      5,   1 Feb 11 02:08 console
crw-rw-rw-  1 root tty       5,   0 Feb 10 21:22 tty
crw--w----  1 root tty       4,   0 Feb 10 19:18 tty0
crw--w----  1 root tty       4,   1 Feb 10 19:18 tty1
crw-rw----  1 root dialout   4,  64 Feb 10 19:18 ttyS0
crw-rw----  1 root dialout   4,  65 Feb 10 19:18 ttyS1
crw-rw-rw-  1 root tty       5,   2 Feb 11 02:09 ptmx
crw--w---- 1  yms  tty      136, 0 Feb 10 21:25 pts/0
crw------- 1  root tty      136, 1 Feb 10 22:46 pts/1

最左侧c代表是字符设备(Character), 上图4、5、136为主设备号,0、1、64、65为次设备号;
次设备号的主要用途:

  • 区分设备驱动程序控制的实际设备;
  • 区分不同用途的设备(misc系列设备)
  • 区分块设备的分区(partition)

为了使应用程序区分所控制设备的类型,内核使用主设备号。而存在多台同类设备时,为了选择其中的一种,设备驱动程序就使用次设备号。
块设备具有被称为分区的分配领域。例如,硬盘在物理上是一个设备,从内核的角度,硬盘被分为多个分区,而以这些分区为对象则形成了文件系统,此时,次设备号既表示设备,也表示分区。

brw-rw----  1 root disk      8,   0 Feb 10 19:18 sda
brw-rw----  1 root disk      8,   1 Feb 10 19:18 sda1
brw-rw----  1 root disk      8,   2 Feb 10 19:18 sda2
brw-rw----  1 root disk      8,   5 Feb 10 19:18 sda5
brw-rw----  1 root disk      8,  16 Feb 10 19:18 sdb
brw-rw----  1 root disk      8,  17 Feb 10 19:18 sdb1
brw-rw----  1 root disk      8,  18 Feb 10 19:18 sdb2
brw-rw----  1 root disk      8,  21 Feb 10 19:18 sdb5

内核能够识别的所有设备都记录在源码树Documentation/admin-guide/devices.txt下。

Console、tty、pts间关系及区别

dev下设备名 含义
tty 控制终端 当前进程的终端的设备特殊文件
ttySn 串口终端 UART串口,[说明]"UART串口"是指 8250/16450/16550 UART串行控制芯片
ttyn 控制台终端 tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上;
console 控制台终端 在Linux系统中,计算机显示器通常被称为控制台终端(Console)。它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等;一般是与tty0相连。console配置在/boot/grub/grub.cfg、/boot/grub/default中配置,启动内核时传递相关参数
pts 伪终端,pseudoterminal slave 伪终端(Pseudo Terminal)是成对的逻辑终端设备(即master和slave设备, 对master的操作会反映到slave上),master是/dev/ptmx slave是pts/n
ptmx 所有 Unix98 PTY master 的复用器 master是/dev/ptmx slave是pts/n

tty、console(5号设备)对应到tty0-n,ttySn(4号设备),pts/n中的一个。
pts是伪终端,master是ptmx,slave是pts/n;

猜你喜欢

转载自blog.csdn.net/uestcyms/article/details/87070148