[t:/]$ 지식_

WIN CE .Net 4.2 IRQ 삽질 짬밥들.

2004/12/15

1.

BSP 루트의 inc/oalintr.h 에 인터럽트 번호 정의

2.

가장 최초의 인터럽트 번호는 public/common/oak/inc/nkintr.h 에.

3.

인터럽트 번호는 HAL 로서 사상된 것이므로 아무렇게나 정의해도 괜찮다.

4.

cfw.c 의 인터럽트 / 하드웨어 초기화 루틴에서 인터럽트 번호 매칭과 등록을 시행한다.
cfw.c 는 파일명이 아키텍쳐마다 조금씩 다르다.

5.

각각의 인터럽트에 Enable, Disable, Done 존재.
이 분기에서 oalintr.h 에서 정의한 인터럽트 번호를 가지고 분기한다.
용도는 함수명에 정의된 바와 같다.

6.

중요한 것은 써드파티 드라이버들은 인터럽트 번호를 이미 정의된 규약으로 컴파일 해 놓았다는 것이다.
NDIS 같은 경우 이미 DLL 로서 존재하므로 하드코딩으로 인터럽트 번호가 박혀있다.
NDIS 는 SYSINTR_ETHER 를 쓴다.

7.

이런 인터럽트들을 스탠다드 인터럽트라고 하여 이미 규정된 번호를 건들면 안 된다 ㅡ.ㅡ;

7.1

Kernel/hal/arm/intxsc1.c 에서 인터럽트 핸들러에 진입시 실제로 인터럽트 번호를 리턴하도록 해준다.
당근 펜딩이니 금지니 이런 처리는 해줘야 함.

8.

코드 이쁘게 한다고 시퀀설하게 매겨두면 후한이 있으리라..

9.

실제 인터럽트들이 등록되는 것을 관측하기 위하여 OEM... Enable 류의 함수에서 살짝 찍어볼 수 있다 ㅡ.ㅡ;

10.

비싼 디버거를 사줘도 하드코어 디버깅으로 결국 해결하는 구나 ㅠ.ㅠ









[t:/] is not "technology - root". dawnsea, rss