3.free_all_bootmem 1)reset_node_lowmem_managed_pages,将zone 结构中的z->managed_pages =0,如果支持高端内存 2)free_low_memory_core_early—–>__free_memory_core 引用参考: 内存管理之函数mm_init解读之mem_init
在分页机制完成后, 内核通过setup_arch()->bootmem_init开始进行内存基本数据结构(内存结点pg_data_t, 内存域zone和页帧)的初始化工作, 就是在这个函数中, 内核开始从体系结构相关的部分逐渐展开到体系结构无关的部分, 在zone_sizes_init->free_area_init_node中开始, 内核开始进行内存基本数据结构的初始化, ...
unsignedlongfree_all_bootmem_core(bootmem_data_t *bdata)|-->unsignedlongstart = bdata->node_min_pfn;|存放低端内存的起始物理页号.| unsignedlongend = bdata->node_low_pfn;|存放低端内存的结束物理页号.| |-->while(start <end)|--{| unsignedlong*map = bdata->node_bootmem_map;| idx ...
dts 中reserved memory 解析和调用匹配的 of_device_id 的 .data 函数 setup_arch --->arm64_memblock_init --->early_init_fdt_scan_reserved_mem --->fdt_init_reserved_mem --->__reserved_mem_init_node fdt_init_reserved_mem drivers/of/of_reserved_mem.c 246void__init fdt_init_reserved_mem...
start_kernel ——> setup_arch ——> arch_mem_init ——> bootmem_init ——> init_bootmem_node: 此时,不得不说的就是 bootmem 。 1. 什么是bootmem: 我们都知道,所有的物理内存是交给内核管理的,或者说是交给内存管理子系统管理的。那么,从内核启动到内核管理子系统启动之间,是否需要内存呢?答案是肯...
这里开始就是各个node的内存的初始化了。 OK,直接看代码. static void __init arch_mem_init(char **cmdline_p) { extern void plat_mem_setup(void); //定义板级的屏幕的相关信息 plat_mem_setup(); //把代码段也加入到boot_mem_map进行管理(bootm机制) arch_mem_addpart(PFN_DOWN(__pa_symbol(&...
.V... backtrace (crc be7cba35): [<ffffffff81b43f83>] __kmalloc_node_track_caller_noprof+0x333/0x420 [<ffffffff81a52e56>] kmemdup_noprof+0x26/0x50 [<ffffffff821b2f37>] setup_mq_sysctls+0x57/0x1d0 [<ffffffff821b29cc>] copy_ipcs+0x29c/0x3b0 [<ffffffff815d6a10>] create...
内核接着setup_arch()->bootmem_init()函数开始执行 体系结构相关的代码需要在启动期间建立如下信息 系统中各个内存域的页帧边界,保存在max_zone_pfn数组 早期的内核还需记录各结点页帧的分配情况,保存在全局变量early_node_map中 内核提供了一个通用的框架, 用于将上述信息转换为伙伴系统预期的节点和内存域数据...
在分页机制完成后, 内核通过setup_arch()->bootmem_init开始进行内存基本数据结构(内存结点pg_data_t, 内存域zone和页帧)的初始化工作, 就是在这个函数中, 内核开始从体系结构相关的部分逐渐展开到体系结构无关的部分, 在zone_sizes_init->free_area_init_node中开始, 内核开始进行内存基本数据结构的初始化, ...