request_irq 예제

이러한 세 가지 함수는 인터럽트 또는 프로세스 컨텍스트에서 호출할 수 있으며 절전 모드로 이동하지 않습니다. 인터럽트 컨텍스트에서 호출하는 경우 예를 들어 인터럽트 라인을 처리하는 동안 인터럽트 줄을 활성화하지 않도록 주의해야 합니다. 처리기의 인터럽트 줄이 서비스되는 동안 마스크됩니다. 여기에 나는 sysfs 튜토리얼에서 이전 소스 코드를했다. 해당 소스에서 인터럽트 처리기와 함께 request_irq, free_irq와 같은 인터럽트 코드를 추가했습니다. 드라이버에서 인터럽트 라인을 요청하고 처리기를 설치하는 것은 request_irq() 를 통해 수행됩니다: 공유 인터럽트는 nonshared 인 것과 마찬가지로 request_irq를 통해 설치되지만 두 가지 차이점이 있습니다: #include …/* * IRG 등록 사용자 푸시 버튼 누군 이벤트 */ret = request_irq(50, sample_irq, 0, “샘플”, 0)에 대한 처리기); 경우 (ret < 0) { printk (KERN_ALERT "%s: request_irg %dn", __func__, ret; goto Done; } /* * * GPIO_O를 입력으로 구성, 인터럽트, 레벨 낮음 */ * (휘발성 서명되지 않은 int *) (0x40013000 + 0) (1<<3) | (1<5); Linux는 다른 많은 시스템과 함께 인터럽트 처리기를 두 개의 절반으로 분할하여 이 문제를 해결합니다. 소위 상단 절반은 실제로 인터럽트에 응답하는 루틴입니다 - request_irq로 등록한 루틴입니다. 아래쪽 절반은 더 안전한 시간에 나중에 실행되도록 상위 절반으로 예약되는 루틴입니다. 2.4 커널에서 하위 절반이라는 용어를 사용하는 것은 인터럽트 처리기의 후반부 또는 이 하반기를 구현하는 데 사용되는 메커니즘 중 하나 또는 둘 다를 의미할 수 있다는 점에서 약간 혼란스러울 수 있습니다. 우리가 아래쪽 절반을 참조 할 때 우리는 일반적으로 아래쪽 절반에 대해 말하고있다; 이전 Linux 하단 절반 구현은 약어 BH와 명시적으로 참조됩니다. request_irq에 대한 플래그입니다. SA_INTERRUPT는 느린 처리기와 는 반대로 빠른 처리기설치를 요청합니다. SA_SHIRQ는 공유 처리기를 설치하고 타임스탬프를 중단하는 세 번째 플래그 어설션을 사용하여 시스템 엔트로피를 생성할 수 있습니다.

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

カテゴリー: 未分類   パーマリンク

コメントは受け付けていません。