GNU/Linux - tty设备介绍

在 Linux 和其他类 Unix 操作系统中,"TTY "代表 "电传打字机"。最初,TTY 指的是用于文本通信的物理电传打字机终端,但在现代用法中,它一般指在图形环境或基于文本的控制台中用于文本输入和输出的虚拟终端或终端模拟器。

每个 TTY 都提供一个用户界面,通过命令行界面(CLI)与操作系统交互。用户可以使用 TTY 运行命令、启动程序和执行各种任务。

在 Linux 中,TTY 设备在 /dev 目录中表示为特殊文件,如 /dev/tty1, /dev/tty2 等表示虚拟终端,使用文本操作模式。用户可以使用 Ctrl+Alt+Fn 组合键在虚拟终端之间切换,其中 Fn 指 F1 至 F6(或更高,取决于系统配置)功能键。比如我使用Ubuntu,F1键会新开一个图形界面登录窗口,F2键是当前界面,F3 ~ F6,会新开文本模式的tty登录界面。使用用户名和密码登录,登出使用”logout“命令,或者直接关闭终端窗口。每个终端都是独立的session,F1 ~ F6分别对应/dev/tty1 ~ /dev/tty6。

"/dev/pts/0" , "/dev/pts/1" 等表示终端模拟器使用的伪终端。它们用于图形环境或通过 SSH 或 telnet 远程访问系统。每个用户会话通常都有自己的伪终端,你多开一个控制台,就多一个伪终端。

“tty " 前缀是类 Unix 操作系统中用来表示终端设备的惯例。 "/dev/tty "及其变体("/dev/ttyS0"、"/dev/tty1 "等)代表不同类型的终端设备,每种设备都有特定的用途。

In Linux and other Unix-like operating systems, "TTY" stands for "teletypewriter." Originally, TTY referred to physical teletypewriter terminals used for text-based communication, but in modern usage, it generally refers to the virtual terminals or terminal emulators used for text input and output within a graphical environment or a text-based console.

Each TTY provides a user interface to interact with the operating system through a command-line interface (CLI). Users can run commands, launch programs, and perform various tasks using a TTY. 

In Linux, TTY devices are represented as special files in the /dev directory, such as "/dev/tty1",  "/dev/tty2", etc., for virtual terminals in text mode. Users can switch between virtual terminals using the Ctrl+Alt+Fn key combinations, where Fn refers to function keys from F1 to F6 (or higher, depending on the system configuration).

And "/dev/pts/0" ,  "/dev/pts/1" , etc., for pseudo-terminals used by terminal emulators. They are used in graphical environments or when accessing the system remotely via SSH or telnet. Each user session typically has its own pseudo-terminal.

This “tty” prefix is a convention used in Unix-like operating systems to denote terminal devices.   ”/dev/tty“ and its variants (”/dev/ttyS0“, ”/dev/tty1“, etc.) represent different types of terminal devices. Each of these devices serves a specific purpose.

Also there are some special suffixes in different environments. 

比如在x86_64 Ubuntu中,

$ ls /dev/tty*显示的输出结果:/dev/tty/dev/tty0 ~ /dev/tty63/dev/ttyprintk/dev/ttyS0 ~ /dev/ttyS31/dev/ttyUSB0$ ls /dev/pts/0  1  ptmx$ ls /dev/ptmx/dev/ptmx

tty0 ~ tty63,表示可用的虚拟终端。

ttyS0 ~ ttyS31,表示的是串口设备,serial port (COM0 ~ COM31),表示物理或虚拟串口(physical or virtual serial port)。这么多序号的设备节点都存在,表示的是虚拟串口。这些串口是用来和外部串口设备进行通讯的,比如modems,serial printers等。

ttyprintk是用于调试和监控(debugging and monitoring) kernel-level 事件和信息的(events and messages),将kernel log发送到缓冲区,然后使用dmesg来读取。

这里/dev/ttyUSB0是接了一个设备,serial-to-usb的串口转USB线,这个是真实存在的一个物理串口设备。

/dev/pts/0 ~ /dev/pts1 是伪终端,因为我就开了2个终端窗口,所以是数量是2。

