本文主要是介绍OK6410A 开发板 (八) 32 linux-5.11 OK6410A 从内存角度简略分析整个启动过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
从 arch/arm/kernel/head.S 中的 stext 到 内核 rest_init 的 system_state = SYSTEM_SCHEDULING;
分析 整个内存的启动过程至于 为什么不分析 arch/arm/boot/compressed/head.S 中的start 到 arch/arm/kernel/head.S 中的 stext
因为 这个过程可以不跑的话, linux 也能运行起来
之前在 https://blog.csdn.net/u011011827/article/details/115944495 分析 过,此过程 跑不跑 带来的效果的是一样的
整个过程可以分段为5个阶段
A arch/arm/kernel/head.S 中的 stext符号 - __turn_mmu_on符号
----此时开了MMU,开启了虚拟内存时代
B __turn_mmu_on符号 - setup_arch->paging_init->bootmem_init->memblock_allow_resize返回
----此时memblock初始化完成,开启了基于虚拟内时代的 memblock内存管理器时代
C setup_arch->paging_init->bootmem_init->memblock_allow_resize返回 - mm_init->mem_init返回
----此时memblock消亡,buddy初始化完成,开启了基于虚拟内时代的 buddy内存管理器时代
D mm_init->mem_init返回 -> mm_init->kmem_cache_init返回
----此时slab建立,开启了基于 buddy内存管理器时代 的 slab内存管理器时代
E mm_init->kmem_cache_init返回 -> mm_init->vmalloc_init返回
----此时vmalloc建立,
----此时,buddy,slab,vmalloc 三个内存管理器 共同提供 内存申请释放服务
---- buddy 负责 大额内存申请
---- slab 向 buddy 申请大额内存后,提供给用户小额内存借贷
---- vmalloc
这篇关于OK6410A 开发板 (八) 32 linux-5.11 OK6410A 从内存角度简略分析整个启动过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!