串行驱动程序和 tty 驱动程序之间的区别

Difference between a serial driver and a tty driver

我有一个任务要写uart的串口驱动和tty_uartZephyr上的驱动(第一次开发驱动)

1.So串口驱动和tty驱动有什么区别?

  1. 它们之间是否存在相互依存关系?我的意思是写一个 tty 驱动程序我应该先写一个串行驱动程序,它将作为 tty 驱动程序的基础还是什么?

So what is the difference between a serial driver and a tty driver?

串行驱动程序不假设连接的设备类型,它仅发送和接收原始“字节”(见注释),并且可能提供一些配置通信的方法(波特率,多少数据位,什么样的奇偶校验方案,什么样的流量控制等)。连接到串行端口的设备可以是串行鼠标、条形码扫描仪、打印机或... - 串行驱动程序不关心。

注意:“byte”可能不是“octet”的同义词 - 例如它可能是一组 7 位。

TTY 驱动程序与设备是带键盘的打字机的假设相关联。 注:为历史;在计算机出现之前,我们从“人们互相挥动旗帜”(信号量)到“用一个键的摩尔斯电码”(电报)到 teleprinters/teletypewriter(参见 https://en.wikipedia.org/wiki/Teleprinter);当计算机被发明时,(mechanical/electric)电传打字机被(计算机化的)哑终端简单地取代了。

大部分; TTY 是关于字节的含义(并不关心字节是多少sent/received);一个串行驱动程序就是关于字节如何sent/received(并不关心字节是什么意思)。

Is there any interdependence relation between them? I mean to write a tty driver should I write by first a serial driver, that will be a base to the tty driver or what?

粗鲁;一个 TTY 驱动程序有 4 个方向的 IO - 从本地键盘获取按键信息,向远程发送字节,从远程接收字节,以及将字符放在本地屏幕上。对于带有“remote whatever”的 sending/receiving 字节,您可以使用串行驱动程序;但是(特别是在 development/testing 期间)您可以使用其他任何东西(TCP/IP 流、管道、文件 IO,...)代替 - 您不一定需要先实现串行驱动程序。

关于您的问题:

So what is the difference between a serial driver and a tty driver?
Is there any interdependence relation between them? I mean to write a tty driver should I write by first a serial driver, that will be a base to the tty driver or what?

这完全取决于您的操作系统。

以前的答案主要与 Linux/Windows 有关。你没有提供更多关于它的观点,但我假设你的问题与 Zephyr RTOS 项目有关。我还假设您正在为 RTOS 尚未完全支持的定制板开发 BSP。

device driver model in Zephyr is different from Linux's or Window's driver models. You can take a look at the board porting guide and architecture porting guide.

文档包含 lot of samples, including quite a few of driver samples.

您还会找到更多信息here,其中包括如何获得社区支持。