linux中DMA申请空间的疑问

在linux中kmalloc只能分配128k以下的连续空间,然而DMA传输需要大量的空间,如何在驱动中申请大块的连续空间以供上端传输来的数据经由DMA传到内存中去(不经由... 在linux中kmalloc 只能分配128k以下的连续空间,然而DMA传输需要大量的空间,如何在驱动中申请大块的连续空间以供上端传输来的数据经由DMA传到内存中去(不经由SG模式)?是通过多次调用kmalloc()函数吗?如何判断一个kmalloc申请的空间已满,需要调用另一块空间?是通过函数判断还是中断触发? 展开
 我来答
furious_tauren
2015-12-07 · TA获得超过4056个赞
知道大有可为答主
回答量:1913
采纳率:100%
帮助的人:772万
展开全部
多次 kmalloc 是肯定不行的,dma 内存在物理上要连续.

可以使用 get_free_pages, 然后使用dma_map_single, dma_map_pages, dma_map_sg将之前分配的内存空间映射, 但也不会太大。

dma 内存不光是申请就可以的,因为传输时不经cpu, 所以要对 cache 进行 clean 或 invalidate 操作,上面的方式就不保证 cache 的一致性。

使用 dma_alloc_coherent 申请的保证一致性.

不管那种方式,申请过大内存都存在失败的可能性,不建议一次申请很大内存,申请的小点,加大传输次数。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式