硬盘I具有基于ARM设备,运行Linux,其被连接到摄像头,并且我想要存储所捕获的帧有效HD。写入从连续的物理存储器
- 我在用户空间中发展,但可以修改随意
- 司机我编码使用C
- 帧被使用DMA写入存储器,和我有自己的物理内存的指针。
- 我能控制所有的帧捕获流量,而当帧缓冲区是稳定的,我可以告诉(从Video4Linux的司机dqueued)
- Linux的版本是3.0.35
- 我熟悉的内核源代码代码,不是专家,但我能找到自己的路,并找出事情,只要我得到一些提示...
我相信我有2种选择:
找到最佳configurat用于我的文件系统,用于打开文件并写入文件。我现在使用ext4和标准的fopen()fwrite()函数。我明白我也可以使用mmap,或添加O_DIRECT标志调用open()时,但没有尝试它。
找到一个方式来传递的缓冲区的物理地址(我能得到它从我的Video4Linux司机 )直接连接到文件系统/硬盘驱动器, 因此数据将直接从那里转移。
我发现方法1是缓慢的,有记忆的交易作为我的瓶颈,因为FWRITE从用户空间复制数据有关到内核空间,然后再次进入某种缓存,然后到DMA。一个简单的店太多的内存交易...
关于方法2 - 我不知道这是可能的,但如果我是一个从头开始设计这个系统,这是我会做什么。
有什么想法?
- 关于方法1(使用open()和write(),mmap()的和/或O_DIRECT) 可以推荐的最佳设置为我的目的是什么?
- 是方法2(直接存储从现有DMA缓冲区到HD)可能?如果是这样 - 你能指点我一个例子吗?
请问,您是否可以如此友善地发布流程的代码片段?我有完全相同的问题,我明白,mmap是解决方案,但无法理解如何使用它。 非常感谢。 – leonp