/dev/pts/ptmx以及/dev/ptmx是master pseudo-terminal device,主伪终端设备,用来管理其他伪终端。

在i.MX93 ARM-Linux中:

# ls /dev/tty*/dev/tty/dev/tty0 ~ /dev/tty63/dev/ttyGS0/dev/ttyLP0 ~ /dev/ttyLP7   # ls /dev/ptptmx  pts/# ls /dev/ptmx/dev/ptmx

/dev/ttyGS0 是 USB Gadget Serial device。

/dev/ttyLP0 ~ /dev/ttyLP7,是片上UART端口,DTS使能后出现设备节点。

在i.MX6UL(L) ARM-Linux中:

# ls /dev/pts无# ls /dev/ptmx/dev/ptmx# ls /dev/tty*/dev/tty/dev/tty0 ~ /dev/tty63/dev/ttyGS0/dev/ttymxc0 ~ /dev/ttymxc7 /* 片上UART,DTS使能后出现设备节点 */

/dev/ttymxc0 ~ /dev/ttymxc7, 是片上UART端口,DTS使能后出现设备节点 。

在嵌入式系统中,tty设备名会根据主芯片而产生不同。比如上面的/dev/ttymxc0 和/dev/ttyLP0。

“mxc” 表示是i.MX chip,而LP表示Low Power Uart。这是基于不同芯片系列,串行接口设备名称会不同,上面例子是i.MX family of processors的serial interface的terminal device。

除了上面介绍的,还有一些其他的tty类型设备。比如:

 ”/dev/ttyAMA*“ 表示的是树莓派(Raspberry Pi devices)设备的UART serial ports。

"/dev/ttyUSB*" 和 ”/dev/ttyACM*“ 表示USB serial ports和USB modems,和USB串口设备进行通讯。

要识别 TTY 设备,可以使用 tty 命令。它将显示与当前终端会话相关联的 TTY 设备的路径。Linux 中的 tty 命令是一个内置工具,用于显示连接到标准输入的终端的文件名。

To identify TTY devices, you can use the tty command. It will display the path of the TTY device associated with your current terminal session. The tty command in Linux is a built-in utility that displays the file name of the terminal connected to the standard input.

在用户空间的程序,就可以通过/dev/ttyXX的设备文件,虚拟的或真实的,来进行串行通讯。例如,要向串口设备写入数据,有两种方法,一种是通过shell命令,一种是使用代码编程实现。

Shell命令举例,最简单的是直接echo命令,还可以使用printf命令、文件重定向等。

$ echo "123123" > /dev/ttyS1

使用编程的方法,C、Python或Perl语言,需要先调用open函数打开文件,然后使用write函数写入数据。Python的写法:

with open('/dev/ttyX', 'w') as tty:tty.write("Hello, world!\n")

读取串口或其他tty设备的数据的话和写入数据类似:

$ cat /dev/ttyS1# 文件重定向,File redirection$ cat /dev/ttyS1 > output.txt

编程方法,Python:

with open('/dev/ttyX', 'r') as tty:data = tty.read()print(data)

C: Using low-level file operations

#include <stdio.h>#include <fcntl.h>#include <unistd.h>int main() {int fd = open("/dev/ttyX", O_RDONLY);if (fd < 0) {perror("Error opening TTY device");return 1;}char buffer[1024];ssize_t bytes_read = read(fd, buffer, sizeof(buffer));if (bytes_read < 0) {perror("Error reading from TTY device");close(fd);return 1;}printf("Read %zd bytes: %s\n", bytes_read, buffer);close(fd);return 0;}

请记住,从 TTY 设备读取数据通常需要等待用户输入或来自外部设备的数据,因此在数据可用之前,读取操作可能会阻塞。此外,确保拥有适当的权限来读取 TTY 设备文件。

Remember that reading from TTY devices often involves waiting for user input or data from external devices, so reading operations may block until data is available. Additionally, ensure that you have appropriate permissions to read from the TTY device file.

你可以使用系统调用(如 C 语言中的 ioctl())或命令行工具(如 stty)以编程方式控制 TTY 设备,以操作终端设置。请记住,在底层与 TTY 设备交互可能需要管理权限,直接操作 TTY 可能会破坏系统功能或造成意想不到的后果。在使用 TTY 设备等系统级组件时务必小心谨慎。

