在usb_alloc_coherent
驱动程序的上下文中使用kzalloc/kmalloc
和USB
之间的根本区别是什么。两者的作用相同,为URB
缓冲区分配一个内存区域。但是他们有什么不同。使用usb_alloc_coherent
而不是kzalloc/kmalloc
有什么好处吗?
最佳答案
驱动程序以设备(端点)为中心,但内存分配必须参考USB控制器的功能。这是因为它是从存储器到usb总线执行dma的控制器。因此usb_alloc_coherent
基本上包装了泛型dma_alloc_coherent
,但调用它是为了控制器,而不是端点。使用DMA-API而不仅仅是kmalloc
可以确保不需要反弹缓冲区。
这节省了设备驱动程序从代码丑陋(打破抽象)和处理一些角落的情况下写。usb_alloc_coherent
还使用内存轮询来加快速度。