도와주세요!!
글 수 15,339
2008.12.17 07:02:38 (*.100.112.25)
15908
아래 AU1200 GPIO 입력 인터럽트 오류( 13259 ) 에 관해 다시 올립니다.
request_irg 함수에서 -89 리턴값이 확인 됩니다. 커널 소스를 보면
int request_irq(unsigned int irq, irq_handler_t handler,
unsigned long irqflags, const char *devname, void *dev_id)
{
......................................
......................................
retval = setup_irq(irq, action); <====================
return retval
}
int setup_irq(unsigned int irq, struct irqaction *new)
{
..................................................
if (desc->chip == &no_irq_chip)
return -ENOSYS; <================ ENOSYS 값이 89로 표시되네요
}
request_irq 관련 커널 소스에서 -89값을 돌려주는 부분은 상기 표시 부분외에는 없는것으로 보입니다.
그렇다면 위 구문은 어떤경우에 실행 되는건가요???
int request_irq(unsigned int irq,...... ) 함수 전달 인수중 irq 번호에 따라 등록이 되고 않되고 합니다.
EZ-1200 보드 TACT 스위치를 이용해서 시험중인데 않되네요 --; 도와 주세요
request_irg 함수에서 -89 리턴값이 확인 됩니다. 커널 소스를 보면
int request_irq(unsigned int irq, irq_handler_t handler,
unsigned long irqflags, const char *devname, void *dev_id)
{
......................................
......................................
retval = setup_irq(irq, action); <====================
return retval
}
int setup_irq(unsigned int irq, struct irqaction *new)
{
..................................................
if (desc->chip == &no_irq_chip)
return -ENOSYS; <================ ENOSYS 값이 89로 표시되네요
}
request_irq 관련 커널 소스에서 -89값을 돌려주는 부분은 상기 표시 부분외에는 없는것으로 보입니다.
그렇다면 위 구문은 어떤경우에 실행 되는건가요???
int request_irq(unsigned int irq,...... ) 함수 전달 인수중 irq 번호에 따라 등록이 되고 않되고 합니다.
EZ-1200 보드 TACT 스위치를 이용해서 시험중인데 않되네요 --; 도와 주세요
그건 그렇다 치고 에러나는 라인의 이유는 다음과 같습니다.
커널에서는 각각의 irq 번호에 대해 하드웨어 에지등의 설정을 위해 함수를 등록하도록 합니다.
또한 하드웨어적인 인터럽트 활성화를 위해 필요한 레지스터설정을 등록해야 합니다.
위에서 에러난 것은 irq 번호에 대해 이런 함수들을 담은 구조체가 등록되지 않아서 발생하는 문제입니다.
(-ENOSYS 에러라면..)
잠시 커널 소스를 보니 이유를 알것 같네요
일반적인 암커널들은 모든 gpio 인터럽트들에 대한 인터럽트설정 구조체들을 모두 등록하지만 mips 커널은 이것을
수행하지 않습니다
필요한 경우 사용자가 등록하도록 되어 있습니다.
빠른 방법으로 커널을 수정하시는 방법이 있습니다.
arch/mips/au1000/emau1200/board_setup.c 파일을 여신 후
위와 같이 하신 후 커널을 컴파일 하고 보드에 다시 올리시기 바랍니다.
100% 될것을 보장합니다. ^^
제 경우는 드라이버를 작성할때 platform resoruce 로 등록한 후 사용하기 때문에 항상 이 파일을
수정하여 사용합니다. 그러다 보니 "사람세상" 님의 문제를 처음 당해보았네요
덕분에 mips 커널의 irq 설정부분을 좀더 알게 되었네요 ^^