UART子系统(三) UART属于TTY体系之一

简介: UART子系统(三) UART属于TTY体系之一

UART属于TTY体系的一部分,所以介绍一下TTY。


TTY体系中设备节点的差别


参考资料


解密TTY

彻底理解Linux的各种终端类型以及概念

Linux终端和Line discipline图解

What Are Teletypes, and Why Were They Used with Computers?


1. 傻傻分不清


/dev/ttyS0、/dev/ttySAC0、/dev/tty、/dev/tty0、/dev/tty1、/dev/console,


它们有什么差别?

设备节点 含义
/dev/ttyS0、/dev/ttySAC0 串口
/dev/tty1、/dev/tty2、/dev/tty3、…… 虚拟终端设备节点
/dev/tty0 前台终端
/dev/tty 程序自己的终端,可能是串口、也可能是虚拟终端
/dev/console 控制台,又内核的cmdline参数确定


TTY/Terminal/Console/UART,


它们有什么差别?

术语 含义
TTY 来自teletype,最古老的输入输出设备,现在用来表示内核的一套驱动系统
Terminal 终端,暗含远端之意,也是一个输入输出设备,可能是真实设备,也可能是虚拟设备
Console 控制台,含控制之意,也是一种Terminal,权限更大,可以查看内核打印信息
UART 串口,它的驱动程序包含在TTY驱动体系之内


2. 要讲历史了


2.1 电传机teletype


teletype,更准确地说是teleprinter,是一种通信设备,可以用来发送、接收文本信息。


teletype是一家公司的名字,它生产的teleprinter实在太有名,结果公司名变成了这类产品的名字:teleprinter都被称为teletype了。

1670935534909.jpg

teletype被用来传输商业电报,想像一下:


把两台teletype的线缆接在一起,或者使用无线技术连接两台teletype

这边打字,另一边就可以接收到信息并通过纸张打印出来

注意:这两台teletype可以离得很远


2.2 计算机需要控制


2.2.1 使用teletype


teletype的简称就是TTY。


最古老的计算机支持的是批处理模型:


怎么编程?卡片打孔,然后喂给计算机。

怎么得到输出信息?计算机根据结果在卡片上打孔,需要专人翻译这些卡片。

如果把两台teletype的其中一台,替换为计算机,不就更方便了吗?可以即时输入指令、即时看到结果。


于是teletype变成了计算机的终端、Terminal,远端之意。


teletype和计算机可以放在一个房间里,也可以放在很远很远的地方。

1670935554093.jpg

teletype是通过串口(UART)跟计算机相连的:

1670935579179.jpg

那时计算机很贵,发展出多用户系统,多个用户可以分时使用计算机,降低成本:

1670935587699.jpg


2.2.2 teletype被淘汰了


1960年代,CRT显示器+键盘,替代了teletype:


显示器替代了纸张

速度更快

成本更低

它仍然只是一个终端(terminal),通过线缆连接到计算机

虽然不再是teletype,但是它的驱动程序仍然叫做TTY

1670935599449.jpg


2.2.3 个人电脑和虚拟终端


上图长得像电脑,但是它只是一个终端,它要连接到计算机才能工作。


这才是电脑:计算单元(CPU、硬盘、内存等等)、终端(键盘、显示器)都齐全了:

1670935610951.jpg

硬件上只有一套键盘、显示器。


但是在Linux系统中,我们可以打开多个命令行程序(也叫terminal、shell),每个程序都对应一个"虚拟终端"。


3. 在Ubuntu上演示


按住键盘:Ctrl+Alt+F3启动一个虚拟终端,Ctrl+Alt+F4再启动一个虚拟终端。


在里面切换为root用户:

sudo passwd root // 如果su root不成功,就先设置root密码
su root


3.1 各类设备节点的差别


由于历史原因,下图中两条红线之内的代码被称为TTY子系统。(红线之上之应用端命令界面,红线之下是物理设备终端,中间称为TTY子系统)


它既支持UART,也支持键盘、显示器,还支持更复杂的功能(比如伪终端)。

1670935644066.jpg

3.2 /dev/ttyN(N=1,2,3,…)


/dev/tty3、/dev/tty4:表示某个程序使用的虚拟终端

// 在tty3、tty4终端来回切换,执行命令
echo hello > /dev/tty3
echo hi    > /dev/tty4


