LDD3(p:453)使用传入的缓冲区作为参数来演示dma_map_single
。
bus_addr = dma_map_single(&dev->pci_dev->dev, buffer, count, dev->dma_dir);
Q1 :此缓冲区来自何处?kmalloc
?Q2 :为什么DMA-API-HOWTO.txt指出我可以使用原始
kmalloc
将DMA插入?表格http://www.mjmwired.net/kernel/Documentation/DMA-API-HOWTO.txt
kmalloc
返回的地址传递给我的硬件设备吗? virt_to_bus
? dma_map_single
? Q3 :完成DMA传输后,我可以通过
kmalloc
地址读取内核驱动程序中的数据吗?addr = kmalloc(...);
...
printk("test result : 0x%08x\n", addr[0]);
Q4 :将其带到用户空间的最佳方法是什么?copy_to_user
吗? 最佳答案
祝好运!