이러한 세 가지 함수는 인터럽트 또는 프로세스 컨텍스트에서 호출할 수 있으며 절전 모드로 이동하지 않습니다. 인터럽트 컨텍스트에서 호출하는 경우 예를 들어 인터럽트 라인을 처리하는 동안 인터럽트 줄을 활성화하지 않도록 주의해야 합니다. 처리기의 인터럽트 줄이 서비스되는 동안 마스크됩니다. 여기에 나는 sysfs 튜토리얼에서 이전 소스 코드를했다. 해당 소스에서 인터럽트 처리기와 함께 request_irq, free_irq와 같은 인터럽트 코드를 추가했습니다. 드라이버에서 인터럽트 라인을 요청하고 처리기를 설치하는 것은 request_irq() 를 통해 수행됩니다: 공유 인터럽트는 nonshared 인 것과 마찬가지로 request_irq를 통해 설치되지만 두 가지 차이점이 있습니다: #include
request_irq()는 성공 시 0을 반환하고 비영값은 오류를 나타내며, 이 경우 지정된 인터럽트 처리기가 등록되지 않았습니다. 일반적인 오류는 -EBUSY로, 이는 지정된 인터럽트 라인이 이미 사용 중임을 나타냅니다(현재 사용자 또는 IRQF_SHARED를 지정하지 않은 사용자). 다음은 request_irq(: 이러한 함수에 대한 호출)에 지정된 처리기 인수의 프로토타입과 일치하는 인터럽트 처리기의 선언입니다. 지정된 인터럽트 회선에서 disable_irq() 또는 disable_irq_nosync()를 호출할 때마다 enable_irq()에 해당하는 호출이 필요합니다. enable_irq()에 대한 마지막 호출에서만 인터럽트 줄이 실제로 활성화됩니다. 예를 들어 disable_irq()가 두 번 호출되는 경우 두 번째 호출이 enable_irq()까지 인터럽트 줄이 실제로 다시 활성화되지 않습니다. 데이터 손상을 방지하기 위해 다양한 기술을 사용할 수 있으며 가장 일반적인 기술을 소개합니다. 각 상황에 가장 적합한 코드는 구동되는 장치의 작동 모드와 프로그래머의 취향에 따라 다르기 때문에 전체 코드가 표시되지 않습니다.