我希望尽快将支持DMA的PCIe硬件设备中的数据导入用户空间.
问:如何将"使用/和/通过DMA传输直接I/O连接到用户空间"
通过LDD3读取,似乎我需要执行一些不同类型的IO操作!?
dma_alloc_coherent给我一个可以传递给硬件设备的物理地址.但是在传输完成时需要设置get_user_pages并执行copy_to_user类型调用.这似乎是浪费,要求设备DMA进入内核内存(充当缓冲区),然后再将其传输到用户空间.LDD3 p453:/* Only now is it safe to access the buffer, copy to user, etc. */
我理想的是一些记忆:
我是否需要单页流映射,设置映射和用户空间缓冲区映射get_user_pages dma_map_page?
到目前为止,我的代码get_user_pages在用户空间的给定地址设置(我称之为直接I/O部分).然后,dma_map_page用一个页面get_user_pages.我将设备的返回值dma_map_page作为DMA物理传输地址.
我使用一些内核模块作为参考:drivers_scsi_st.c和drivers-net-sh_eth.c.我会看看infiniband代码,但无法找到哪一个是最基本的!
提前谢谢了.