Linux内核态获取System RAM范围方法
Linux内核态获取System RAM范围的接口或方法
在Linux内核态中,获取System RAM范围的常用方法如下:
方法一:遍历资源树(iomem_resource)
通过遍历内核资源树iomem_resource
,查找类型为IORESOURCE_SYSTEM_RAM
的资源节点:
1 |
|
注意事项:
- 需持有
resource_lock
读锁确保线程安全。 - 使用
%pap
格式符打印resource
结构的地址(需支持该格式的内核版本)。
方法二:使用walk_iomem_res_desc
函数
内核提供walk_iomem_res_desc
函数遍历特定类型的资源:
1 |
|
说明:
- 该函数自动处理锁和资源遍历,更为简洁安全。
walk_iomem_res_desc
的参数指定资源类型和回调函数。
方法三:使用memblock(早期内核)
在支持memblock且未释放的配置中,遍历memblock.memory
:
1 |
|
注意:
- 需内核配置
CONFIG_HAVE_MEMBLOCK
且保留memblock数据。 - 主要适用于启动初期或特定调试场景。
总结
- 推荐方法:使用资源树遍历或
walk_iomem_res_desc
,适用于大多数内核版本,安全可靠。 - 早期内存信息:在合适场景下使用memblock,但需注意其可用性。
- 同步机制:操作资源时确保加锁,避免竞态条件。
根据内核版本和具体需求选择最合适的方法。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Helloeuler!