Edit online

设计说明

4 Dec 2024
Read time: 1 minute(s)

DMA 源代码位于 drivers/dma/artinchip-dma.c

Linux 提供了一个 DMA Engine 子系统,可封装不同类型的 DMA 控制器驱动,便于 DMA 用户了解硬件细节。


sw_system20

1. Linux DMA Engine 子系统架构
Linux DMA Engine 子系统架构 展示了 DMA Engine 中的下列组成部分:
  • DMA Device
    • 对应物理上的一个 Controller。
    • DMA Driver 需要提供 Controller 的属性和接口,并注册成为 DMA Device,供后续 DMA Engine 框架来调用。
    • 支持注册多个 DMA Device,并使用一个链表 dma_device_list 来进行管理。
  • DMA channel
    • 对应物理上的 DMA 通道,如图中 DMA Controller 的 Chx。
    • 物理 DMA 通道也是通过一个链表进行管理,归属于同一个 DMA Device。
  • VC(Virtual channel)
    • VC,即虚拟通道
    • 基于物理的 DMA 通道,DMA Engine 提供了一种 VC。
    • VC 数目往往多于物理通道数,比如 VC 有 48 个而物理通道只有 8 个,便于提供一种动态的物理通道分配机制。
  • DMA Client
    • DMA 模块的使用者。
    • DMA 用户仅限内核中的其他模块,如 SPI、Audio Codec、UART 等。
    • 暂未提供用户态的使用接口。