第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
通过内存映射,用户线程可以直接访问某些设备(如帧缓存器)的内存。这些设备的驱动程序通常不支持 read(9E) 和 write(9E) 接口。相反,这些驱动程序支持使用 devmap(9E) 入口点的内存映射。例如,帧缓存器驱动程序可以实现 devmap(9E) 入口点,以允许将帧缓存器映射到用户线程。
调用 devmap(9E) 入口点可以将设备内存或内核内存导出到用户应用程序。可以从 segmap(9E) 内部的 devmap_setup(9F) 调用 devmap() 函数,也可以代表 ddi_devmap_segmap(9F) 调用它。
segmap(9E) 入口点负责设置 mmap(2) 系统调用所请求的内存映射。许多内存映射设备的驱动程序使用 ddi_devmap_segmap(9F) 作为入口点,而不是定义自己的 segmap(9E) 例程。