【发布时间】:2017-07-26 09:29:43
【问题描述】:
我正在将 Windows 7 网络驱动程序代码移植到 WEC7。我被 API MmGetPhysicalAddress 卡住了。我在 WEC7 中没有找到与此等效的 API。任何人都可以帮助进一步进行..
谢谢。
【问题讨论】:
标签: windows windows-ce network-driver
我正在将 Windows 7 网络驱动程序代码移植到 WEC7。我被 API MmGetPhysicalAddress 卡住了。我在 WEC7 中没有找到与此等效的 API。任何人都可以帮助进一步进行..
谢谢。
【问题讨论】:
标签: windows windows-ce network-driver
MmGetPhysicalAddress 在 Windows CE 中不可用,但您可能也不需要它。
在InitializeHandlerEx 回调中的某个位置,驱动程序应该调用NdisMAllocateSharedMemory 来分配RX/TX 缓冲区。
NdisMAllocateSharedMemory 返回分配缓冲区的虚拟地址和物理地址,因此您可以保留物理地址,然后就不需要向操作系统请求它。
通常,物理地址与虚拟缓冲区地址一起保存在特定于驱动程序的每个缓冲区结构中。
您可以在C:\WINCE700\public\COMMON\oak\drivers\netcard\e100bex\60 中找到此示例实现。在mp_init.c 中,注意NICAllocAdapterMemory 如何调用NdisMAllocateSharedMemory 并将每个缓冲区的物理地址存储在pMpTxbuf->BufferPa 中。
【讨论】:
LockPages,但如果使用非 NDIS 函数分配缓冲区,您需要确保它在物理上是连续的,假设您要去进行 DMA 传输
你可以看看 LockPages: https://msdn.microsoft.com/en-us/library/ee482989.aspx 但是如果缓冲区不是使用 NDIS 函数分配的,它在物理内存中可能不是完全连续的,所以你可能需要检查一下。
【讨论】: