linux stream DMA操作


一、是什么?

使用DMA的设备驱动程序将与链接到总线接口上的硬件通信,硬件使用的物理地址,而程序代码使用的虚拟地址.实际情况上,基于DMA的硬件使用的总线地址,而不是物理地址.DMA映射建立了一个新的结构类型 dma_addr_t来标识总线地址.dma_addr_t类型的变量对驱动程序是不透明的;
唯一允许的操作是将他们传递给DMA支持例程以及设备本身.作为一个总线地址,如果cpu直接使用了dma_addr_t,将会导致发生不可预期的问题.

流DMA映射:
write 系统调用:将数据被发送到设备. DMA_TO_DEVICE
只有一个缓冲区被传输时,使用dma_map_single函数映射它:
dma_addr_t dma_map_single(struct devicedev,voidbuffer,size_t size,
enum dma_data_direction direction);
返回值是总线地址,可以把它传递给设备;

传输完成时,使用dma_unmap_single函数删除映射.
void dma_unmap_single(struct device*dev,dma_ddr_t dma_addr,
size_t size,enum dma_data_direction direction);
size和direction参数必须与映射缓冲区参数相匹配.

驱动程序不经过撤销映射就访问流DMA缓冲区的内容:
void dma_sync_single_for_cpu(struct device*dev,dma_handle_t bus_addr,
size_t size,enum dma_data_direction direction);

void dma_sync_single_for_device(struct device*dev,dma_handle_t bus_addr,
size_t size,enum dma_data_direc

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天6点半起床10点半睡觉和今天早晚运动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值