2009-09-18 53 views
1

我正在将应用程序/ PCI驱动程序从vxWorks移植到Linux,如果可能,我想保持相同的体系结构。当前驱动程序有2个使用消息队列相互通信的任务(线程)。是否有内核线程之间进行通信的机制?消息队列用于传递缓冲区地址和大小信息,以便任务可以使用DMA来移动大量数据。在Linux内核线程之间进行通信

+0

要明确我的意思是app/PCI驱动程序,我会添加更多详细信息。在vxWorks中编写的原始程序在内核级别执行所有操作。因此,设备的PCI驱动程序以及对数据执行操作的代码,打包和发送UDP都在同一个程序中。我试图保持相同的体系结构,因为应用程序将停留在vxWorks中,但由于资源和时间安排问题,我们需要移植到Linux以继续测试。 – CVAUGHN 2009-09-18 13:42:50

回答

1

我强烈建议不要在Linux上保留VxWorks体系结构。内核线程的扩散令人不悦,你的代码永远不会把它变成正式的内核树。即使你不关心这些,你是否100%肯定你想用非标准的方式开发驱动程序?如果你只是摆脱这两项任务,情况会简单得多。顺便说一句,为什么地球上你需要PCI驱动程序的任务开始?

+0

+1为理智和常识。 – 2009-10-19 08:33:58

+0

感谢您的反馈。这是另一个管理层提供几乎不可能的任务,甚至更不可能的时间表。战斗胜利了,我们不再这样做了。对任务的需求是基于原始架构的。驱动程序正在将大量的数据从PCI卡移出。数据被DMA'd循环缓冲区,然后一条消息被发送到适当的任务来处理数据,以便下一个DMA可能发生。在vxWorks中,它使得它在Linux中没有,但他们不想改变它。 – CVAUGHN 2009-11-01 11:18:27

+0

现在,如果您绝对必须保持Linux上的某些单片架构以及使用http://femtolinux.com的VxWorks,那么它允许以内核模式运行用户应用程序,即以与VxWorks几乎相同的方式 – Demiurg 2010-07-23 08:31:31

2

听起来好像workqueue接口可能是您要做的 - 或者重量更轻,kfifo加上rwsem信号量。

+0

谢谢caf。我今天会研究这两种机制,并让你知道什么对我最合适。 – CVAUGHN 2009-09-18 13:30:56

+0

kfifo&rwsem看起来像他们将工作得很好。再次感谢你。 – CVAUGHN 2009-09-18 14:29:00