【问题标题】:how to handle -- fast tx & recepion of data --- device driver Linux如何处理——快速收税和接收数据——Linux设备驱动
【发布时间】:2012-12-04 09:12:40
【问题描述】:

我期待在 Linux 中实现 CAN 总线通信驱动程序。
需要一些设计建议。

Linux 有用户空间和内核空间。驱动程序在用户空间的内核空间应用程序中运行。

1> 现在假设如果以非常高的速度接收数据包,那么驱动程序如何处理这种情况?

2> 如果数据包必须高速传输,那该怎么办?

3> 数据应该如何在用户和内核空间之间移动。我们应该使用系统调用还是其他一些快速机制?

4> 可以在内核级别的线程中完成吗?但是,如果有两个线程在内核级别运行,从 CAN 总线进行 TX 和从 CAN 总线进行 RX,那么我们是否必须使用互斥锁来保存关键部分(即我们的内部寄存器)

5> 如果假设共享库用于从应用程序访问驱动程序。 共享库可以使用系统调用访问驱动程序功能吗?

完全混淆了正确的方法应该是什么。

请提出建议。任何回复都将是可观的。

【问题讨论】:

  • 您使用的是哪个 CAN 控制器,可能它的驱动程序将在 Linux 上可用,您可以使用设备节点直接访问它。
  • 可能是我解释的有点错误。我刚刚给出了一个例子——Can bus——问题是一个通用问题,可以应用于任何通信设备,如 CAN 总线、Usart、raw -以太网。请提出建议。
  • 高频交易人员对网络堆栈/驱动程序进行了一些有趣的优化,您可以在理论上看到;但是正如 Martin 所说,您的 CAN 总线不太可能要求如此苛刻。

标签: multithreading linux-device-driver embedded-linux can-bus


【解决方案1】:

与您希望在其上运行 Linux 的大多数处理器相比,CAN 的数据速率并没有那么快。大多数公共汽车的负载低于 60%,也就是大约 60kB/s!从用户空间到内核空间的简单数据包 FIFO 应该没问题。

如果您有按计划传输消息的硬实时截止日期,则可能会出现问题。或者更糟糕的是,在给定的时间段内响应接收到的消息发送消息。如果您有这些要求中的任何一个,Linux 可能不适合您——您需要一个合适的实时操作系统 (RTOS)。

【讨论】:

  • 还有实时调度器与 linux 协作来处理要求不高(但更复杂)的任务。
猜你喜欢
  • 1970-01-01
  • 2018-07-16
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多