setup_arch
mdesc = setup_machine_fdt(__atags_pointer);
if (!dt_phys || !early_init_dt_verify(phys_to_virt(dt_phys)))
return NULL;
early_init_dt_scan_nodes();
early_init_dt_scan_memory();
early_init_dt_add_memory_arch(base, size);//dts中base=0x30000000,size=64M,
添加到memblock中,memblock管理了从dts中获得的最基本的内存块大小个数,包括在dts中配置了reserved的
属性的内存块,当所有物理内存添加进系统后,在mm_init之前,系统会使用memblock模块来对内存进行管理
init_mm.start_code = (unsigned long) _text;
init_mm.end_code = (unsigned long) _etext;
init_mm.end_data = (unsigned long) _edata;
init_mm.brk = (unsigned long) _end;
early_fixmap_init();//
pmd = fixmap_pmd(FIXADDR_TOP); //返回FIXADDR_TOP对应的页目录项,对于二级映射,pmd就是pgd,pgd全局页表正是swapper_pg_dir全局页表
pmd_populate_kernel(&init_mm, pmd, bm_pte);//bm_pte是一个全局变量数组,作为页表使用
__pmd_populate(pmdp, __pa(ptep), _PAGE_KERNEL_TABL
mini2440内存初始化分析
最新推荐文章于 2023-02-03 17:00:10 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)