我的任务是在 Zephyr 上为 uart 和 tty_uart 驱动程序编写串行驱动程序(这是我第一次开发驱动程序)。
1.那么串口驱动和tty驱动有什么区别?
- 它们之间是否存在相互依赖的关系?我的意思是写一个 tty 驱动程序我应该先写一个串行驱动程序,这将是 tty 驱动程序的基础还是什么?
我的任务是在 Zephyr 上为 uart 和 tty_uart 驱动程序编写串行驱动程序(这是我第一次开发驱动程序)。
1.那么串口驱动和tty驱动有什么区别?
那么串口驱动和tty驱动有什么区别呢?
串行驱动程序不假设连接的设备类型,它只是发送和接收原始“字节”(见注释),并且可能提供一些配置通信的方法(波特率,多少数据位,什么样的奇偶校验方案,什么样的流量控制等)。连接到串行端口的设备可以是串行鼠标、条形码扫描仪或打印机,或者...... - 串行驱动程序不在乎。
注意:“字节”可能不是“八位字节”的同义词——例如,它可能是一组 7 位。
TTY 驱动程序与设备是带键盘的打字机的假设相关联。注:为历史;在计算机出现之前,我们从“人们互相挥舞旗帜”(信号量)到“单键摩尔斯电码”(电报)再到电传打印机/电传打字机(参见https://en.wikipedia.org/wiki/Teleprinter);当计算机被发明时,(机械/电动)电传打字机被简单地替换为(计算机化)哑终端。
大多; TTY 完全是关于字节的含义(并不关心字节是如何发送/接收的);串行驱动程序是关于如何发送/接收字节的(并不关心字节的含义)。
它们之间是否存在相互依赖的关系?我的意思是写一个 tty 驱动程序我应该先写一个串行驱动程序,这将是 tty 驱动程序的基础还是什么?
粗鲁; TTY 驱动程序有 4 个方向的 IO - 从本地键盘获取按键信息,向远程发送字节,从远程接收字节,并将字符放在本地屏幕上。对于使用“远程任何东西”发送/接收字节,您可以使用串行驱动程序;但是(特别是在开发/测试期间)您可以使用其他任何东西(TCP/IP 流、管道、文件 IO,...) - 您不一定需要先实现串行驱动程序。
关于你的问题:
那么串口驱动和tty驱动有什么区别呢?
它们之间是否存在相互依赖的关系?我的意思是写一个 tty 驱动程序我应该先写一个串行驱动程序,这将是 tty 驱动程序的基础还是什么?
这完全取决于您的操作系统。
以前的答案主要与 Linux/Windows 有关。你没有提供更多关于它的观点,但我假设你的问题与 Zephyr RTOS 项目有关。我还假设您正在为 RTOS 尚未完全支持的定制板开发 BSP。
Zephyr 中的设备驱动模型不同于 Linux 或 Window 的驱动模型。您可以查看板移植指南和架构移植指南。
您还可以在此处找到有关如何获得社区支持的更多信息。