paging

mac2025-06-07  57

paging_init 函数调用位置如下: start_kernel () --> setup_arch () --> paging_init ()

paging_init ()

--> bootmem_init () //为主内存创建映射 --> bootmem_init_node () //为指定节点的主内存创建映射 --> map_memory_bank() //为一个Bank创建映射 --> create_mapping() //为一个物理存储空间创建映射 --> alloc_init_section()

paging_init ()

--> devicemaps_init () //为设备IO 内存创建映射 --> create_mapping() //为一个物理存储空间创建映射 --> alloc_init_section() --> mdesc->map_io(); --> smdk2440_map_io()

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); //为设备IO 内存创建映射 定义在arch/arm/mm/mmu.c中 kmap_init();

top_pmd = pmd_off_k(0xffff0000);

zero_page = alloc_bootmem_low_pages(PAGE_SIZE); empty_zero_page = virt_to_page(zero_page); flush_dcache_page(empty_zero_page); }

bootmem_init ()和devicemaps_init(mdesc)这两个函数都调用了create_mapping,它是创建页表的直接操作者。

最新回复(0)