导入方(另一块 GPU、一张网卡、一个 V4L2 摄像头)拿到 fd 后,要把它变成一张本设备 DMA 引擎能够直接寻址的地址表。导入的调用顺序以及拆成 attach、map 两步的原因,6.2 节已经说明。本节沿 dma_buf_get() → attach → map → unmap → detach → dma_buf_put() 这条主线展开导入方一侧,依次介绍从 fd 取回 dma_buf、attach 与 map 在 core 内部的处理、sg_table 的使用约定,以及用完后按相反顺序的拆除。这条主线由静态与动态导入方共用,本节以静态导入方为准,动态导入方在其上的差异由 6.5 节讨论。
1. dma_buf_get:从 fd 取回 dma_buf
导入方从用户态拿到的是一个 fd,第一步是把它换回内核对象,方向与导出方的 dma_buf_fd() 正好相反:
struct dma_buf *dma_buf_get(int fd

