多次 kmalloc 是肯定不行的,dma 内存在物理上要连续.
可以使用 get_free_pages, 然后使用dma_map_single, dma_map_pages, dma_map_sg将之前分配的内存空间映射, 但也不会太大。
dma 内存不光是申请就可以的,因为传输时不经cpu, 所以要对 cache 进行 clean 或 invalidate 操作,上面的方式就不保证 cache 的一致性。
使用 dma_alloc_coherent 申请的保证一致性.
不管那种方式,申请过大内存都存在失败的可能性,不建议一次申请很大内存,申请的小点,加大传输次数。
胜日寻芳泗水滨,无边光景一时新.