Linux cmdline 解析(CMA 预留内存)

本文介绍了Linux 3.14版本及Android L中,内核启动时如何解析cmdline,特别是针对CMA(Contiguous Memory Area)预留内存的处理。通过早期参数解析流程,包括start_kernel、parse_early_param等,详细阐述了CMA预留区域大小的确定过程,以及DTS中cma-default节点的角色。注意,setup_arch在cmdline解析之前执行,因此DTS中的配置会优先于cmdline设定CMA预留区域的大小。

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

Linux Version:3.14
Android : L

cmdline在kernel启动的时候被解析.
cmdline启动的log中可以看到,比如我的是

command_line = androidboot.bootloader=1537.100_M1S1 androidboot.serialno=004999010640000 bl_shared_ram=4k@0xfff4f000 console=ttyS0,115200n8 idle=halt debug androidboot.hardware=sofia_lte cma=170M nolapic_pm firmware_class.path=/system/vendor/firmware androidboot.selinux=permissive androidboot.selinux=permissive

以CMA为例

cma=170M

drivers/base/dma-contiguous.c定义了

static int __init early_cma(char *p)
{
    pr_debug("%s(%s)\n", __func__, p);
   
<think>好的,我需要回答用户关于在Ubuntu中查看预留CMA(连续内存分配器)内存的问题。首先,我得回忆一下CMA的基本概念和作用。CMA主要用于为需要大块连续物理内存的设备(如GPU、摄像头等)预留内存区域。 接下来,用户想知道如何查看这些预留CMA内存。我需要考虑不同的方法。首先想到的是通过内核启动参数,因为CMA通常在启动时通过参数预留。用户可以在/proc/cmdline中查看启动参数,比如可能有“cma=64M”这样的参数。 然后,系统可能会在/sys/kernel/debug/cma目录下提供相关信息。这个目录中的每个子目录对应一个CMA区域,里面可能有base_pfn、count、order_per_bit等文件,显示CMA的起始页框号、页面数量等信息。 另外,使用dmesg命令查看内核启动时的日志,可能会找到CMA初始化的信息,比如“Reserved 64 MiB at 0x...”。这也是一个有效的方法。 如果系统没有debugfs挂载,需要指导用户先挂载它,使用mount -t debugfs none /sys/kernel/debug。此外,可能还需要确认内核配置是否启用了CMA和debugfs支持。 还有一些其他工具,比如dmidecode或/proc/iomem,但可能不如前面提到的方法直接。需要确保用户了解不同方法的适用场景,并根据具体情况选择。 最后,总结这些步骤,以清晰的方式呈现给用户,可能需要分点说明每个方法的操作步骤和预期输出。同时,提醒用户权限问题,可能需要使用sudo来查看某些文件或挂载目录。</think>在Ubuntu系统中查看预留CMA(Contiguous Memory Allocator)内存可通过以下方法实现: --- ### 1. **查看内核启动参数** CMA区域通常在系统启动时通过内核参数预留,通过以下命令查看: ```bash cat /proc/cmdline | grep -o 'cma=[^ ]*' ``` 输出示例:`cma=64M` 表示预留了64MB CMA内存 --- ### 2. **通过debugfs查看CMA信息** 需要先挂载debugfs(如未挂载): ```bash sudo mount -t debugfs none /sys/kernel/debug ``` 然后查看CMA区域: ```bash ls /sys/kernel/debug/cma ``` 每个子目录对应一个CMA区域,查看具体信息: ```bash # 示例:查看第一个CMA区域 cat /sys/kernel/debug/cma/cma-0/base_pfn # 起始页框号 cat /sys/kernel/debug/cma/cma-0/count # 总页数 cat /sys/kernel/debug/cma/cma-0/order_per_bit ``` --- ### 3. **通过dmesg日志** 查看内核初始化时的CMA分配记录: ```bash dmesg | grep -i cma ``` 典型输出: ``` [ 0.000000] cma: Reserved 64 MiB at 0x00000000fb400000 ``` --- ### 4. **检查内核配置** 确认内核编译时启用了CMA: ```bash grep CONFIG_CMA /boot/config-$(uname -r) ``` 输出应包含: ``` CONFIG_CMA=y CONFIG_CMA_DEBUG=y (可选,调试用) ``` --- ### 其他补充说明 - **物理地址范围**:通过`sudo cat /proc/iomem`可查看物理内存映射,搜索`reserved`条目 - **CMA用途**:主要用于GPU、视频编解码等需要连续物理内存的设备驱动 - **动态调整**:CMA大小需在启动参数中静态指定,运行时无法修改 如果上述方法无法获取信息,可能需要检查内核是否支持CMA或debugfs功能是否启用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值