我是靠谱客的博主 刻苦小懒虫,最近开发中收集的这篇文章主要介绍记录一次dma_alloc_coherent失败的解决,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

dma_alloc_coherent(dev, ...)

分配内存失败,驱动加载过程中 有对需要分配节点进行设置mask

 失败是因为dma_alloc_coherent申请1MB内存失败

刚开始怀疑linux系统内存伙伴系统中在1MB内存上没有内存了

检查发现还是足够的

 查看别人博客

ftrace+printk 跟踪dma_alloc_coherent分配失败_dachunfree的博客-CSDN博客

初步怀疑和DMA内存虚拟地址有关,然后查看启动DMA相关日志

失败的日志

 差别在iommu使能了的,出现dma_alloc_coherent失败

后续准备禁止iommu

通过对比 /proc/cmdline

发现linux系统启动grub脚本是打开的iommu的,正常能分配内存的主机是关闭的

 Ubuntu开机引导grub进行修改启动参数

sudo vi /etc/default/grub

关闭iommu配置参数

sudo update-grub     更新启动镜像并生效

重启系统

发现DMAR IOMMU enabled没有了

dma_alloc_coherent即可正常分配内存

Ubuntu预留内存启动系统

https://blog.csdn.net/weixin_36304957/article/details/116616193

最后

以上就是刻苦小懒虫为你收集整理的记录一次dma_alloc_coherent失败的解决的全部内容,希望文章能够帮你解决记录一次dma_alloc_coherent失败的解决所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部