You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证设备树中预留内存是否生效及/sys/class查询方法

验证预留内存是否生效的方法

当然可以通过内核提供的sysfs和procfs接口来验证你在设备树中定义的内存是否已被正确预留,确保不会被其他程序意外写入。结合你给出的设备树条目,具体步骤如下:

1. 确认设备树预留节点被内核正确识别

内核会把设备树中的reserved-memory节点解析并暴露在sysfs中,你可以通过以下路径检查:

cd /sys/firmware/devicetree/base/reserved-memory/spw_dma@3E000000/

查看reg文件的内容(设备树中定义的地址和大小),用hexdump解析更直观:

hexdump -C reg

输出应该对应你设备树里的reg = <0x3E000000 0x2000000>——如果是32位架构,会显示两个4字节的大端值:3e 00 00 00(对应0x3E000000)和02 00 00 00(对应0x2000000),这说明内核已经正确读取了你的预留配置。

2. 验证内存区域已被标记为预留

内核会把预留内存从系统可用池移除,你可以通过/proc/iomem查看内存区域的状态:

grep "3e000000" /proc/iomem

如果预留生效,输出会显示类似:

3e000000-3fffffff : Reserved

这个标记意味着这块内存不会被内核的伙伴分配器管理,也无法被普通用户态进程通过malloc等方式分配到,自然也就不会被其他程序意外写入。

3. 额外验证:普通进程无法访问该区域

如果你想进一步确认,可以尝试用普通用户权限编写一个简单的测试程序,尝试mmap这块内存区域——正常情况下会返回失败(权限不足或内存不可用)。即使用root用户尝试,若内核开启了CONFIG_STRICT_DEVMEM配置,写入/dev/mem的预留区域也会被内核阻止(除非你修改了devmem_is_allowed相关逻辑或内核参数)。

需要说明的是,/sys/class下没有直接对应预留内存的专属接口,但上述的sysfs(设备树节点)和procfs(/proc/iomem)都是内核提供的标准、可靠的验证途径,完全可以满足你的需求。

内容的提问来源于stack exchange,提问作者Moritz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:13:54