【问题标题】:Interrupt-driven driver using TTY?使用 TTY 的中断驱动驱动程序?
【发布时间】:2010-07-30 20:23:36
【问题描述】:

我是开发 Linux 驱动程序的新手...。我正在开发一个使用 TTY 访问串口的 SMS 驱动程序(通过串口到调制解调器的 AT 命令)。驱动程序是用 C 语言编写的。

在设计中,从调制解调器到驱动程序的消息可以由两个事件触发:

1) 响应驱动程序发出的 AT 命令的状态(即预期消息)

2) 新 SMS 的指示(即意外消息)

我计划使用两个线程 - 一个用于写入 TTY,一个用于从 TTY 读取。是否可以配置 TTY 以便我的读取线程在传入字符时唤醒(即读取线程是事件触发的,而不是基于轮询)?

最好的问候, 维特克

【问题讨论】:

  • 附加评论:我使用了“POSIX 操作系统串行编程指南”(easysw.com/~mike/serial/serial.html)作为灵感,但没有找到关于我的问题的答案。
  • 你想要的是一个普通的read() 如何在一个正常的、阻塞的文件描述符上工作——它会休眠直到可以读取数据(或者捕获到信号或其他异常情况)。跨度>

标签: linux tty


【解决方案1】:

我不认为你真的想要两个线程。典型的程序流程(编写 AT 命令、检查响应等)将更容易在单线程程序中编写和调试。

可以通过select() 调用来等待字符。 tty层大多是通过配置的 tcsetattr, tcgetattr 和朋友系统调用。例如,通过此调用,您可以配置是否要在新行或每个字符上被中断。有关手册页,请参见 man termios。两个大选项是您是否希望将 EOF、EOL Ctrl-C 等特殊字符处理为具有数据(原始模式)或由 tty 层解释(规范模式)。

请参阅串行编程指南中有关选择的部分,或选择手册页了解更多信息

【讨论】:

  • 同意 - 单线程应该没问题。使用select() 进行阻塞,直到数据从串行端口或您的驱动程序拥有的任何客户端可用,然后read() 数据并处理它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 2016-03-13
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多