【发布时间】: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