当前位置: 首页 > 知识库问答 >
问题:

cma缓冲区内存分配失败

裴经义
2023-03-14

我正在尝试为DMA Linux编写驱动程序,但我的驱动程序一直无法执行DMA_CONCENTER_alloc,我已经增加了CMA内存和CONCENTERY_pool。。。

我错过了什么?

dmesg在物理CPU 0x0上引导Linux<br>Linux版本4.14.0-xilinx-v2018.2(oe-user@oe-host)(gcc版本7.2.0(gcc))#5 SMP抢占Sun二月17日23:20:49太平洋标准时间2019
CPU:ARMv7处理器[413fc090]版本0(ARMv7),cr=18c5387d
CPU:PIPT/VIPT非关联数据缓存,VIPT别名指令缓存,忽略
cma:dma_Continuous_reserve(限制ffffffff)
cma:dma_ Continuqueous_ reserve:为全局区域保留60个MiB
cma:cma_declare_Concontuous(大小0x03c00000,基数0x00000000,限制0xFFFFFFFFF对齐0x00000000)
cma:0x3c400000处保留60个MiB
在节点0上总页面:262144
free_area_init_node:节点0,pgdat c183af40,node_mem_map ef7f7000
普通区:1536页用于memmap
正常区:0页保留
正常区域:196608页,后进先出批:31
高级内存区:65536页,后入先出批处理:15
PERPU:嵌入式16页/cpu@ef7ce000 s34764 r8192 d22580 u65536
pcpu alloc:s34764-r8192-d22580-U65536Alloc=16*4096移动性分组开启。总页数:260608<br>内核命令行:控制台=TTYPS0115200 earlyprintk coherent_pool=32MiB<br>PID哈希表条目:4096(顺序:216384字节)<br>Dentry缓存哈希表条目数:131072(顺序:752488字节)<br>索引节点缓存哈希表条目:65536(顺序:622144字节)<br>内存:953428K/1048576K可用(6144K内核代码,238K rwdata,1568K rodata,15360K初始化,218K bss,33708K保留,61440K cma保留,200704K highmem)
虚拟内核内存布局:
向量:0xffff0000-0xFF1000(4KB)
fixmap:0xffc00000-0xfff00000(3072KB)
vmalloc:0xf0800000-0xff800000(240MB)
低内存:0xc0000000-0xf0000000(768MB)
pkmap:0xbfe00000-0xBF00000 C0000000(2 MB)
模块:0xbf000000-0xbfe00000(14 MB)
文本:0xc0008000-0xc0700000(7136 kB)
。初始化:0xc0900000-0xc1800000(15360 kB)
。数据:0xC180000-0xc183bb40(239 kB)<
RCU将cpu从NR_cpu=4限制到NR_ cpu_ID=2。
任务RCU已启用
RCU:调整RCU_fanout_leaf=16的几何结构,nr_cpu_ID=2
nr_ IRQ:16,nr-IRQ:15,预分配IRQ:17
efuse映射到f0802000
slcr映射到F0801000
L2C:平台修改辅助控制寄存器:0x72360000-

cma: cma_alloc(cma c184d3e0,计数 1,对齐 0)
cma: cma_alloc(): 返回的 effbf020
mmc0: e0100000.sdhci 上的 SDHCI 控制器 [e0100000.sdhci] 使用 ADMA
ledtrig-cpu: 注册以指示 CPU 上的活动
usbcore: 已注册的新接口驱动程序 usbhid
usbhid usbhid: USB HID 核心驱动程序
fpga_manager FPGA0: Xilinx Zynq FPGA 管理器 注册
的 NET: 注册协议系列 10

释放未使用的内核内存:15360K
udevd[758]:启动版本3.2.2
udevd[759]:启动eudev-3 . 2 . 2 < br > CMA:CMA _ alloc(CMA c 184 D3 e 0,count 1,align 0)
cma: cma_alloc():返回efbf 040 < br > CMA:CMA _ alloc(CMA c 184 D3 e 0,count 1,align 0)
cma:< br> luscher 40400000.dma:设备树探测< br> luscher 40400000.dma: luscher在0x40400000映射到0xf2990000,irq=49
缓冲区大小0x00000000
缓冲区编号0x 0000000 < br > CMA:CMA _ alloc(CMA c 184 d3e 0,count 0,align 8)< br > lus cher 4000000

共有2个答案

邓焱
2023-03-14

在我的例子中,设备树的“兼容”字段中设置的名称与模块名称之间存在差异(它们必须匹配)。我还增加了coherent_pool:

chosen {
        bootargs = "console=ttyPS0,115200 earlyprintk coherent_pool=32MiB";
           };
孟德曜
2023-03-14

函数cma_alloc参数计数等于0,直接返回失败,请检查下面的count参数

cma: cma_alloc(cma c184d3e0, count 0, align 8)
 类似资料:
  • 我试图理解DirectByteBuffer如何在Linux上工作,并编写了以下在strace下运行的非常简单的程序: 实际上,我期望一些mmap或sys\u brk系统调用直接从操作系统分配内存,但实际上它只是设置请求页面的读写保护。我的意思是: 这似乎是分配直接缓冲区比分配堆缓冲区慢的原因,因为每次分配都需要系统调用。 如果我错了,请纠正我,但是堆缓冲区分配(如果发生在TLAB内部)相当于返回一

  • 缓冲区分析(buffer)是根据指定的距离在点、线和多边形实体周围自动建立一定宽度的区域范围的分析方法。例如,在环境治理时,常在污染的河流周围划出一定宽度的范围表示受到污染的区域;又如在飞机场,常根据附近居民的健康需要在周围划分出一定范围的区域作为非居住区等。 下面以长春数据为例,对“团结路”进行半径为10米的圆头缓冲分析,缓冲区分析的接口使用方法如下: 设置缓冲区分析参数、缓冲区通用参数。 //

  • 提示: ●输入点、线、面指定距离为半径来创建区域。 ●保存图层可以是新建图层或是已有区域图层。 ●缓冲半径数值不能大于50000米。 操作步骤: ①选择"统计分析"模块。 ②点击"缓冲区分析"。 操作动图: [查看原图]

  • 缓冲区分析 缓冲区分析,即以某个点为中心,创建一个指定距离为半径的圆,这种圆生成的是一个区划面,可以保存下来,存在缓冲区图层里,结合“点面互查”进行网点、区划的空间分析。 例如:一个广告牌是一个网点,那广告牌图层生成一个半径为2公里的缓冲区保存为缓冲区图层后,就可以通过店面互查功能,查询每个广告牌覆盖的客户网点图层,覆盖率有多少,从而帮助决策,是否应该剔除掉相邻比价近的广告排位,或者补充漏掉区域的

  • 问题内容: 我有来自MySQL的错误日志,知道吗?网站工作了一段时间,然后几个小时后我完全关闭了MySQL。 问题答案: TLDR; Mysql由于内存不足而无法重新启动,请检查是否配置了适当的交换文件。 没帮助吗 如果这不是您的问题,那么继续研究的更多合格问题是: mysqld服务每天在ec2服务器上停止一次 https://askubuntu.com/questions/422037/opti