linux3.4.2之dma驱动

1. 分配源地址、目的地址

src_addr = dma_alloc_writecombine(NULL,BUFF_SIZE, &psrc_addr,GFP_KERNEL);
dst_addr = dma_alloc_writecombine(NULL,BUFF_SIZE, &pdst_addr,GFP_KERNEL);

函数里面是源和目的的物理地址,函数返回的是源和目的的虚拟地址。

2. 源和目的的内存释放

dma_free_writecombine(NULL, BUFF_SIZE,src_addr,psrc_addr);
dma_free_writecombine(NULL, BUFF_SIZE,dst_addr,pdst_addr);

3. 和硬件打交道用到的是物理地址,比如把源和目的地址告诉DMA寄存器

     dma_regs->disrc  = psrc_addr;
     dma_regs->didst  = pdst_addr;

4. 调用内核函数使用的一般是虚拟地址

memset(src_addr,0xaa,BUFF_SIZE);  //从src开始的BUFF_SIZE空间每个字节都设置为0xaa
memset(dst_addr,0x55,BUFF_SIZE);

完整程序见https://www.cnblogs.com/zhu-g5may/p/9314819.html

 

转载于:https://www.cnblogs.com/zhu-g5may/p/9314815.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值