void __init paging_init(struct meminfo *mi, struct machine_desc *mdesc) { void *zero_page; //这个函数主要是用来建立各种类型的页表选项(比如内存是MEMORY类型,设备室DEVICE,中断向量表是HIGH_VECTORS) build_mem_type_table(); { struct cachepolicy *cp; //获取cp15处理器的c1寄存器位 unsigned int ...
paging_init函数定义在arch/arm/mm/mmu.c中: void __init paging_init(struct machine_desc *mdesc) { void *zero_page;build_mem_type_table(); sanity_check_meminfo(); prepare_page_table(); bootmem_init(); // 为主内存创建映射, 定义在arch/arm/mm/init.c 中 devicemaps_init(mdesc); //为...
2.4 devicemaps_init 该函数大致流程如下图所示,首先调用early_alloc分配一个页,然后调用early_trap_init将向量表复制到新的页内,最后调用create_mapping将这个页映射到0xffff0000处,如果mdesc->map_io存在,还会对设备相关的IO进行映射。 比如对于s5p4418: 内核就会把上面几段IO物理地址映射到对应的地方,最实用的莫...
//1.arch/arm/mm/Init.c->paging_init() void __init paging_init(struct meminfo *mi, struct machine_desc *mdesc) {void *zero_page; int node; //arch/arm/mm/Init.c->static struct meminfo meminfo __initdata = { 0, }; memcpy(&meminfo, mi, sizeof(meminfo));//将mi拷贝到全局量memin...