NXP i.MX8系列平台开发讲解 - 3.18 Linux tty子系统介绍(一)

news/2024/9/24 7:38:06/

专栏文章目录传送门:返回专栏目录

Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】


目录

1. TTY 起源

2. Linux 系统中的TTY

2.1 Linux TTY 设备形式

2.2 Linux TTY framework

2.3 驱动核心相关文件

2.4 以串口为例,TTY数据流向


1. TTY 起源

TTY 代表 TeleTYpe。如果你在谷歌上搜索电传打字机这个词,就会出现一张看起来像打字机的设备的图片。打字机是如何成为 Linux 操作系统的重要组成部分的?

电传打字机是通过围绕电子通道上的信息传输的一系列创新而产生的。它的历史可以追溯到 1840 年代。1920 年代后期,多项创新和合作导致了电传交换网络的发展。电报最终发展到全球超过 100,000 个连接,在二战后的全球通信中发挥着至关重要的作用。

与此同时,计算机技术也在进步。早期的计算机一次只能运行一个程序,但在 1960 年代,市场上出现了多进程计算机。这些计算机可以通过命令行界面与用户实时交互。突然需要输入和输出设备。务实的工程师没有建造新的I/O机器,而是重复使用了现有的电传打字机。电传打字机已经上市,它们非常适合作为大型计算机的物理终端的用例。

用户现在可以在电传打字机上输入命令,并通过穿孔胶带接收计算机输出。后来版本的电传打字机是完全电子的,并使用了电子屏幕。用户可以移动光标并清除屏幕,这些功能在印刷纸电传打字机上不可用。

后来技术的发展迭代,计算机的巨大变化,物理终端打字机也慢慢淘汰,tty的出现了很多虚拟控制台,也就是常说的伪终端。

2. Linux 系统中的TTY

2.1 Linux TTY 设备形式

TTY 设备的多种类型,包括物理终端、虚拟终端和串口等。

2.2 Linux TTY framework

在Linux 中,TTY设备的种类繁多,从架构的角度而衍生出了TTY Framework ,有了这个TTY Framework 就很好的屏蔽了有关设备的具体细节,对用户来说只需要以字符设备的形式统一操作这写接口。

从TTY Framework图中分析,从上到下,应用层到字符设备驱动,TTY Core,TTY 驱动;

Application 层:只需要操作这些字符设备:/dev/console /dev/tty /dev/ttyS0 进行open close write read等操作;

Kernel 层TTY Core:有一个重要TTY Core,它将控制着每一个tty设备的数据流和数据格式,是的TTY Driver 能够以一种统一的方式处理获取硬件和控制硬件,对于上层提供了统一的访问和控制接口;

TTY Line Discipline: 线路规划,以特殊的方式对数据进行二次加工,通常表现为协议的转换;

TTY Driver: 各类终端的驱动,用以控制实际硬件设备,用于收发数据。

2.3 驱动核心相关文件

ls ./drivers/tty/tty* -al
-rw-rw-r-- 1 pub pub  5690 9月  11 10:14 ./drivers/tty/tty_audit.c
-rw-rw-r-- 1 pub pub  6691 9月  11 10:14 ./drivers/tty/tty_baudrate.c
-rw-rw-r-- 1 pub pub 16596 9月  11 10:14 ./drivers/tty/tty_buffer.c
-rw-rw-r-- 1 pub pub 89238 9月  11 10:14 ./drivers/tty/tty_io.c
-rw-rw-r-- 1 pub pub 22937 9月  11 10:14 ./drivers/tty/tty_ioctl.c
-rw-rw-r-- 1 pub pub 14618 9月  11 10:14 ./drivers/tty/tty_jobctrl.c
-rw-rw-r-- 1 pub pub 21391 9月  11 10:14 ./drivers/tty/tty_ldisc.c
-rw-rw-r-- 1 pub pub 10706 9月  11 10:14 ./drivers/tty/tty_ldsem.c
-rw-rw-r-- 1 pub pub  1177 9月  11 10:14 ./drivers/tty/tty_mutex.c
-rw-rw-r-- 1 pub pub  2367 9月  11 10:14 ./drivers/tty/ttynull.c
-rw-rw-r-- 1 pub pub 18630 9月  11 10:14 ./drivers/tty/tty_port.c

tty_io.c TTY设备初始化,读写,控制等基本功能;

tty_port.c提供了用于管理TTY端口的通用接口,用于抽象底层硬件与TTY核心之间的接口;

tty_ldisc.c处理TTY的行规则,例如处理控制字符、换行符等。每个TTY设备都有一个关联的行规则;

tty_buffer.c 提供了用于缓冲和处理TTY输入输出数据的功能,包括TTY缓冲区的初始化、写入、读取等操作;

2.4 以串口为例,TTY数据流向

用户层角度通过操作open write read接口调用TTY Core, TTY Core通过line discipline处理,当然数据如果不需要加工处理可以直接与tty 驱动层进行数据传输。TTY Driver 将数据才发送到硬件。对于read操作,数据通过tty_file_buffer_push到线路规划,再到核心层,再到用户层。


http://www.ppmy.cn/news/1474153.html

相关文章

206. 反转链表 (Swift 版本)

题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 解题 /*** Definition for singly-linked list.* public class ListNode {* public var val: Int* public var next: ListNode?* public init() { self.val 0; self.…

沙龙回顾|MongoDB如何充当企业开发加速器?

数据不仅是企业发展转型的驱动力,也是开发者最棘手的问题。前日,MongoDB携手阿里云、NineData在杭州成功举办了“数据驱动,敏捷前行——MongoDB企业开发加速器”技术沙龙。此次活动吸引了来自各行各业的专业人员,共同探讨MongoDB的…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【加密导入密钥(C/C++)】

加密导入密钥(C/C) 以加密导入ECDH密钥对为例,涉及业务侧加密密钥的[密钥生成]、[协商]等操作不在本示例中体现。 具体的场景介绍及支持的算法规格。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 设备A&#xf…

C# AOP面向切面编程

AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在将横切关注点(Cross-cutting Concerns)从业务逻辑中分离出来。在传统的面向对象编程中,横切关注点(如日志记录、…

elasticsearch-users和elasticsearch-reset-password介绍

elasticsearch 内置 elastic, kibana, logstash_system,beats_system 共4个用户,用途如下: elastic 账号:内置的超级用户,拥有 superuser 角色。 kibana 账号:用来连接 elasticsearch 并与之通信。Kibana 服务器以该用…

在网站存在漏洞的情况下强化安全防御

一、引言 网络安全是一个持续的战斗,尤其是在网站存在已知或未知漏洞的情况下。本文将探讨如何在网站存在漏洞的情况下,采取有效措施进行安全防御。 二、理解漏洞 首先,我们需要理解网站的漏洞。这些可能包括SQL注入、跨站脚本&#xff08…

Docker 容器出现 IP 冲突

Docker 容器出现 IP 冲突的情况可能由以下几个原因导致: 静态 IP 分配:如果你在 docker-compose.yml 文件中为多个容器手动设置了相同的静态 IP 地址,那么这些容器在启动时就会出现 IP 冲突。确保每个容器分配的静态 IP 地址是唯一的。桥接网…

触摸屏虚拟键盘组件 jQuery Virtual Keyboard使用 自定义键盘

如何在触摸设备上为输入域添加虚拟键盘? 一个插件可以解决这个问题,关键还支持高度自定义(git地址): GitHub - Mottie/Keyboard: Virtual Keyboard using jQuery ~ 官网地址:Virtual Keyboard 使用步骤&…