3.3 /dev/tty0


/dev/tty0:表示前台程序的虚拟终端


你正在操作的界面,就是前台程序


其他后台程序访问/dev/tty0的话,就是访问前台程序的终端,切换前台程序时,/dev/tty0是变化的

// 1. 在tty3终端执行如下命令
// 2. 然后在tty3、tty4来回切换
while [ 1 ]; do echo msg_from_tty3 > /dev/tty0; sleep 5; done


3.4 /dev/tty


/dev/tty表示本程序的终端,可能是虚拟终端,也可能是真实的中断。


程序A在前台、后台间切换,它自己的/dev/tty都不会变。

// 1. 在tty3终端执行如下命令
// 2. 然后在tty3、tty4来回切换
while [ 1 ]; do echo msg_from_tty3 > /dev/tty; sleep 5; done


3.5 Terminal和Console的差别


Terminal含有远端的意思,中文为:终端。Console翻译为控制台,可以理解为权限更大、能查看更多信息,内核信息。


比如我们可以在Console上看到内核的打印信息,从这个角度上看:


Console是某一个Terminal

Terminal并不都是Console。

我们可以从多个Terminal中选择某一个作为Console

很多时候,两个概念混用,并无明确的、官方的定义


3.6 /dev/console


选哪个?内核的打印信息从哪个设备上显示出来? 可以通过内核的cmdline来指定,

比如: console=ttyS0 console=tty 我不想去分辨这个设备是串口还是虚拟终端, 有没有办法得到这个设备? 有!通过/dev/console!

console=ttyS0时:/dev/console就是ttyS0

console=tty时:/dev/console就是前台程序的虚拟终端

console=tty0时:/dev/console就是前台程序的虚拟终端

console=ttyN时:/dev/console就是/dev/ttyN

console有多个取值时,使用最后一个取值来判断

相关文章
|
机器学习/深度学习 人工智能 自动驾驶
「AIGC」Agent AI智能体的未来:技术、伦理与经济的交汇点
Agent AI智能体融合机器学习与深度学习,推动社会效率与创新,但也引发伦理、法律及就业挑战。技术上,它们能自我优化、积累知识,如自动驾驶汽车通过学习改善驾驶。伦理上,需建立AI准则,确保透明度和责任归属,如医疗AI遵循道德原则。经济上,AI改变就业市场结构,创造新职业,如AI顾问,同时要求教育体系更新。未来,平衡技术进步与社会影响至关重要。
916 0
|
运维 监控 网络协议
什么是运营商级 NAT (CGNAT)?
【4月更文挑战第16天】
6679 10
什么是运营商级 NAT (CGNAT)?
|
Linux API 数据安全/隐私保护
|
6月前
|
监控 Linux 开发者
理解Linux操作系统内核中物理设备驱动(phy driver)的功能。
综合来看,物理设备驱动在Linux系统中的作用是至关重要的,它通过与硬件设备的紧密配合,为上层应用提供稳定可靠的通信基础设施。开发一款优秀的物理设备驱动需要开发者具备深厚的硬件知识、熟练的编程技能以及对Linux内核架构的深入理解,以确保驱动程序能在不同的硬件平台和网络条件下都能提供最优的性能。
341 0
|
数据采集 监控 算法
阿里云百炼模型训练评测
【7月更文挑战第1天】阿里云百炼提供一站式的模型开发服务,包括大模型训练、调用与部署。用户可查看剩余调用次数,点击开通服务以使用模型。计费基于调用量,涵盖推理、训练和部署。开通服务需同意协议,成功后将收到短信通知。评测显示,平台功能丰富,易用性强,能显著提升模型效果,且模型部署简便。建议优化数据预处理工具并增加实例教程。
|
NoSQL Ubuntu Linux
基于ARM64的Qemu/KVM学习环境搭建2
基于ARM64的Qemu/KVM学习环境搭建2
|
计算机视觉 Python
将图像处理为灰度图和二值化图
【7月更文挑战第28天】将图像处理为灰度图和二值化图。
375 3
|
安全 前端开发 Java
[AIGC] 开源流程引擎哪个好,如何选型?
[AIGC] 开源流程引擎哪个好,如何选型?
763 1
|
消息中间件 JavaScript 物联网
MQTT常见问题之用rocketmq mqttdemo的MqttConsumer始终无法接收到消息如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
开发工具