Device Driver 인터럽트 서비스 루틴이 호출되지 않는 문제

주싱·2021년 8월 8일
0

Trouble Shooting

목록 보기
6/21
post-custom-banner

SDLC 통신 I/O 드라이버를 개발하면서 만났던 이슈에 대한 트러블 슈팅 과정을 정리합니다.

문제

SDLC 메시지 프레임이 수신되었을 때, 수신 이벤트에 대한 인터럽트 서비스 루틴이 호출되지 않는 문제가 발생했습니다. 메시지 수신 이벤트는 I/O 카드에 의해 인터럽트 방식으로 처리되도록 설정되어 있었습니다. 정상적인 인터럽트 처리 루틴은 다음과 같습니다.

처리 과정

  1. 소프트웨어에서 정상적으로 하드웨어를 설정하고 있는지 메뉴얼과 함께 체크해 보았습니다. 모두 정상이었습니다.
  2. 하드웨어(I/O Chip, IP Module, Carrier Board, VME Bus Controller)의 레지스터 설정이 실제로 정상적으로 되어 있는지 메모리 덤프를 통해 직접 체크해 보았습니다. 모두 정상이었습니다.
  3. 국내 벤더와 해외 제조사에 원인 분석을 요구하였으나 책임있는 조치를 취해주지 않았고, 다만 설정에 문제가 있을 것이라고 회신해 왔습니다.
  4. 소프트웨어 설정에는 문제가 없고, I/O 카드에 문제가 있음을 확인하기 위해 I/O 카드와 버스 컨트롤러 사이에 처리되는 인터럽트 신호(Interrupt Request Pin, Ack Pin, Data Pin)를 오실로스코프로 체크해 보았습니다.
  1. 확인 결과 메시지가 수신 되었을 때, 인터럽트 요청 신호는 생성되지만, 인터럽트 벡터 값을 반환해 주고 있지 않음을 확인했습니다. 메모리를 덤프하여 인터럽트 벡터 설정 레지스터 값을 확인해 보았고 설정 값은 정확히 설정되어 있음을 확인했습니다.

    인터럽트 벡터 : CPU가 인터럽트의 종류를 식별하여 적절한 서비스 함수를 호출해 주기 위한 인터럽트 식별자

  1. 해외 제조사에 위 사실을 전달했고, 이후 여러 과정을 통해 I/O 카드의 FPGA에 문제가 있음이 확인되었고 정상적인 칩으로 교체하여 문제가 해결되었습니다.
profile
소프트웨어 엔지니어, 일상
post-custom-banner

0개의 댓글