usb_alloc_coherent驱动程序的上下文中使用kzalloc/kmallocUSB之间的根本区别是什么。两者的作用相同,为URB缓冲区分配一个内存区域。但是他们有什么不同。使用usb_alloc_coherent而不是kzalloc/kmalloc有什么好处吗?

最佳答案

驱动程序以设备(端点)为中心,但内存分配必须参考USB控制器的功能。这是因为它是从存储器到usb总线执行dma的控制器。因此usb_alloc_coherent基本上包装了泛型dma_alloc_coherent,但调用它是为了控制器,而不是端点。使用DMA-API而不仅仅是kmalloc可以确保不需要反弹缓冲区。
这节省了设备驱动程序从代码丑陋(打破抽象)和处理一些角落的情况下写。usb_alloc_coherent还使用内存轮询来加快速度。

10-08 13:59