@[TOC] 目录
1:内存解析流程
(1)Scane Dtb file
扫描DTB文件,然后获取Memory的布局以及大小范围等.
(2)
2: Linux Memory 初始化
asmlinkage void __init start_kernel(void)
{
...........
setup_arch(&command_line);
.......................
build_all_zonelists();//create zone fallback order
page_alloc_init();//register callback
...............
mem_init(); //boot memory retire,create buddy allocator
kmem_cache_init();//init slab allocator
...........
anon_vma_init();//create a vma slab
.................
}
从start_kernel()函数,memory相关的步骤,可以大致分为三大块:
- setup_arch(): boot memory allocator初始化 和直接映射和固定映射的页表创建,然后再 启动分页单元,再初始化每个Node下的Zone
- mem_init(): 将boot memory allocator退休,将已经在boot memory阶段使用的memory标示为reserve,将未使用的memory以page为单位释放给buddy allocator
- keme_cache_init():初始化slab allocator的原始slab:cache_cache,在此过后,slab allocator开始使用。