gpio 인터럽트 처리 - 제가 뭔가 잘못이해하고 있는걸까요?

chocokeki의 이미지

환경 : linux
전원 - LED - 스위치 - gpio
(스위치를 누르면 전원이 LED 타고 gpio로 들어감)

gpio포트 하나를 input 모드로 설정해서 입력값을 받고 싶습니다

1. 드라이버에서 gpio 활성화 및 irq handler 등록

irq_handler_t irq_handler(...)
{
  printk("hello\n");
  return IRQ_HANDLED;
}
 
 
gpio_request(123, "test");
gpio_direction_input(123);
gpio_export(123, true);
gpio_sys_set_active_low(123, 0);   //active high
request_irq(gpio_to_irq(123), 
                    (irq_handler_t) irq_hander,
                    IRQF_TRIGGER_RISING,
                    "irq handler test",
                    NULL);

-> 모두 리턴값 정상, sysfs에 정상적으로 export 확인

2. 테스트#1
watch -n 1 cat /sys/class/gpio/gpio123/value
스위치를 누를 때마다 value가 1로 변하는 것을 확인함

3. 테스트#2
c 프로그램
char data;
fd = open(/sys/class/gpio/gpio123, O_RDONLY);
while(1) read(fd, &data, 1)
스위치를 누르건 안 누르건 무조건 '0'만 읽힘

4. 테스트#3
dmesg로 interrupt handler가 hello 메세지를 출력했는지 확인
없음

5. 테스트#4
/proc/interrupt에 인터럽트 핸들러 등록되어있는지 확인
없음

원래 정상으로 되어야 하는 것 아닌가요?
왜 테스트#1은 되는데 #2, 3, 4는 안될까요??
아무 gpio핀이나 쓰면 안되는걸까요?