3.10内核调试:
/sys/kernel/debug/memblock/memory 查看内核分布
/sys/kernel/debug/memblock/reserver 查看内核预留内存o
------------------------------------------------------------
=====>>arch/arm/mm/ioremap.c
在驱动中重新映射share mem,会导致__arm_ioremap中,判断不过,具体判断如下:
/*
* Don't allow RAM to be mapped - this causes problems with ARMv6+
*/
if (WARN_ON(pfn_valid(pfn)))
return NULL;
---------------------------------
====>>arch/arm/mm/init.c
#ifdef CONFIG_HAVE_ARCH_PFN_VALID
int pfn_valid(unsigned long pfn)
{
return memblock_is_memory(__pfn_to_phys(pfn));
}
EXPORT_SYMBOL(pfn_valid);
#endif
-----------------------------------------------------
===>>mm/memblock.c文件中
int __init memblock_is_reserved(phys_addr_t addr)
{

本文详细分析了Linux 3.10内核中内存预留和ioremap的工作机制。通过`/sys/kernel/debug/memblock`目录查看内存分布,重点探讨了`ioremap.c`中内存映射的判断条件,以及`init.c`和`memblock.c`中内存块的搜索和验证过程。内核启动后,MMU进行全局映射,并使用`memblock.memory`和`memblock.reserved`来标记内存区域。
最低0.47元/天 解锁文章
261

被折叠的 条评论
为什么被折叠?