You can control TTY devices programmatically using system calls like ioctl() in C or by using command-line tools like stty to manipulate terminal settings. Keep in mind that interacting with TTY devices at a low level might require administrative privileges, and manipulating TTYs directly can potentially disrupt the functioning of your system or cause unintended consequences. Always proceed with caution when working with system-level components like TTY devices.

总的来说,Linux 中的 TTY 是指用户通过基于文本的输入和输出与操作系统交互的界面。另外,通过多种不同的 /dev/tty 设备,Linux 就能支持各种终端和串行通信方案,包括基于文本的控制台交互、串行设备通信、虚拟终端和远程访问。

Overall, TTY in Linux refers to the interface through which users interact with the operating system via text-based input and output.  And the presence of multiple ”/dev/tty“ devices allows Linux to support a wide range of terminal and serial communication scenarios, including text-based console interaction, serial device communication, virtual terminals, and remote access.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/5618.shtml

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

相关文章

【antd + vue】InputNumber 数字输入框 输入限制

一、需求说明 只能输入数字和小数点&#xff0c;保留小数点后两位&#xff1b;最多输入6位&#xff1b;删除所有内容时&#xff0c;默认为0&#xff1b; 二、问题说明 问题1&#xff1a;使用 precision 数值精度 时&#xff0c;超出规定小数位数时会自动四舍五入&#xff1b;…

如何在Linux中使用Socks5代理?

Socks5代理是一種網路協議&#xff0c;用於在客戶端和服務器之間中轉網路數據包。這種代理協議可以處理任何類型的網路流量&#xff0c;包括HTTP和FTP等協議。此外&#xff0c;Socks5代理還支持各種身份驗證方法&#xff0c;包括無驗證、用戶名/密碼驗證和GSSAPI。 Socks5代理…

水库大坝安全白蚁监测系统解决方案

一、系统背景 白蚁作为河岸生态系统中的重要病害&#xff0c;不仅会导致水库大坝外部环境发生改变&#xff0c;甚至会引发水库大坝破坏&#xff0c;进而导致自身结构失去稳定性&#xff0c;严重影响水库大坝的正常运行。因此&#xff0c;治理水库大坝白蚁是确保水库大坝工程顺利…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…

C++人工智能01C版本

这次新增了个游戏功能 看代码 #include"bits/stdc.h" #include"Windows.h" #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0) using namespace std; bool memory[11]{false}; char z[1048576]{}; void calculator(char…

在 Python 开发中建议使用虚拟环境的原因

在 Python 开发中使用虚拟环境可以解决依赖冲突问题、方便管理和记录项目依赖库版本、提高代码的可移植性和可重现性、隔离不同项目的 Python 环境、方便切换不同项目的开发环境&#xff0c;无论是个人项目还是团队项目&#xff0c;使用虚拟环境已经成为 Python 开发的最佳实践…

Julia和Python蛛网图轨道图庞加莱截面曲面确定性非线性系统

&#x1f3af;要点 &#x1f3af;确定性混沌系统计算和视图&#xff1a;&#x1f58a;庞加莱截面曲面&#xff0c;赫农-海尔斯系统和洛伦兹 63 系统。&#x1f3af;零斜线演示可激发系统计算和视图&#xff1a;&#x1f58a; 庞加莱-本迪克松定理求解二维连续系统常微分方程 |…

STM32中断之TIM定时器详解

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. TIM简述 2. 定时器类型 2.1 基本定时器 2.2 通用定时器 2.3 高级定时器 3. 定时中断 4. 代码示例1 5. 代码示例2 1. TIM简述 定时器的基本功能&#xff1a;定时器可以在预定的时间间隔内产生周…

谷歌研发“SEEDS”新型天气预报模型:更准确地报道极端事件

谷歌科技近日公布了一项震撼业界的天气预报研究成果&#xff0c;这一成果不仅标志着天气预测技术的重大突破&#xff0c;更是人工智能技术在传统领域应用的又一里程碑。他们成功研发了名为SEEDS&#xff08;Scalable Ensemble Envelope Diffusion Sampler&#xff09;的新型预报…

