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 端口

其他文档

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