Linux TTY framework(2)_软件架构

作者:wowo 发布于:2016-9-27 22:42

分类:TTY子系统

1. 前言

由“Linux TTY framework(1)_基本概念”的介绍可知,在Linux kernel中,TTY就是各类终端(Terminal)的简称。为了简化终端的使用,以及终端驱动程序的编写,Linux kernel抽象出了TTY framework:对上,向应用程序提供使用终端的统一接口;对下,提供编写终端驱动程序(如serial driver)的统一框架。

本文是Linux TTY framework分析的第二篇文章,将从整体架构的角度,介绍Linux TTY framework,以便分解出功能相对独立的子模块,以便后续的分析。

2. 软件架构

Linux kernel TTY framework位于“drivers/tty”目录中,其软件框架如下面图片1所示:

图片1 Linux TTY framework框架

和Linux其它的framework类似,TTY framework通过TTY core屏蔽TTY有关的技术细节,对上以字符设备的形式向应用程序提供统一接口,对下以TTY device/TTY driver的形式提供驱动程序的编写框架。具体请参考后续章节介绍。

2.1 TTY Core

TTY core是TTY framework的核心逻辑,功能包括:

1)以字符设备的形式,向用户空间提供访问TTY设备的接口,例如: 设备号(主, 次)        字符设备                                   备注

(5, 0)                     /dev/tty                                     控制终端(Controlling Terminal)

(5, 1)                     /dev/console                             控制台终端(Console Terminal)

(4, 0)                     /dev/vc/0 or /dev/tty0                  虚拟终端(Virtual Terminal)

(4, 1)                     /dev/vc/1 or /dev/tty1                  同上

…                         …                                             …

(x, x)                     /dev/ttyS0                                 串口终端(名称和设备号由驱动自行决定)

…                         …                                             …

(x, x)                     /dev/ttyUSB0                            USB转串口终端

…                         …                                             …

注1:控制终端、控制台终端、虚拟终端等概念,比较抽象,我会在后续的文章中详细介绍。

2)通过设备模型中的struct device结构抽象TTY设备,并通过struct tty_driver抽象该设备的驱动,并提供相应的register接口。TTY驱动程序的编写,简化为填充并注册相应的struct tty_driver结构。

注2:TTY framework弱化了TTY设备(图片1中使用虚线框标注)的概念,通常情况下,可以在注册TTY驱动的时候,自动分配并注册TTY设备。

3)使用struct tty_struct、struct tty_port等数据结构,从逻辑上抽象TTY设备及其“组件”,以实现硬件无关的逻辑。

4)抽象出名称为线路规程(Line Disciplines)的模块,在向TTY硬件发送数据之前,以及从TTY设备接收数据之后,进行相应的处理(如特殊字符的转换等)。

2.2 System Console Core

Linux kernel的system console主要有两个功能:

1)向系统提供控制台终端(Console Terminal) ,以便让用户登录进行交互操作。

2)提供printk功能,以便kernel代码进行日志输出。

System console core模块使用struct console结构抽象system console功能,具体的driver不需要关心console的内部逻辑,填充该接口并注册给kernel即可。

2.3 TTY Line Disciplines

线路规程(Line Disciplines)在TTY framework中是一个非常优雅的设计,我们可以把它看成设备驱动和应用接口之间的一个适配层。从字面意思理解,就是辅助TTY driver,将我们通过TTY设备键入的字符转换成一行一行的数据[3],当然,实际情况远比这复杂,例如在蜗窝x project所使用的kernel版本中,存在如下的Line Disciplines(以n_为前缀,我们后续的文章会更为详细的介绍): pengo@DESKTOP-CH8SB7C:~/work/xprj/linux$ ls drivers/tty/n_*

drivers/tty/n_gsm.c   drivers/tty/n_r3964.c        drivers/tty/n_tracesink.c  drivers/tty/n_tty.c

drivers/tty/n_hdlc.c  drivers/tty/n_tracerouter.c  drivers/tty/n_tracesink.h

2.4 TTY Drivers以及System Console Drivers

最后,对内核以及驱动工程师来说,更关注的还是具体的TTY设备驱动。在kernel为我们搭建的如此beauty的框架下面,编写相应的driver就成为一件比较简单的事情了。当然的kernel中,主要的TTY driver有两类:

1)虚拟终端(Virtual Terminal,VT)驱动,位于drivers/tty/vt中,负责实现VT(后续文章会详细介绍)有关的功能。

2)串口终端驱动,也即我们所熟知的serial subsystem(话说终于到重点了,哈哈),位于drivers/tty/serial中。

3. 总结

本文对Linux TTY framework的软件框架作了一个简单的介绍,目的是从整体上了解Linux TTY有关的软件实现。基于本文的描述,后续计划从如下角度继续TTY framework的分析: 控制终端、控制台终端、虚拟终端等概念的理解及解释;

TTY core的分析;

System Console Core的分析;

Serial subsystem(串口子系统)的分析;

虚拟终端(VT)的分析;

常用线路规程(Line Disciplines)的介绍和分析;

等等。

4. 参考文档

[2] 控制终端(controlling terminal),https://linux.die.net/man/4/tty

