Linux kernel TTY framework位于“drivers/tty”目录中,其软件框架如下面所示:
从上往下看,最上面是应用层,其次是字符设备驱动,然后是TTY核心层,TTY驱动层, TTY线路规程。
用户层:在用户空间,我们操作TTY的方法就是通过系统调用open,read,write读写设备文件,如:/dev/tty、/dev/console等。
通用字符设备驱动:以字符设备驱动的形式,向应用程序提供统一接口open, read, write,以便输入输出数据。
TTY子系统位于标准字符驱动之下,其中包括:TTY核心层,TTY线路规程,TTY驱动层。
TTY Core:是对整个tty设备的抽象,对用户提供统一的接口。
TTY Line Discipline:线路规程,以特殊的方式对数据进行二次加工,通常表现为协议的转换,对传输数据的格式化,以便可以虚拟的“插入”到任何tty设备。
TTY Driver:该层主要用于实现各类终端的驱动,用以控制实际硬件设备,用于收发数据。其有3种不通类型的驱动:控制台,串口,pty。其中,控制台和 pty 驱动已经被编写进内核。
如果想真正的理解TTY驱动架构,那么下面这张图会更实用,更能加深对TTY驱动的理解和记忆。
这张架构图完美阐释了TTY子系统的架构图,对理解TTY子系统读写等操作流程有很大帮助。