PCIe之DMA (三)
2016-07-10 21:49
591 查看
linux下DMA编程
dam的一致性问题
一致性问题 :DAM针对内存区域的目标地址与cache缓存对象存在重叠区域,经过DMA后,cache中的值发生改变,但CPU不知道cache中的值改变了,它任然认为Cache中的数据就是
内存中的数据,以后访问cache映射的内存时,它任然使用陈旧的cache数据,就造成Cache
与内存之间的数据不一致。
解决办法:直接禁止DMA目标地址范围内的Cache功能。
API
1.DMA缓冲区分配:DMA缓冲区的物理内存必须是连续的//addr mask int dma_set_mask(struct device *dev,u64 mask) //DAM缓冲区分配API static unsigned long dma_mem_alloc(int size); //一致性DAM缓冲区分配 void * dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp); void * dma_free_coherent(struct device *dev, size_t size, dma_addr_t *handle); void * dma_alloc_writecombine(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp); void * dma_free_writecombine(struct device *dev, size_t size, dma_addr_t *handle); //对于PCI void * pci_alloc_consistent(struct pci_dev *pdev,size_t size,void cpu_addr); //流式DMA映射
相关文章推荐
- PCIe之DMA (一)
- PCIe之DMA (二)
- linux下tar、zip等压缩、解压命令
- Linux程序运行时找不到动态链接库的原因
- date -s 修改时间
- Linux下开机启动脚本 etc rcS 环境变量 pid判断
- GIT 存储格式与运用
- Linux下生成ubi文件
- Linux学习笔记之命令总结
- 嵌入式开发第二日(man 手册、linux基本命令、vim编辑器、代码编译过程、编译工具、基本数据类型、控制流)
- 将CentOS配置成本地yum
- [Linux]Linux命令的英文全称
- 我的linux命令笔记
- CentOS7 安装Mysql5.7(解压缩版)
- CentOS7 安装zookeeper
- 将Centos的yum源更换为国内的阿里云源
- ARM中pc、lr寄存器
- linux 下gcc 编译结构体问题
- Linux的nm查看动态和静态库中的符号
- Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结