내가 읽고 있는 내용은지도 시간request_irq
, 저는 이 주제를 처음 접했기 때문에 확인할 몇 가지 아이디어가 필요합니다.
- 이 플래그가 설정되면 이 인터럽트 핸들러를 실행하는 동안 모든 인터럽트를 비활성화하도록 커널에 지시합니다.
- 설정되지 않은 경우 인터럽트 핸들러는 모든 인터럽트와 함께 실행됩니다.그들이 활성화하는 것 외에도.
굵은 글씨로 표시된 부분의 경우 인터럽트가 어떤 방식으로든 직렬로 실행됩니까? 즉, 한 번에 하나씩 실행됩니까?
답변1
참고로 IRQF_DISABLED 플래그는 Linux 커널에서 완전히 제거되었습니다.이번 업데이트.
전체 깃발을 제거하게 된 두 가지 주요 이유는 다음과 같습니다.
- 여러 장치가 물리적 인터럽트 라인을 공유하는 경우(하드웨어 비용으로 인해) 해당 장치가 처리하는 인터럽트뿐만 아니라 동일한 물리적 인터럽트 라인을 공유하는 다른 인터럽트 신호도 허용됩니다.
- 또한, 인터럽트가 처리되는 동안 인터럽트가 발생하면 다른 인터럽트를 처리하기 위해 현재 인터럽트 컨텍스트를 커널 스택에 저장해야 하기 때문에 커널 스택이 오버플로될 수 있습니다.
또한 일부 지연 메커니즘의 도움으로 커널 인터럽트 핸들러의 99.999%가 가능한 한 빨리 완료되는 것이 중요합니다. 따라서 인터럽트의 특성(빠름 또는 느림)에 따라 IRQF_DISABLED 플래그를 설정하는 것은 의미가 없습니다.
귀하의 질문에 대답하려면 IRQF_DISABLED 플래그를 설정 해제하면 다른 인터럽트가 인터럽트 처리기의 실행을 중단할 수 있기 때문에 인터럽트를 하나씩 처리하지 않습니다. 이는 플래그가 설정되지 않은 경우 오버플로가 발생하는 이유입니다. 또한 부탁드립니다자세한 내용은 이 문서를 참조하세요.