Linux 预留内存 DMA 使用心得

本文介绍了在Linux系统中如何预留内存用于DMA,包括从内存尾部分配512MB内存,设置起始地址和长度,然后通过内核代码申请使用,使用dma_alloc_coherent进行映射,并使用dma_mmap_coherent将内存映射给用户态,最后讨论了如何通过dma_free_coherent释放内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


如何预留内存参考文档:
Linux Reserved Memory 预留内存
本文采用的是 上文的 “通过DMA API预留内存”的方式

预留的内存如何配置

通过命令

#cat /proc/iomem
7ff00000-7ff00fff : /dma@7ff00000
7ff00000-7ff00fff : /dma@7ff00000
7ff50000-7ff50fff : /hdlcd@7ff50000
7ff60000-7ff60fff : /hdlcd@7ff60000
7ff80000-7ff80fff : /uart@7ff80000
7ff80000-7ff80fff : /uart@7ff80000
7ff90000-7ff90fff : /i2s@7ff90000
7ffa0000-7ffa0fff : /i2c@7ffa0000
7ffc0000-7ffcffff : /ehci@7ffc0000
7ffd0000-7ffd0fff : /memory-controller@7ffd0000
80000000-dfffffff : System RAM
......

可以看到系统内存其中的一块为

80000000-dfffffff : System RAM

我选择从系统内存中的尾部分配512M内存
地址从0xC0000000 开始,长度为0x20000000
我的分配为:

 reserved-memory {
   
        //Reserved memory through DMA API 
        sample_reserved: buffer@0xC0000000 {
   
           compatible = "shared-dma-pool";
            no-map;
            reg = <0x0 0xC0000000 0x0 0x20000000>;
        };
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值