mini2440内存初始化分析

这篇博客详细分析了mini2440设备的内存初始化过程,与常见方法不同,它在处理fdt(Flattened Device Tree)时并未使用early_fixmap_init()之后的固定映射,而是直接通过物理内存映射来获取fdt的虚拟地址。
摘要由CSDN通过智能技术生成
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值