Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

51107
469
422683


[리눅스커널][인터럽트] 인터럽트 핸들러 등록 시 플래그 설정 5. 인터럽트

인터럽트의 속성 플래그를 소개하기에 앞서 인터럽트의 신호에 대해 살펴보겠습니다. 디바이스 브링업(Bring-up)을 할 때 인터럽트로 디바이스와 제대로 통신하는지 점검하는 경우가 있습니다.

 
* 유튜브 강의 동영상도 있으니 같이 들으시면 좋습니다.



 


"이 포스팅이 유익하다고 생각되시면 댓글로 응원해주시면 감사하겠습니다.  
"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)

# Reference (인터럽트 처리)

인터럽트 소개  
   * 리눅스 커널에서의 인터럽트 처리 흐름    
인터럽트 컨텍스트  
인터럽트 핸들러는 언제 호출될까?  
인터럽트 핸들러는 어떻게 등록할까?  
인터럽트 디스크립터  
인터럽트 디버깅  


# Reference: For more information on 'Linux Kernel';

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2



  

핑백

덧글

  • 최재국 2020/05/11 00:19 # 삭제 답글

    제가 커널 4.19.115 버전에서 디바이스 드라이버 만들고 있는데용
    인터럽트 서비스 함수를 수행하는 동안에 다른 인터럽트가 발생하지 않도록 인터럽트 서비스 함수를 등록하려면 플래그를 써야하는데
    책에 너무옛날꺼라서 그런지 4.19.115 버전에는 SA_INTERRUPT도 없고 그나마 최근꺼인 IRQF_DISABLED도 없더라고요.
    비슷한거 찾아봤는데 아무리 찾아봐도 없더라고용 이럴때는 어떻게 등록하나요???
  • AustinKim 2020/05/11 18:17 #

    인터럽트가 발생하면 해당 CPU의 인터럽트 라인을 비활성화한 후 인터럽트 핸들러를 처리하는 구조로 동작합니다.
    따라서, 인터럽트 핸들러가 처리 중에 인터럽트를 비활성화하는 부분은 고려하지 않아도 됩니다.

    추가로 인터럽트가 발생할 때의 아래와 같은 ftrace 메시지를 보면 d란 알파벳이 보입니다. 이는 해당 CPU의 인터럽트 라인을 비활성화했다는 의미입니다.
    kworker/0:1-31 [000] d.h. 592.790968: irq_handler_entry: irq=17 name=3f00b880.mailbox

    출처:
    https://github.com/wikibook/linux-kernel/blob/master/6%EC%9E%A5.%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8%20%ED%9B%84%EB%B0%98%EB%B6%80%20%EC%B2%98%EB%A6%AC/6.5.2/ftrace_log.c

    Thanks,
    Austin Kim
  • 최재국 2020/05/12 13:29 # 삭제 답글

    선생님 그럼 우선 순위가 높은 인터럽트가 발생하면 지금 수행중인 인터럽트 서비스를 중지시키고 우선 순위가 높은 인터럽트가 실행이되야하는데
    등록할때부터 비활성화가 되면 우선순위라는게 왜있는거죠..ㅠㅠㅠㅠㅠㅠㅠㅠ
  • 최재국 2020/05/12 14:27 # 삭제

    좀 찾아봤는데

    인터럽트 핸들러를 등록시키면 디폴트로 인터럽트를 비활성화 되니까 인터럽트 서비스 함수에서 enable_irq() 함수를 쓰면 다른 인터럽트를 허용하게 되기때문에 우선순위가 높은 인터럽트가 실행이 가능하게 되는 것인가요????.. 무식한질문 죄송합니당..ㅠ.ㅠ.ㅠ.
  • AustinKim 2020/05/12 14:41 #

    리눅스 커널을 처음 접하신다면 '인터럽트'들 사이의 우선 순위는 고려하지 않으셔도 좋습니다. 리눅스 커널에서 인터럽트 사이의 우선순위를 설정하는 함수를 지원하지 않거든요. 외부 주변 기기에서 올려주는 인터럽트보다 시스템 내부에서 발생하는 인터럽트가 우선적으로 처리된다는 정도만 아셔도 개발에 문제가 없을 것입니다.

    만약 실전 개발자이시면 인터럽트 컨트롤러 소스와 문서를 분석하시면 되는데, 아래 링크에 있는 정보를 참고하시면 좋을 것 같습니다.

    http://jake.dothome.co.kr/ic/
    https://developer.arm.com/docs/ihi0048/b/arm-generic-interrupt-controller-architecture-version-20-architecture-specification

    Thanks,
    Austin Kim
댓글 입력 영역