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/weixin_36304957/article/details/116616193

更多推荐

记录一次dma_alloc_coherent失败的解决