https://blee74.tistory.com/entry/devicemapsinit-archarmmmmmuc
페이지 테이블에서 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
'기술자료 > Linux' 카테고리의 다른 글
버추얼 박스 최신 버전 다운로드 및 설치 VirtualBox 6.1.22 144080 Win installation (0) | 2021.06.16 |
---|---|
리눅스 터미널 프로그래밍 (0) | 2016.03.31 |
Linux gcc ASLR 해제 ( 랜덤 스택 Random Stack ) (1) | 2016.03.31 |
2015.11.03 - 권오민 - sys를 이용한 GPIO 제어/커널 빌드/file_operations 구조체/Bit Manipulation (12) | 2015.11.03 |
Serial 통신 ( RS232C ) 수업 자료 (0) | 2013.09.13 |
Linux C에서 write 함수를 이용한 화면 지우기 (2) | 2013.07.11 |
pthread API 정리 (0) | 2013.07.09 |
linux-2.4.32 kernel header (0) | 2012.10.17 |