【发布时间】:2016-05-19 09:38:24
【问题描述】:
我想为 PCI 设备和 RAM 之间的 dma 传输分配内存。我正在使用下一个函数来分配内存:
pci_alloc_consistent
我想分配 2GB 以下的内存。否则,pci 设备失败。但是这个函数提供了我的 ram (4GB) 中的任何地址。有什么解决办法吗?
BR
【问题讨论】:
标签: linux-device-driver dma pci
我想为 PCI 设备和 RAM 之间的 dma 传输分配内存。我正在使用下一个函数来分配内存:
pci_alloc_consistent
我想分配 2GB 以下的内存。否则,pci 设备失败。但是这个函数提供了我的 ram (4GB) 中的任何地址。有什么解决办法吗?
BR
【问题讨论】:
标签: linux-device-driver dma pci
您可以在struct pci_dev * 上拨打pci_set_coherent_dma_mask,或者最好在pcidev->dev 上拨打dma_set_coherent_mask 来设置掩码。将掩码设置为 DMA_BIT_MASK(31) 会将相干映射限制为前 2 GiB。为了保持一致性,您可能还想通过调用 pci_set_dma_mask 或 dma_set_mask 来限制非连贯映射。
调用上述函数的好地方是您的 PCI 驱动程序“探测”函数。
【讨论】: