인터럽트

포스트: 34
Tags

Posts

34 posts

[리눅스커널] 인터럽트: ftrace와 커널 로그로 인터럽트 컨텍스트 확인해보기

Guillermo Austin Kim|2020년 3월 2일

이번 절에서는 ftrace 로그를 분석하면서 커널이 인터럽트를 어떻게 처리하는지 알아봅시다. 리눅스 커널에서 커널 동작을 가장 정밀하게 담고 있는 로그는 뭘까요? 아마 많은 리눅스 전문가들은 ftrace라고 대답할 겁니다. ftrace는 리눅스 커널에서 제공하는 가장 강력한 디버그 로그입니다. 리눅스 커널의 공식 트레이서이기도 합니다. 여러분도 ftrace 로그를 자주 활용해서 리눅스 커널을 익히기를 바랍니다. ftrace로 인터럽트를 처리하는 인터럽트 핸들러 함수에 필터를 걸고 콜 스택 로그를 받아 보겠습니다. 인터럽트 동작을 확인하기 위한 ftrace 설정 ftrace로 인터럽트의 동작 방식을 분석하기 전에 ftrace를 설정하는 방법을 소개합니다. 먼저 다음 명령어를 입력해 봅시다. #!/

[리눅스커널] 인터럽트: 'Unbalanced enable for IRQ' 메시지에 대해서

Guillermo Austin Kim|2020년 2월 28일

프로젝트를 개발하다 보면 다음과 같은 WARN() 메시지를 커널 로그로 볼 수 있다. Unbalanced enable for IRQ 23------------[ cut here ]------------WARNING: at kernel/irq/manage.c:437:NIP [c00000000016de8c] .__enable_irq+0x11c/0x140LR [c00000000016de88] .__enable_irq+0x118/0x140Call Trace:[c000003ea1f23880] [c00000000016de88] .__enable_irq+0x118/0x140 (unreliable)[c000003ea1f23910] [c00000000016df08] .enable_irq+0x58/0xa0[c000003ea

[리눅스커널][인터럽트] ftrace로 인터럽트 핸들러 함수를 바로 파악하기

Guillermo Austin Kim|2019년 4월 12일

5.7.3 ftrace로 인터럽트 핸들러 함수를 바로 파악하기 우리는 다음 __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_hand

[리눅스커널][인터럽트] 인터럽트 디스크립터: 인터럽트 발생 횟수 확인하기

[리눅스커널][인터럽트] 인터럽트 디스크립터: 인터럽트 발생 횟수 확인하기

Guillermo Austin Kim|2019년 4월 12일

5.5.2 인터럽트 발생 횟수는 어떻게 저장할까? 대부분 디바이스 드라이버는 인터럽트 핸들러로 하드웨어 디바이스와 통신합니다. 예를 들면 터치 디바이스에서 사용자가 터치를 입력하면 터치 디바이스에서 올려주는 인터럽트로 터치 입력이 발생했다고 알려줍니다. 디바이스 드라이버에서 인터럽트 핸들러를 등록한 후 해당 디바이스가 제대로 인터럽트를 발생시키는지 어떻게 알 수 있을까요? 이럴 때는 인터럽트 발생 횟수를 점검하면 됩니다. 이번에는 인터럽트 발생 횟수를 인터럽트 디스크립터가 어떤 방식으로 관리하는지 살펴보겠습니다. 인터럽트 발생 횟수는 인터럽트 디스크립터 내 struct irq_desc 구조체 kstat_irqs 필드에 저장합니다. 이 변수는 per-cpu 타입입니다 [https://elixir.b