0

我对 Linux 设备驱动程序编程相当陌生,但出于调试目的,我想将数据流直接写入文件。或者也许我应该以不同的方式提出这个问题:

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

有人可以粗略地勾勒出如何做到这一点吗?

谢谢,斯特凡

4

1 回答 1

0

根据您的问题,我假设这是一个直接写入内存缓冲区的硬件模块。在到达文件的过程中,您总是需要一个中间内存缓冲区,但在您的设备驱动程序中有几种方法可以管理它。

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

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

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

于 2010-03-11T10:28:22.637 回答