【问题标题】:Stream data into a file in a linux device driver将数据流式传输到 linux 设备驱动程序中的文件中
【发布时间】:2011-01-25 10:22:10
【问题描述】:

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

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

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

谢谢,斯特凡

【问题讨论】:

    标签: linux file stream driver device


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的建议。它将以 char 设备开始,但可能以更复杂的设备结束,因为数据流相当高。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多