【问题标题】:linux driver for uart- overall desginuart 的 linux 驱动程序 - 整体设计
【发布时间】:2011-04-25 12:56:31
【问题描述】:

**你好,我是一个新手,使用 LINUX 中的 3 个 16550 UART 芯片为基于串行 PCI 的板编写驱动程序。每个 uart 芯片支持 4 个通道(4 个串行端口)。

在我的 Linux 驱动程序代码中,我曾考虑为每个端口使用线程,即总共 4x3=12 个端口。你认为给每个端口一个专用线程是个好主意吗?我可以使用一个特定的通道来实现一个零调制解调器,其他通道 RS422 一些其他通道 RS485 等等

我认为线程编程的原因是所有线程都是独立运行的,每个线程 - 反过来每个端口可能是活动的或未使用的。所以我的目标是让它们尽可能地相互独立。

请让我知道这种类型的驱动程序的整体设计应该是什么样的。如果实现了这种类似的驱动程序,请提供链接/来源。

这是我第一次做这样的事情..我的逻辑是正确的/不正确的还是只是一个不正确的流程,这是无效的,听起来绝对可怕 谢谢和问候**

【问题讨论】:

  • 为什么不看看内核源代码中包含的各种串行端口驱动程序驱动程序?我并没有在内核的那些领域搞砸,但肯定有一些框架可以插入。协议驱动程序最好在用户空间中实现。将它们放在内核中不会为您节省任何费用,只会延长您的开发时间。

标签: c linux linux-device-driver


【解决方案1】:

Linux 内核有很多用于处理串行 IO 的架构代码。据我记得,没有明确需要线程,因为通知等是由内核通过回调等完成的。拿起一本关于 Linux 驱动程序开发的书可能不会有什么坏处。

【讨论】:

    【解决方案2】:

    我猜你会在每个端口上运行一些协议,在这种情况下,每个端口有 1 个线程的设计在 IMO 上很有意义,因为它允许你清晰地构建协议驱动程序。

    我们多年来一直使用这样的设计,并且出于历史原因,我们使用 System V 消息将协议线程与调度程序/主管线程连接起来。 SysV 消息并非没有自己的问题(例如,它们不是 select() 能够),因此您可能需要查看 this SO article 以获取替代方案。

    【讨论】:

    • 你好 @fvu 感谢您对我的信任...您能否分享更多链接 - 我可以从中了解更多相关信息的源代码...再次感谢
    • @user2... 抱歉,我所指的来源是我们自己的材料,无法在此发布。不过我会看看我能找到什么。
    猜你喜欢
    • 1970-01-01
    • 2015-10-12
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    相关资源
    最近更新 更多