라즈베리파이
Posts
191 posts[라즈베리파이] 인터럽트 디버깅 - proc/interrupts #CS
새로운 리눅스 시스템을 접했을 때 인터럽트의 개수와 종류를 바로 파악하려면 proc 파일 시스템을 활용할 필요가 있습니다. 그럼 라즈베리안에서 인터럽트 종류와 개수를 바로 알려면 어떤 명령어를 입력해야 할까요? 우선 리눅스 커널 proc 파일 시스템이 알려주는 인터럽트 정보(/proc/interrupts)를 활용할 필요가 있습니다. 그럼 이 정보부터 같이 점검하기 위해 다음 명령어를 입력해볼까요?root@raspberrypi:/home/pi# cat /proc/interrupts 그럼 다음과 같은 정보를 볼 수 있습니다. CPU0 CPU1 CPU2 CPU3 16: 0 0 0 0 b
[라즈베리파이] 인터럽트 디버깅 - 인터럽트 핸들러 파악 #CS
우리는 다음 __handle_irq_event_percpu 함수 13번째 코드에서 인터럽트 핸들러가 호출된다고 배웠습니다. 1 irqreturn_t __handle_irq_event_percpu(struct irq_desc *desc, unsigned int *flags)2 {3 irqreturn_t retval = IRQ_NONE;4 unsigned int irq = desc->irq_data.irq;5 struct irqaction *action;67 record_irq_time(desc);89 for_each_action_of_desc(desc, action) {10 irqreturn_t res;1112 trace_irq_handler_entry(irq, action);13 res = act
[라즈베리파이] 인터럽트 디버깅 - ftrace 인터럽트 이벤트 #CS
라즈베리안 리눅스 커널은 아래 ftrace 로그를 볼 수 있는 컨피그가 기본 설정돼 있습니다. 그래서 ftrace만 설정하면 됩니다. 그럼ftrace로 인터럽트 동작을 어떻게 확인할 수 있을까요? ftrace event 중에 인터럽트가 있으니 다음 명령어로 해당 event를 키면 됩니다. echo 1 > /sys/kernel/debug/tracing/events/irq/irq_handler_entry/enableecho 1 > /sys/kernel/debug/tracing/events/irq/irq_handler_exit/enable 다음과 같은 코드를 작성하고 irq_ftrace.sh란 스크립트로 저장한 후 이 스크립트를 실행하면 ftrace로 인터럽트를 로그를 볼 수 있습니다. [irq_ft
[라즈베리파이] 인터럽트 핸들러 등록(2) - #CS
[라즈베리파이] 인터럽트 핸들러 등록(1) - #CShttp://rousalome.egloos.com/9976901에서 계속 ... 이번에는 다른 코드를 입력해서 인터럽트 핸들러와 인터럽트 디스크립터에 대해 알아볼게요. 다음 패치는 인터럽트 핸들러를 등록한 후 바로 해당 인터럽트 번호로 인터럽트 디스크립터를 커널 함수로 읽어와 인터럽트 설정 정보를 출력합니다. 제대로 인터럽트 핸들러를 등록했는지 점검하고 싶을 때 활용하면 좋은 코드입니다. 파라미터가 인터럽트 번호이므로 인터럽트 번호만 대입하면 다른 함수에서도 호출할 수 있죠. 이제부터 코드를 어떻게 작성했는지 함께 살펴볼까요? 우선 dwc_otg_driver_probe 함수 위에 다음 코드를 입력합니다.1 static void interrupt_de