原创文章,转发请注明出处。蜗窝科技,www.wowotech.net。

评论:

鱼儿

2019-08-28 20:23

遇到一个奇怪的问题,在串口终端中,赋值粘贴一条指令,第一个字符会多显示了一次。通过网络的方式登录,却没有这个问题

2016-09-28 09:47

wowo 什么时候讲下canbus啊。这个网上资料很少啊

2016-09-28 21:35

@emeralddream:多谢关注。can一般工业控制用的比较多,我们这些搞消费类的,确实很少接触。有时间了可以写一下,不过您也知道,我们时间太少,见谅哈~~~

发表评论:

昵称

邮件地址 (选填)

个人主页 (选填)

linux tty 软件包,Linux TTY framework(2)_软件架构相关推荐

  1. linux tty 软件包,linux学习之安装ttylinux(世界最小的linux操作系统)(转载)

    第一步,用WinRAR解压缩bootcd-i486-8.1.iso.gz,变成,bootcd-i486-8.1.iso镜像文件备用. 第二步,在Virtual Box中新建一个虚拟电脑,并指定内存大小 ...

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

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

  3. vt linux tty中文,Linux输入子系统和tty关系影述

    多转自 1.Linux输入子系统(Input Subsystem): 在Linux中,输入子系统是由输入子系统设备驱动层.输入子系统核心层(Input Core)和输入子系统事件处理层(Event H ...

  4. Linux DMA Engine framework(2)_功能介绍及解接口分析

    转载.蜗窝科技,www.wowotech.net. Linux DMA Engine framework(2)_功能介绍及解接口分析 作者:wowo 发布于:2017-5-2 22:47 分类:Lin ...

  5. linux 什么是tty console和tty和串口的关系 如何在linux下查看tty对应哪个串口

    什么是TTY https://blog.csdn.net/goooooooooo/article/details/1302301?ops_request_misc=%257B%2522request% ...

  6. linux设备驱动,tty串口编程 如何查看linux下串口是否可用?串口名称等

    如何查看linux下串口是否可用?串口名称等? http://zhidao.baidu.com/question/419148559.html 查看串口是否可用,可以对串口发送数据比如对com1口,e ...

  7. 关于linux UART驱动和tty架构的理解

    关于linux UART驱动和tty架构的理解 最近要开发一个驱动程序,需要用到串口和SPI接口.平台的串口驱动程序本身在开发板中已经被实现了,也可以就这样直接使用,但是这样分开使用的结果就是在串口和 ...

  8. linux踢出多余tty连接终端

    linux踢出多余tty连接终端 服务器连接终端查看并踢出 [root@localhost ~]# who -------查看当前有那么多终端正在连接中 root tty1 2022-02-17 11 ...

  9. Linux串口驱动程序(1)-tty驱动程序架构

    1.tty概念分析 在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备.由于串口也是一种终端,因此这里引入终端这个概念 串口终端(/dev/ttyS*) ...

  10. linux pts设备,Linux中tty和pts指的是什么

    Linux中tty和pts指的是什么 发布时间:2020-11-17 14:55:05 来源:亿速云 阅读:135 作者:小新 这篇文章将为大家详细讲解有关Linux中tty和pts指的是什么,小编觉 ...

最新文章

  1. 语言 全排列 函数_Power Query 中日期时间格式转换需要了解的区域语言对照表
  2. 【转】【QT】 Threads, Events and QObjects
  3. opencv学习(part1)--OpenCv框架介绍
  4. html文本框样式大全,HTML文本框样式大全
  5. 单片机c语言模块化实例程序设计,单片机C语言模块化设计
  6. Softmax回归与冗余性
  7. Namenode双机热备之Pacemaker
  8. Linux操作系统原理与应用08:文件系统
  9. java里的sqlite在哪_设备上sqlite数据库的位置
  10. linux源码分析汇总
  11. 1000句英语经典口语 (1)
  12. 从《黑暗森林》到《萤火意志》:外表与内在极度失衡的“艺术品”
  13. 渲染吃显卡还是CPU,如何高效3D渲染?
  14. Mongoose disconnected. Mongoose connection error: MongoError: Authentication failed. (node:1532) Unh
  15. 品达通用_9. pd-tools-log
  16. android app检测更新版本,《Android APP应该有的东西》之功能篇:版本检测更新
  17. 宝真酒业:借助用友U8cloud数智化转型,小集团也能“小而美”
  18. 印度和印度尼西亚有什么关系吗?
  19. 【移动通信】 01-移动通信概论
  20. Robust Definition

热门文章

  1. AVR之bootloader介绍
  2. 【转】wait_fences: failed to receive reply: 10004003问题的引起原因
  3. 远程桌面控制VC源码剖析
  4. 在线文件管理系统 下载地址
  5. 30.Linux/Unix 系统编程手册(上) -- 线程:线程同步
  6. 24.Linux/Unix 系统编程手册(上) -- 进程的创建
  7. 16.TCP/IP 详解卷1 --- BOOTP:引导程序协议
  8. 绝对定位元素、浮动元素会生成一个块级框
  9. RabbitMQ延迟消息队列实现定时任务完整代码示例
  10. spring-boot配置文件中server.context-path不起作用