본문 바로가기
기술자료/Linux

mmu.c 분석 시 참조 사이트

by 와이즈캣 2013. 10. 10.
728x90
반응형

http://blee74.tistory.com/

https://blee74.tistory.com/entry/devicemapsinit-archarmmmmmuc

 

[ devicemaps_init ] arch/arm/mm/mmu.c

페이지 테이블에서 VMALLOC_END ~ 끝까지  영역을 0 으로 초기화 한다. high-vectors ( 0xffff0000 ) 를 맵핑한다. mdesc->map_io() 를 호출하여, device 를 맵핑한다. SMDK2410 의 경우엔 smdk2410_map_io 를 호..

blee74.tistory.com

페이지 테이블에서 VMALLOC_END ~ 끝까지  영역을 0 으로 초기화 한다.

high-vectors ( 0xffff0000 ) 맵핑한다.

mdesc->map_io() 호출하여, device 맵핑한다.

SMDK2410 경우엔 smdk2410_map_io 호출한다.

swapper_pg_dir ( 0xC0004000 )

 offset   level 1 descriptor 
 0x000 * 4   0
  :   :
 0xF00 * 4 0x4a000452
 0xF01 * 4 0x48000452
 0xF02 * 4 0x4c000452
 0xF03 * 4  0x4d000452
 0xF04 * 4  0x50000452
 0xF05 * 4   0x51000452
 0xF06 * 4  0
 0xF07 * 4  0x53000452
  :  
 0xF64 * 4  0x56000452
  :  
 0xFFE * 4  0x30002031
 0xFFF * 4 0x30002431

 

[ free_area_init_node ] mm/page_alloc.c

contig_page_data 의 node_id, node_start_pfn 값을 설정하고

calculate_node_totalpages() 를 호출하여, node_spanned_pages, node_present_pages 값을 계산한다.

 

alloc_node_mem_map() 를 호출해서 page 배열을 할당하고, node_mem_map 에 시작 위치를 가리킨다.mem_map 값으로도 설정한다.

 

free_area_init_core() 를 호출하여, 각 page 들을 초기화 한다.

 

[ free_area_init_core ] mm/page_alloc.c
 

zone 를 초기화 한다.

 

[ devicemaps_init ] arch/arm/mm/mmu.c

vectors 를 bootmem 에서 PAGE_SIZE 만큼 할당 받는다.

 

페이지 테이블 0xffff0000 에 등록한다.

 

 

mdesc->map_io 를 호출한다.

 

MACHINE_START(INTEGRATOR, "ARM-Integrator")

    /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */

    .phys_io    = 0x16000000,

    .io_pg_offst    = ((0xf1600000) >> 18) & 0xfffc,

    .boot_params    = 0x00000100,

    .map_io     = ap_map_io,

    .init_irq   = ap_init_irq,

    .timer      = &ap_timer,

    .init_machine   = ap_init,

MACHINE_END

 

728x90