2010-03-09 36 views
0

我对Linux设备驱动程序编程非常陌生,但出于调试目的,我想直接将数据流写入文件。或者,我应该提出不同的问题:将数据流式传输到Linux设备驱动程序中的文件

我有一个片上系统,其中一个模块提供一个数据流。该模块必须用写地址初始化。我不想将数据写入内存,而是想将数据流重定向到该地址的文件。这也可以通过用户空间来完成,因为不建议在内核空间写入文件。

有人可以粗略地描绘如何做到这一点?

感谢,斯特凡

回答

0

从你的问题,我想这是一个硬件模块直接写入到内存缓冲区。您将始终需要在文件路径上使用中间内存缓冲区,但在设备驱动程序中有多种方式可以对其进行管理。

最简单的情况是实现一个字符设备驱动程序,它通过读取操作将数据返回给用户空间。写入文件的用户空间应用程序可以像cat一样简单。您的模块将写入由驱动程序分配的内存缓冲区,并且read方法会将数据从此缓冲区复制到用户空间缓冲区。这在内核文档和Linux Device Drivers(LDD)中由DMA-Mapping.txt覆盖。

如果数据速率很高(其中与设备性能相关的数据速率较高),则需要考虑更先进的读取操作,即将read请求的页面锁定到内存中,并将模块直接写入这些页面。这更加复杂,LDD在这方面的文档相当陈旧。我建议研究内核中视频捕获驱动程序的来源以了解这一点。

如果您的驱动程序有更多种类的通信执行,您可能需要使用Netlink

+0

感谢您的意见。它将从一个char设备开始,但可能最终会有更复杂的东西,因为数据流相当高。 – stefangachter 2010-03-11 15:17:06

相关问题