TTY 和serial_core 有什么关系?

TTY 和serial_core 有什么关系?

我需要为 UART 编写一个新的字符设备文件,它允许比通常允许的更多的文件操作(不仅仅是打开、写入等......)

我使用的是嵌入式主线 Linux 内核(v 5.4)。

我开始查看 UART 驱动程序,发现有很多东西:

  1. 首先,有很多tty文件。我知道 tty 代表电传打字机。我不认为这是一个硬件。
  2. 然后,有针对我的处理器的特定驱动程序,用于处理 UART 上的中断。
  3. 然后,有(我认为是)uart 的字符设备驱动程序,写在serial_core.c 中

我注意到serial_core.c没有文件操作结构,但使用了tty_operations。

这里发生了什么?我无法理解所有这些文件如何相互关联,它们到底做了什么。更准确地说,我想了解他们每个人的作用。我的任务是为 uart 编写一个字符设备驱动程序,但我不知道我的驱动程序必须替换这些文件中的哪一个(也许全部?)。

谢谢,

答案1

现在,经过很长时间的阅读、分析和再次阅读代码,我开始理解由于缺乏注释而很难理解的代码。

所有这一切的目标是在用户空间和硬件之间创建一个通信接口。为此,我们可以将模型想象为两层:连接用户空间和内核空间的层,以及连接内核空间和硬件的层。

连接用户和内核空间的层是字符设备驱动程序。这是TTY 层,它将处理 /dev/ 中的文件并从用户那里获取数据并将其传递到内核空间,反之亦然。 TTY 层实现了很多我不太理解的其他功能,但可以肯定地说它的主要目标就是这个。

现在第二层正在从内核空间分离到硬件上写入。这是通过一个平台驱动程序在文件中imx.c。该驱动程序详细了解硬件,并且可以根据从 TTY 接收到的信息来控制它。因此,TTY 根据用户所说的内容调用该层的函数。

由于 UART 是一种通用硬件,因此有许多不是很具体的函数和例程,可以分组到一个文件中,该文件用作开发平台驱动程序(例如 imx.c)的基础。这是串行核心.c文件,其工作原理有点像用于开发硬件特定驱动程序的 API。

相关内容