페이지 테이블을 KERNEL_RAM_PADDR - 0x4000(16K)에 만든다. 이 영역을 모두 0 으로 초기화 하고, struct proc_info_list 의 PROCINFO_MM_MMUFLAGS 값에 해당하는 __cpu_mm_mmu_flags 값을 읽어 와서 적용한다. 현재 PC가 있는 1Mbyte 영역과 MMU가 enable 되었을 때를 대비한 커널영역에 대한 1차 페이지 테이블을 생성하게 된다. 부트로더로 부터 전달되는 부트 파라미터에 대한 영역도 만들어 준다.
SMDK2410 일 경우, 물리메모리는 0x30000000 에서 시작, 커널은 0x30008000 에 있다. 이때 PC값은 0x30008000 보다 큰 어디를 가르키고 있을 것이다.
swapper_pg_dir ( 0xC0004000 )
0ffset | Level 1 descriptor |
0x000 * 4 | |
: | |
0x300 * 4 | 0x300 << 20 | __cpu_mm_mmu_flags |
: | |
0xC00 * 4 | 0xC00 << 20 | __cpu_mm_mmu_flags |
0xC01 * 4 | 0xC01 << 20 | __cpu_mm_mmu_flags |
0xC02 * 4 | 0xC02 << 20 | __cpu_mm_mmu_flags |
: | |
0xFFF * 4 |
'리눅스커널' 카테고리의 다른 글
[ __enable_mmu ] arch/arm/kernel/head.S (0) | 2009.10.02 |
---|---|
[ __arm920_setup ] arch/arm/mm/proc-arm920.S (0) | 2009.10.02 |
[ __lookup_machine_type ] arch/arm/kernel/head-common.S (0) | 2009.10.02 |
[ __lookup_processor_type ] arch/arm/kernel/head-common.S (0) | 2009.10.02 |
[ stext ] arch/arm/kernel/head.S (0) | 2009.10.02 |