[Linux 基础] -- Linux TTY framework(1)_基本概念

本文详细解读Linux系统中的TTY概念,包括终端设备(如串口电传打字机)、TTY设备的发展及其与控制台的区别,揭示Unix/Linux系统中终端设备的统一认识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

由于串口的缘故,TTY 是 Linux 系统中最普遍的一类设备,稍微了解 Linux 系统的同学,对它都不陌生。尽管如此,相信很少有人能回答这样的问题:TTY 到底是什么东西?我们常常挂在嘴边的终端(terminal)、控制台(console)等概念,到底是什么意思?

本文是 Linux TTY Framework 分析文章的第一篇,将带着上述疑问,介绍 TTY 有关的基本概念,为后续的 TTY 软件框架的分析,以及 Linux serial subsystem 的分析,打好基础。

二、终端(terminal)

2.1、基本概念

在计算机或者通信系统中,终端是一个电子(或电气)设备,用于向系统输入数据(Input),或者将系统接收到的数据显示出来(output),即我们常说的 “人机交互设备”。

关于终端最典型的例子,就是电传打印机(Teletype)---- 一种基于电报计数的远距离信息传送器械。电传打印机通常由键盘、收发报器和印字机构等组成。发报时,按下某一字符键,就能将该字符的电码信号自动发送到信道(input);收报时,能自动接收来自信道的电码信号,并打印出相应的字符(output)。

2.2、Unix 终端

在计算机的世界里,键盘和显示器,是最常用的终端设备,一个用于想计算机输入信息,一个用于显示计算机的输出信息。

在大型机(mainframe)和小型机(minicomputer)的时代里,终端设备和计算机主机都同属一个整体。但到PC时代,情况发生了变化。Unix创始人肯•汤普逊和丹尼斯•里奇想让Unix成为一个多用户系统。多用户系统意味着要给每个用户配置一个终端,每个用户都要有一个显示器、一个键盘。但当时所有的计算机设备(包括显示器)价格都非常昂贵,而且键盘和主机是集成在一起的,根本没有独立的键盘。

最后他们找到了一样东西,那就是ASR33电传打字机。虽然电传打字机的用途是在电报线路上收发电报,但是它也可以作为人与计算机的接口,而且价格低廉。ASR33打字机的键盘用来输入信息,打印纸用来输出信息。所以他们把ASR33电传打字机作为终端,很多个ASR33连接到同一个主机,每个用户都可以在终端输入用户名和密码登录主机。这样他们创造了计算机历史上的第一个真正的多用户系统Unix,而ASR33成为第一个Unix终端。

2.3、TTY 设备

由上面的介绍可知,第一个 Unix 终端是一个名字为 ASR33 的电传打字机,而电传打字机的英文单词为 Teletype(或 Teletypewritter),缩写为 TTY。因此,该终端设备也被称为 TTY 设备。这就是 TTY 这个名称的来源,当然,在现在的 Unix/Linux 系统中,TTY 设备已经演变为不同的意义了,后面我们会介绍演变的过程。

注1:读到这里,希望读者再仔细思索一下 “设备” 的概念。ASR33 的电传打印机本身是一个硬件设备,在 Unix/Linux 系统中,这个硬件设备被抽象为 “TTY 设备”

2.4、串口终端(Serials Terminal)

早期的 TTY 终端(这里暂停特指电传打字机),一般通过串口和 Unix 设备连接的,如下所示:

然后,正如你我所熟知的,我们可以把上面红色部分(电传打字机),替换为任意的具有键盘、显示器、串口的硬件设备(如另一台 PC),如下:

因此,对 Unix/Linux 系统来说,只要是通过串口连接的设备,都可以作为终端设备,因而不再需要关注具体的终端形态。久而久之,终端设备、TTY 设备、串口设备等概念,逐渐混在一起,就不再区分了,总结来说,在当今的 Linux 系统中:

  1. TTY 设备就是终端设备,终端设备就是 TTY 设备,无需区分;
  2. 所有的串口设备都是 TTY 设备;
  3. 当然,除了串口设备,也发展出来了其它形式的 TTY 设备,例如虚拟终端(VT)、伪终端(Pseudo Terminal)等等,这些概念本文就不展开描述了,后续会使用专门的文章分析。

三、控制台(console)

了解了终端和 TTY 的概念之后,再来看看另一个比较熟悉的概念:console。

回到 Unix 系统刚刚支持多用户(2.2 小节的描述)的时代,此时的 PC 有一个自带的、昂贵的终端(自身的键盘、显示器等),另外为了支持多用户,可以通过串口线连接多个 TTY 终端(Teletype)。为了彰显自带终端崇高的江湖地位,人们称它为 console。

当然,“江湖地位” 之说,纯属玩笑,不过从 console 的中文翻译 —— 控制台,可以看出,自带终端(console)有别于 TTY 终端的地方如下:

1)控制台(console)是昂贵的;

2)控制台(console)比 TTY 终端拥有更多的权限,例如用户建立、密码更改、权限分配等等,这也是 “控制” 的意义所在;

3)系统的运行日志、出错信息等内容,通常只会输出到控制台(console)终端中,以方便管理员进行 “控制” 和 “管理”;

不过,随着计算机技术的发展,操作系统的改进,控制台(console)终端和普通 TTY 终端的界限越来月模糊,console 能做的事情,普通终端也都能做了。因此,console 逐渐退化,以至于在当前的 Linux 系统中,它仅仅保留了第三点 “日志输出” 的功能,这就是 Linux TTY Framework 中 console 的概念(具体可参考后续文章的分析)。

Qt is a popular cross-platform framework for developing graphical user interfaces (GUI) and applications. It provides support for Linux framebuffer, which allows you to create GUI applications that can run directly on the Linux framebuffer without the need for an X server. To use Qt with Linux framebuffer, you can follow these general steps: 1. Install the required dependencies: Make sure you have the necessary libraries and development packages installed on your Linux system. This may include framebuffer-related libraries like `libdrm` and `libgbm`. 2. Configure Qt with framebuffer support: When building Qt from source, you can enable framebuffer support by passing the `-qt-libinput` flag to the `configure` script. For example: ``` ./configure -qt-libinput ``` 3. Build your Qt application: Once Qt is configured with framebuffer support, you can build your application using the `qmake` and `make` commands as usual. Make sure to set the appropriate target platform, such as `linuxfb`. 4. Run your Qt application on the Linux framebuffer: After building your application, you can run it directly on the Linux framebuffer by setting the appropriate environment variables. For example: ``` export QT_QPA_PLATFORM=linuxfb export QT_QPA_FB_TTY=/dev/fb0 ./your_application ``` By following these steps, you should be able to develop and run Qt applications using the Linux framebuffer as the target platform. Keep in mind that framebuffer support may vary depending on your specific Linux distribution and hardware setup.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值