什么是sg
sg 就是 scatter-gather,分散-集中传输
一般情况下,DMA传输一般只能处理在物理上连续的buffer。但在有些场景下,我们需要将一些非连续的buffer拷贝到一个连续buffer中(这样的操作称作scatter gather,挺形象的)。
对于这种非连续的传输,大多时候都是通过软件,将传输分成多个连续的小块(chunk)。但为了提高传输效率(特别是在图像、视频等场景中),有些DMA controller从硬件上支持了这种操作。
注2:具体怎么支持,和硬件实现有关,这里不再多说(只需要知道有这个事情即可,编写DMA controller驱动的时候,自然会知道怎么做)。
如果是循环连接,则传输被叫做循环传输,需要用到device_prep_dma_cyclic()函数进行传输,例如linux下的串口驱动,它的传输buffer是一个环形缓冲区,它用DMA传输时就采用了循环传输方式。