【AIGC】深入探索AIGC技术在文本生成与音频生成领域的应用

&#x1f680;文章标题 &#x1f680;AIGC之文本生成&#x1f680;应用型文本生成&#x1f680;创作型文本生成&#x1f680;文本辅助生成&#x1f680;重点关注场景 &#x1f680;音频及文字—音频生成&#x1f680;TTS(Text-to-speech)场景&#x1f680;乐曲/歌曲生成&#x…

访问jwt生成token404解决方法

背景&#xff1a; 1.在部署新的阿里云环境后发现调用jwt生成token的方法404&#xff0c;前端除了404&#xff0c;台不报任何错误 在本地好用&#xff0c;在老的阿里云环境好用&#xff0c; 2.缩短生成私钥的参数报错&#xff0c;以为私钥太长改了tomcat参数也无效&#xff0…

手撕C语言题典——合并两个有序数组(顺序表)

搭配食用更佳哦~~ 数据结构之顺顺顺——顺序表-CSDN博客 数据结构之顺序表的基本操作-CSDN博客 继续来做一下关于顺序表的经典算法题叭~ 前言 88. 合并两个有序数组 - 力扣&#xff08;LeetCode&#xff09; 合并数组也是力扣上关于顺序表的一道简单题&#xff0c;继续来加深…

YARN详解

YARN 简介 YARN 是Yet Another Resource Negotiator的缩写。 YARN是第二代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的;通俗讲就是资源管理器. YARN核心思想: 将 MR1 中资源管理和作业调度两个功能分…

【Docker学习】docker run的--annotation选项

--annotation选项 作用:这是在Docker的api1.43+提供的一个功能,向容器添加一个注解(传递给OCI运行时)。 官方网站的文档对--annotation选项惜墨如金,没有用例,也没有过多解释。因此想要学到这个选项的实际作用,还要自己来。 要想了解这个选项的用法,还要先了解OCI运行时…

安卓手机跑大模型

工具 一、F-Droid F-Droid是一个安卓平台上自由开源软件的目录&#xff0c;并提供下载安装支持。类似于Google Play 二、Termux F-Droid上有termux&#xff0c;并支持下载。但是由于termux的开发者并不负责维护F-Droid&#xff0c;因此往往F-Droid上的termux更新需要延迟几…

实验五 SJK触发器

实验五 SJK触发器 2023.4.19 实验地点 软件工程基础实验室 实验课时 2 ​通过实验加深对数据完整性的理解&#xff0c;学会理解、创建和使用触发器。 ​使用SQL语句熟悉触发器的创建和查看方法&#xff0c;熟悉触发器的修改和删除方法。 (1) 仍然使用自定义完整性…

自定义Application,获取全局的Context

在Android中&#xff0c;如果你想要获取全局的Context&#xff0c;并且希望在整个应用程序的生命周期内都可以访问它&#xff0c;你可以通过创建一个自定义的Application类来实现。这个类会继承自android.app.Application&#xff0c;并且你可以在其中存储一些全局数据或者实现…

数据结构:实验六:图的操作

一、 实验目的 &#xff08;1&#xff09;掌握图的邻接矩阵和邻接表存储结构。 &#xff08;2&#xff09;熟练图的邻接表的基本运算。 &#xff08;3&#xff09;加深图的深度优先遍历算法和广度优先遍历算法的理解 二、 实验要求 有下图所示的带权有向图及其对应的邻…

【工程记录】Python爬虫入门记录(Requests BeautifulSoup)

目录 写在前面1. 环境配置2. 获取网页数据3. 解析网页数据4. 提取所需数据4.1 简单提取4.2 多级索引提取 5. 常见问题 写在前面 仅作个人学习与记录用。主要整理使用Requests和BeautifulSoup库的简单爬虫方法。在进行数据爬取时&#xff0c;请确保遵守相关法律法规和网站的服务…

Ubuntu安装Neo4j

Ubuntu&#xff08;在线版&#xff09; 更新软件源 sudo apt-get update 添加Neo4j官方存储库 wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add - 将地址添加到系统的软件包源列表中 echo deb https://debian.neo4j.com stable latest | su…