CP15 c1, Control Register 의 V bit 에 의해 hign vector 를 사용하도록 설정된다.
arch/arm/mm/proc-v6.S
__v6_setup 에서 Control Register 를 읽고 v6_crval 값에 지정된 것으로 clear 후 set 한다.
여서기 V bit 가 설정됨으로 high vector 가 사용된다.
Control Register 를 저장 하지 않지만.. 나중에 __enable_mmu -> __turn_mmu_on 에서 저장함
__v6_setup:
:
adr r5, v6_crval
ldmia r5, {r5, r6}
mrc p15, 0, r0, c1, c0, 0 @ read control register
bic r0, r0, r5 @ clear bits them
orr r0, r0, r6 @ set them
mov pc, lr @ return to head.S:__ret
:
v6_crval:
crval clear=0x01e0fb7f, mmuset=0x00c0387d, ucset=0x00c0187c
:
arch/arm/kernel/entry-armv.S
vector table 과 handler 가 정의되어 있다.
devicemaps_init
high vector(0xffff0000) 페이지 테이블 생성
trap_init
high vector(0xffff0000) 로 복사
init_IRQ
kernel IRQ 스택 초기화
s3c_init_irq
CPU 인터럽터 컨트롤러 초기화
동작은
arch/arm/kernel/entry-armv.S 의 vector table , handler 에서 처리후
asm_do_IRQ 호출한다.
'리눅스커널' 카테고리의 다른 글
[다시 보는 ARM 3.x 커널] 툴체인 설치, 커널 컴파일, 소스 분석 준비 (0) | 2011.09.22 |
---|---|
[ kmem_cache_init ] mm/slab.c (0) | 2009.10.02 |
[ cpu_init ] arch/arm/kernel/setup.c (0) | 2009.10.02 |
[ devicemaps_init ] arch/arm/mm/mmu.c (0) | 2009.10.02 |
[ bootmem_bootmap_pages ] mm/bootmem.c (0) | 2009.10.02 |