【推荐阅读】
内存初始化主要在start_kernel函数中,主要内容有:
从dts中扫描所有物理内存和预留内存,并添加到memblock子系统
给memblock中的所有非预留memory region建立页表映射
sparse内存模型初始化
计算每个zone管理内存的大小以及每个zone的free list初始化
释放所有空闲内存块到伙伴系统
6.初始化slab和vmalloc子系统
7.初始化kasan,memleak等各种内存检测模块
![](https://i-blog.csdnimg.cn/blog_migrate/30092f74b1e562c20595003aa9a28d77.jpeg)
1.1 内存扫描
系统支持的内存,是怎么告诉内核的?在伙伴系统和slab没有初始化时,内存分配是怎么进行的?
系统支持的可用内存,一般都在DTS中声明,包含起始物理地址(base),和大小(size),在系统启动时,解析DTS并添加到memblock子系统. memblock子系统,是Linux启动阶段的内存分配接口.