TTY

电传打字机 (TTY) 层负责所有这些串行设备。包括像伪终端 (PTY) 这样的虚拟设备。

TTY 结构体

有几个主要的 TTY 结构体。系统中每个 TTY 设备都有一个对应的 struct tty_port。这些设备由 TTY 驱动程序维护,即 struct tty_driver。此结构体描述了驱动程序,还包含对可在 TTY 上执行的操作的引用。它是 struct tty_operations。然后,在打开时,会分配一个 struct tty_struct,并一直存在到最后关闭。在此期间,TTY 层会调用来自 struct tty_operations 的几个回调。

内核接收到的每个字符(来自设备和用户)都会通过预先选择的 TTY 线路规程(简称为 ldisc;在 C 中,struct tty_ldisc_ops)。它的任务是按照特定的 ldisc 或用户定义的方式转换字符。默认的是 n_tty,它实现了回显、信号处理、作业控制、特殊字符处理等等。转换后的字符将进一步传递给用户/设备,具体取决于源。

命名 TTY 结构体的详细描述位于单独的文档中

编写 TTY 驱动程序

在开始编写 TTY 驱动程序之前,必须首先考虑 串行USB 串行 层。串行设备的驱动程序通常可以使用这些特定的层之一来实现串行驱动程序。只有特殊设备才应由 TTY 层直接处理。 如果您将要编写这样的驱动程序,请继续阅读。

TTY 驱动程序执行的典型 顺序如下

  1. 分配并注册 TTY 驱动程序(模块初始化)

  2. 创建并注册 TTY 设备(探测函数)

  3. 处理 TTY 操作和事件,如中断(TTY 核心调用前者,设备调用后者)

  4. 删除正在消失的设备(移除函数)

  5. 注销并释放 TTY 驱动程序(模块退出)

关于驱动程序的步骤,即 1.、3. 和 5. 在 TTY 驱动程序和 TTY 操作 中详细描述。对于其他两个(设备处理),请查看 TTY 端口

其他文档

其他文档可以在以下文档中找到