안녕하세요 AU1200 보드로 이것저것 TEST 진행중인 리눅스 초보 개발자 입니다. 
 제가 책보고 GPIO26 번 ( 보드에서 TACT 스위치 연결 ) 입력 인터럽트 드라이버를 시험중인데요 
 몇가지 질문이 있습니다. 
 
 irq_request 함수 전달 인수중에 첫번째 irq 전달 인수가 인터럽트 번호로 알고 있습니다.  그래서 현재 커널이
사용하고 있는 인터럽트 번호를 피하기 위해 cat /proc/interrupts 명령을 실행해서 아래 결과를 얻었습니다. 
                      CPU0
 2 :                       7      Au1000 Level MMC
 3 :                       0      Au1000 Level Au1xxx dbdma
29:                       1     Au1000 Level ehci_hcd: usb1, ohci_hcd:usb2
30:                      0     Au1000 Level lcd
34:                    92    Au1000 Fall Edge eth0
42:                      0    Au1000 Level wm9712 TouchScreen 0.30

ERR                   0

1.
상기 결과에서 좌측에 있는 번호( 2,3,29........)가 현재 등록된 인터럽트 서비스 함수 번호로 알고 있습니다.
그러면 사용자가 인터럽트 서비스 함수를 등록할때 상기 번호를 제외한 임의 번호를 아무 제약없이
사용 가능한건가요? 책을 보면 이 부분에 대한 내용이 자세히 나와 있지 않네요 
 
 그런데 문제가 현재 TEST를 해보면 , 상기 번호를 피한다고 해서 다 등록이 되는게 아니던데요 
TEST 결과로는 " 7 " 번의 경우 현재 점유하지 않는 번호인데  insmod 로 드라이버 등록시 인터럽트
서비스 함수가 등록이 않되구요 다른 번호중에도 그런게 있습니다. 그러면 사용자가 프로그램 작성할때
일일이 등록해서 되는지 않되는지 확인해 보고 결정해야 되는건지, 아니면 뭔가 다른 방법이 있는건지요 

2. 인터럽트 번호를 "10"으로 지정한후 insmod로 드라이버를 적재 한후 cat /proc/interrupts 로 확인해서 아래 결과
를 얻었습니다. 

                      CPU0
 2 :                       7      Au1000 Level MMC
 3 :                       0      Au1000 Level Au1xxx dbdma

10:                       0     Au1000 Level int1dev     <---------------------------------------- 등록된거 맞나요?

29:                       1     Au1000 Level ehci_hcd: usb1, ohci_hcd:usb2
30:                      0     Au1000 Level lcd
34:                    92    Au1000 Fall Edge eth0
42:                      0    Au1000 Level wm9712 TouchScreen 0.30

ERR                   0

상기 결과로 보면 일단 좌측에 10 번이 추가 됐고 우측에 지정된 드라이버 명이 나오는걸로 봐서 정상 등록이 
된거 같은데 맞는지요 ? 그리고 나서 GPIO 26번을  Falling edge 인터럽트로 입력으로 설정한후 보드 Dip 스위치를 
누르면 아래 메세지가 계속 출력 됩니다. 
 
unexpected IRQ # 58
irq 58, desc: 804c1e80, depth: 1, count: 0, unhandled: 0
->handle_irq():  80151390, handle_bad_irq+0x0/0x34c
->chip(): 804861f0, 0x804861f0
->action(): 00000000
  IRQ_DISABLED set

일단 상기 메세지가 계속 출력되는건 한번 걸린 인터럽트가 소거가 안되서 인터럽트가 계속걸리는거 같습니다. 
맞나요? 실제 확인해보면 제가 만든 인터럽트 서비스 함수가 실행이 않되는거 같습니다.  

 그리고 상기 내용중에 unexpected IRQ #58  에서 
IRQ #58이면 등록된 인터럽트 번호가 58 번이라는 얘긴가요? 저는 분명히 " 10 " 으로 등록했는데 왜 58 번으로 
표시 되는거죠??

조언 부탁드립니다.   emoticon