设计说明
4 Dec 2024
Read time: 1 minute(s)
DMA 源代码位于 drivers/dma/artinchip-dma.c。
Linux 提供了一个 DMA Engine 子系统,可封装不同类型的 DMA 控制器驱动,便于 DMA 用户了解硬件细节。
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 等。
- 暂未提供用户态的使用接口。