概述
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失败的解决所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复