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

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

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.mzph.cn/pingmian/41434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础入门怎么学习老挝语字母表?《老挝语翻译通》App真人发音教学,学习老挝语字母发音和词汇句子!

这段老挝文字翻译成中文是什么意思?有什么好用的老挝语翻译工具推荐吗? 快速翻译:中老语言无缝转换,实时翻译,让沟通更流畅。 学习工具:零基础入门到流利对话,老挝语真人发音,让你的…

MaxKB开源知识库问答系统发布v1.3.0版本,新增强大的工作流引擎

2024年4月12日,1Panel开源项目组正式发布官方开源子项目——MaxKB开源知识库问答系统(github.com/1Panel-dev/MaxKB)。MaxKB开源项目发布后迅速获得了社区用户的认可,成功登顶GitHub Trending趋势榜主榜。 截至2024年7月4日&…

docker仓库--centos7.9部署harbor详细过程与使用以及常见问题

文章目录 前言1.docker-compose是什么2.harbor是什么 centos7部署harbor详细过程与使用环境一、部署docker二、部署harbor1.下载docker-compose工具2.harbor安装3.拷贝样本文件,并修改文件4.安装harbor,安装完成自行启动5.查看 三、harbor的使用1.创建项…

Https网站如何申请免费的SSL证书及操作使用指南

前言 在当今互联网环境下,HTTPS已成为网站安全的标配,它通过SSL/TLS协议为网站数据传输提供加密,保障用户信息的安全。申请并部署免费SSL证书,不仅能够提升网站的专业形象,还能增强用户信任。本文将详细介绍如何在知名…

StreamSets: 数据采集工具详解

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 欢迎关注微信公众号:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&a…

Golang语法规范和风格指南(一)——简单指南

1. 前引 一个语言的规范的学习是重要的,直接关系到你的代码是否易于维护和理解,同时学习好对应的语言规范可以在前期学习阶段有效规避该语言语法和未知编程风格的冲突。 这里是 Google 提供的规范,有助于大家在开始学习阶段对 Golang 进行一…

Tensorflow入门实战 T07-Vgg16网络进行咖啡豆识别

本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 1、 前言 这周学习的主要内容是,使用tensorflow编写代码,使用vgg-16网络模型,完成咖啡豆的识别。 2、完整代码 imp…

【密码学基础】对随机不经意传输(Random Oblivious Transfer)的理解

ROT在offline阶段生成大量的OT对,在online阶段通过one-pad方式高效加密,并且只需要简单的异或运算就能实现OT过程(去随机化)。 在ROT中,有一个关键点是:需要考虑offline阶段的选择比特和online阶段的选择比…

C++ 视觉开发 六.特征值匹配

以图片识别匹配的案例来分析特征值检测与匹配方法。 目录 一.感知哈希算法(Perceptual Hash Algorithm) 二.特征值检测步骤 1.减小尺寸 2.简化色彩 3.计算像素点均值 4.构造感知哈希位信息 5.构造一维感知哈希值 三.实现程序 1.感知哈希值计算函数 2.计算距离函数 3…

vscode 生成项目目录结构 directory-tree 实用教程

1. 安装插件 directory-tree 有中文介绍,极其友好! 2. 用 vscode 打开目标项目 3. 快捷键 Ctrl Shift p,输入 Directory Tree 后回车 会在 README.md 文件的底部生成项目目录(若项目中没有 README.md 文件,则会自动创…

用NanoID换掉 UUID,好处是?【送源码】

当我们在分布式环境中存储一些数据的时候,不得不面对的一个选择,就是ID生成器。 使用一个唯一的字符串,来标识一条完整的记录。 这时候,不能使用md5或者sha1来对整个记录做摘要,因为我们后续还要改动这个记录。也不能…

【C++】日期类

鼠鼠实现了一个日期类,用来练习印证前几篇博客介绍的内容!! 目录 1.日期类的定义 2.得到某年某月的天数 3.检查日期是否合法 4.(全缺省)构造函数 5.拷贝构造函数 6.析构函数 7.赋值运算符重载 8.>运算符重…

高效PD,稳定传输,LDR6023CQ芯片,打造顶级直播体验

在当今市场,一款备受瞩目的直播神器——无线领夹麦克风(MIC),正风靡于网红直播、在线教育、专业采访、高清视频录制及视频会议等多个领域。麦克风,这一昔日课堂上的常见设备,已随着科技的飞速发展而焕然一新…

数字信号处理及MATLAB仿真(2)——离散系统

上回书说到如何来编写一些简单的离散时间序列,今天咱们就来谈谈一些关于常系数差分方程的操作吧。 说到这里咱们对于常系数差分方程可能最关心的就是怎么去求解了。 其中最关键的部分就是filter函数,可以用来计算系统在输入信号为x的输出信号y。大家学过…

ASUS/华硕枪神5 G533Q G733Q系列 原厂win10系统 工厂文件 带F12 ASUS Recovery恢复

华硕工厂文件恢复系统 ,安装结束后带隐藏分区,一键恢复,以及机器所有驱动软件。 系统版本:Windows10 原厂系统下载网址:http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意:仅支持以上型号专用…

JAVA--JSON转换工具类

JSON转换工具类 import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackso…

NoSQL 非关系型数据库 Redis 的使用:

redis是基于内存型的NoSQL 非关系型数据库,本内容只针对有基础的小伙伴, 因为楼主不会做更多的解释,而是记录更多的技术接口使用,毕竟楼主不是做教学的,没有教学经验。 关于redis的介绍请自行搜索查阅。 使用redis数据…

h5 video 标签播放经过 java 使用 ws.schild( jave、ffmpeg ) 压缩后的 mp4 视频只有声音无画面的问题排查记录

1. 引入 ws.schild MAVEN 依赖&#xff1a; <dependency><groupId>ws.schild</groupId><artifactId>jave-all-deps</artifactId><version>3.5.0</version></dependency><dependency><groupId>ws.schild</grou…

idm下载慢怎么回事 idm批量导入下载使用方法

IDM (Internet Download Manager)是一款兼容性大&#xff0c;支持多种语言的下载管理软件&#xff0c;它可以自动检测并下载网页上的内容&#xff0c;这正是这一优点&#xff0c;使得它受到了广大用户的喜爱。在日常使用互联网的过程中&#xff0c;快速下载文件对我们来说非常重…

Victor CMS v1.0 SQL 注入漏洞(CVE-2022-26201)

前言 CVE-2022-26201 是 Victor CMS v1.0 中发现的一个 SQL 注入漏洞。该漏洞允许攻击者通过特制的 SQL 查询注入到应用程序中&#xff0c;从而访问或操作数据库中的数据。以下是详细信息&#xff1a; 漏洞描述&#xff1a; 类型&#xff1a;SQL 注入 (SQL Injection)影响版本…