编写适用于 Oracle® Solaris 11.2 的设备驱动程序

退出打印视图

更新时间: 2014 年 9 月
 
 

对象锁定

为内存对象分配 DMA 资源之前,必须防止该对象移动。否则,在设备尝试向该对象进行写入时,系统会从内存中删除该对象。缺少对象会导致数据传送失败,并且可能损坏系统。防止内存对象在 DMA 传送过程中移动的过程称为锁定对象

    以下对象类型不要求显式锁定:

  • 通过执行 strategy (9E) 获得的来自文件系统的缓冲区。这些缓冲区已由文件系统锁定。

  • 设备驱动程序中分配的内核内存,如 ddi_dma_mem_alloc(9F) 分配的内核内存。

对于其他对象(如用户空间中的缓冲区),必须使用 physio(9F)ddi_umem_lock(9F) 来锁定对象。使用这些函数来锁定对象通常在字符设备驱动程序的 read(9E)write(9E) 例程中执行。有关示例,请参见Data Transfer Methods