저는 x86 리눅스 용 장치 드라이버에서 일하고 있습니다. 디바이스는 인터럽트를 생성하기 위해 PCH의 GPIO에 연결된 핀을 가지고있다. 해당 GPIO 핀과 관련된 IRQ를 요청하고 인터럽트 핸들러를 설치하려면 어떻게합니까?x86 Linux 용 GPIO 인터럽트 처리기를 구현하는 방법은 무엇입니까?
답변
당신이 찾고있는 헤더 파일이
#include <linux/gpio.h>
당신이해야 할 첫번째 일은 특정 GPIO를 할당하는 것입니다. 이 호출을 사용하여 수행 할 수는
int irq = 0;
if((irq = gpio_to_irq(GPIO)) < 0 /*irq number can't be less than zero*/)
//fail
...
이제 일반적인 커널 루틴을 사용하여 IRQ 핸들러를 등록하기위한
#define GPIO //gpio number
...
if(gpio_request(GPIO, "Description"))
//fail
...
는 자신의 GPIO 핀을 얻을 후에는 IRQ를 수집 할 수 있습니다. 모듈 정리를 할 때
#include <linux/interrupt.h>
...
int result = request_irq(irq, handler_function,
IRQF_TRIGGER_LOW, /*here is where you set up on what event should the irq occur*/
"Description", "Device description");
if(result)
//fail
...
는
free_irq
및
gpio_free
해야합니다. 하지 않으면 GPIO 핀을 다시 할당 할 수 없습니다.
GPIO 번호는 어떻게 가상 주소에 매핑됩니까? 커널이 가상 주소를 올바르게 처리합니까? –
질문을 좀 더 명확하게 할 수 있습니까? GPIO에 액세스 할 수있는 메모리 매핑 IO는 특정 프로세서/개발 보드에 대해 설정된 주소를가집니다. 대부분의 리눅스 커널 릴리즈는 MMU를 사용하기 때문에 먼저 '물리적 인'주소를 프로세스의 가상 주소에 매핑해야합니다. 그 후에는 어디에서나 가상 주소에 액세스하지만 읽기 및 쓰기는 GPIO에서 수행됩니다. – user35443
좋아요, 좀 더 구체적으로 설명하겠습니다. GPIO39 (팬더 보드 OMAP4460의 J3 확장 커넥터 핀 22)의 하강 에지에서 10ms마다 외부 인터럽트가 발생합니다. 인터럽트를 처리하기 위해 답안에서 제시 한 것과 동일한 단계를 정확히 수행했습니다. 그러나 핸들러가 호출되지 않습니다. 즉, GPIO39에서 인터럽트가 감지되지 않습니다. 그리고 한 가지 더 ... GPIO39에 지정된 IRQ 번호는 TRM에서 30입니다. 하지만, gpio_to_irq의 반환 값은 199입니다. 제가 누락 되었습니까? 이것을 올바른 방법일까요? –
- 1. Linux Userspace sysfs를 사용하는 GPIO 인터럽트
- 2. x86 아키텍처 용 Linux 커널에서 인터럽트 처리 코드의 위치
- 3. MPIC를 사용하여 powerpc에서 IPI 용 인터럽트 처리기를 설치하는 방법은 무엇입니까?
- 4. Linux 용 하드웨어 인터럽트 API
- 5. x86 Linux IDT 후킹
- 6. Linux 4.5 자일링스 Zynq 플랫폼의 Devicetree를 통한 GPIO 인터럽트
- 7. Sysfs GPIO 레벨 트리거 인터럽트
- 8. GPIO 핀 리눅스 (팔)의 인터럽트 핸들러
- 9. linux gpio c api
- 10. x86 인터럽트 테이블 수정
- 11. x86 : 인터럽트 처리기 루프
- 12. Linux x86 NASM에서 문자를 인쇄하는 방법은 무엇입니까?
- 13. 다른 클래스에서 처리기를 구현하는 방법은 무엇입니까?
- 14. ncurses에서 SIGWINCH 처리기를 구현하는 방법은 무엇입니까?
- 15. LPC에서 GPIO PIN 인터럽트 있음 1837
- 16. solr4 용 텍스트 처리기를 만드는 방법은 무엇입니까?
- 17. 처리기를 Android 용 타이머로 사용하는 방법은 무엇입니까?
- 18. x86 용 calloc을 사용하는 정확한 방법은 무엇입니까
- 19. Beaglebone의 인터럽트
- 20. linux/gpio.h와 링크하는 방법은 무엇입니까?
- 21. x86 용 LibVLC 빌드
- 22. linux asm x86 production segfault
- 23. VxWorks (PowerPC)에서 인터럽트 처리기를 스택으로 사용
- 24. SIGPOLL (SIGIO) 문제 : 처리기를 실행하는 중 인터럽트
- 25. x86 프로세서의 인터럽트 플래그를 읽는 방법
- 26. x86 CPU의 인터럽트 대기 시간 추정
- 27. c/asm에서 인터럽트 다시 쓰기 x86
- 28. Linux 플랫폼에서 x86 어셈블리를 배우는 가장 좋은 방법은 무엇입니까?
- 29. 사용자 공간의 메모리 장벽? (Linux, x86-64)
- 30. Linux에서 인터럽트 폭풍이나 라이브 잠금을 시뮬레이트하는 방법은 무엇입니까?
http://lwn.net/images/pdf/LDD3/ch10.pdf가 도움이 될 수 있습니다. – user35443
@ user35443 요청할 IRQ 번호를 어떻게 알 수 있습니까? – Chuankai
'gpio_to_irq()'를 본 적이 있습니까? 네 운전사가 이거 니? http://lxr.free-electrons.com/source/drivers/gpio/gpio-pch.c – Alex