Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

18113
1478
166888


태그 : 인터럽트 요약보기전체보기목록닫기

1 2 3 4 5

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

이번 절에서는 ftrace 로그를 분석하면서 커널이 인터럽트를 어떻게 처리하는지 알아봅시다. 리눅스 커널에서 커널 동작을 가장 정밀하게 담고 있는 로그는 뭘까요? 아마 많은 리눅스 전문가들은 ftrace라고 대답할 겁니다. ftrace는 리눅스 커널에서 제공하는 가장 강력한 디버그 로그입니다. 리눅스 커널의 공식 트레이서이기도 합니다. 여러분도...

[리눅스커널] 인터럽트: 리눅스 커널에서의 인터럽트 처리 흐름

인터럽트가 발생했을 때 커널이 이를 처리하는 과정은 다음과 같이 3단계로 나눌 수 있습니다. 1 단계: 인터럽트 발생인터럽트가 발생하면 프로세스 실행을 중지하고 인터럽트 벡터로 이동합니다. 인터럽트 벡터에서 인터럽트 처리를 마무리한 후 다시 프로세스를 실행하기 위해 실행 중인 프로세스 레지스터 세트를 스택에 저장합니다. 이후 커널 내부 인터럽트 함수를...

[리눅스커널] 인터럽트: 인터럽트를 잘 알아야 하는 이유

커널이 인터럽트를 처리하는 과정과 자료구조를 왜 잘 알아야 할까요? 인터럽트를 처리하는 방식이 시스템 전반에 큰 영향을 끼치기 때문입니다. 또한 리눅스 커널 시스템 전반을 잘 이해하기 위해서도 커널이 인터럽트를 어떻게 처리하는지 잘 알고 있어야 합니다. 또 다른 이유는 다음과 같습니다.  대부분의 리눅스 드라이버는 인터럽트를 통해 하드웨어 디...

[리눅스커널] 인터럽트: 리눅스 커널이 처리하는 인터럽트의 주요 개념

앞에서 인터럽트에 대해 소개했으니 리눅스 커널에서 인터럽트를 처리하는 방식을 이해하기 위해 알아야 할 주요 개념을 소개합니다. 인터럽트 핸들러 인터럽트 벡터  인터럽트 디스크립터  인터럽트 컨텍스트인터럽트 핸들러란?인터럽트가 발생하면 이를 핸들링하기 위한 함수가 호출되는데 이를 인터럽트 핸들러라고 합니다. 예를 들어, 키보드를 ...

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

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

[리눅스커널] 어떤 인터럽트 후반부 처리 기법을 적용해야 할까?

이전 소절에서 커널에서 지원하는 4가지 인터럽트 후반부 기법을 알아봤습니다. 그런데 여러분이 만약 인터럽트 후반부 기법을 결정해야 한다면 이 중 어떤 방식을 적용해야 할까요?인터럽트 발생 빈도와 인터럽트 후반부를 언제 처리하느냐에 따라 인터럽트 후반부 기법을 선택할 수 있습니다. 자, 그러면 이 내용에 대해 조금 더 알아볼까요? 이번에 Q/A ...

[리눅스커널][SoftIRQ] Soft IRQ 서비스는 언제 요청하나?

6.7 Soft IRQ 서비스는 언제 요청하나?이번 시간에는 Soft IRQ 서비스를 어떻게 요청하는지 배워 보겠습니다. 우리는 이전 절에서 Soft IRQ를 등록하는 과정을 배웠습니다. 다음 코드와 같이 open_softirq() 함수를 써서 TIMER_SOFTIRQ 타입의 Soft IRQ 서비스를 등록했습니다.[https://elixir.bootli...

[리눅스커널][인터럽트후반부] ftrace로 IRQ 스레드 핸들러 실행 시각 측정하기

6.5.3 IRQ 스레드 핸들러 실행 시각 측정하기이전 절에서는 ftrace 로 콜스택과 함께 인터럽트가 언제 발생하고 언제 IRQ 스레드를 깨우는지 알아봤습니다. 이번에는 실제 인터럽트 핸들러와 IRQ 스레드 핸들러 함수 실행 시간을 측정하는 방법을 소개합니다. 각 함수의 실행 시간을 측정한 결과 인터럽트 핸들러 실행 시간이 길면 인터럽트 핸들러 함수...

[리눅스커널] 라즈베리파이에서 IRQ 스레드 생성 과정 디버깅하기

지금까지 IRQ 스레드를 생성하면 커널 내부에서 다음과 같이 처리한다는 사실을 배웠습니다. request_threaded_irq() 함수를 호출하면 인터럽트 속성을 설정한다.  내부 함수에서 kthread_create() 함수를 실행해서 IRQ 스레드를 생성한다.이번 시간에는 우리가 배운 함수가 실제 리눅스 시스템에서 어떻게 호출되는지 실습...

[리눅스커널] IRQ 스레드 생성 예제 코드 분석 - 다른 리눅스 시스템

6.3.3 다른 리눅스 시스템에서 IRQ 스레드 생성 예제 코드 분석라즈비안에선 92번 인터럽트를 처리할 한 개 IRQ 스레드만 생성합니다. 1개 IRQ 스레드만 생성하는 코드 밖에 없으니 이번에는 다른 리눅스 시스템에서 IRQ 스레드를 생성하는 예제 코드를 소개합니다이번에는 request_threaded_irq() 함수를 호출해서 IRQ 스레드를 생성...
1 2 3 4 5