编写设备驱动程序

主机平台 DMA 的类型

设备运行的平台可提供直接内存访问 (direct memory access, DMA) 或直接虚拟内存访问 (direct virtual memory access, DVMA)。

在支持 DMA 的平台上,系统会为设备提供物理地址以执行传送。在此情况下,DMA 对象的传送实际上会包含许多在物理上不连续的传送。例如,当应用程序传送跨越若干连续虚拟页(但这些虚拟页映射到物理上不连续的页)的缓冲区时。要处理不连续的内存,用于这些平台的设备通常需要具有特定种类的分散/集中 DMA 功能。通常,x86 系统会为直接内存传送提供物理地址。

在支持 DVMA 的平台上,系统会为设备提供虚拟地址以执行传送。在此情况下,基础平台提供的内存管理单元 (memory management unit, MMU) 会将对这些虚拟地址的设备访问转换为正确的物理地址。设备会与可映射到不连续物理页的连续虚拟映像之间来回进行传送。在这些平台上运行的设备无需分散/集中 DMA 功能。通常,SPARC 平台会为直接内存传送提供虚拟地址。