Linux Kernel(4.14) Hacks

rousalome.egloos.com

포토로그 Kernel Crash




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

1 2 3

[라즈베리파이] Soft IRQ 서비스는 언제 요청하나?

이번 시간에는 Soft IRQ 서비스를 어떻게 요청하는지 배워 보겠습니다. 우리는 이전에 Soft IRQ를 등록하는 과정을 배웠습니다. 다음 코드와 같이 open_softirq 함수를 써서 TIMER_SOFTIRQ 타입의 Soft IRQ 서비스를 등록했습니다.1 void __init init_timers(void)2 {3 init_timer_cpus()...

[라즈베리파이]인터럽트 후반부 처리(Bottom Half) 소개 #CS

이전에 리눅스 커널이 인터럽트를 어떻게 처리하는지 배웠습니다. 배운 내용을 잠깐 복습해볼까요? 핵심 개념은 다음과 같습니다.첫째, 인터럽트가 발생하면 커널은 실행 중인 프로세스를 멈추고 인터럽트 벡터를 실행해서 인터럽트 핸들러를 실행합니다.둘째, 인터럽트 핸들러는 짧고 빨리 실행해야 합니다.셋째, 인터럽트를 처리하는 구간이 인터럽트 컨택스트인데 이를 i...

[라즈베리파이][리눅스커널] IRQ Thread는 언제 생성할까?[2] #CS

여기까지 request_threaded_irq 함수를 호출하면 결국 kthread_create 함수가 호출되어 IRQ Thread를 생성하는 코드를 짚어 봤습니다. 이제 분석한 대로 라즈베리파이에서 동작하는지 알아봐야겠죠. 이를 알아 보기 위한 코드를 소개할게요.diff --git a/kernel/kthread.c b/kernel/kthread.cind...

[라즈베리파이][리눅스커널] 인터럽트 벡터: 스택 푸시

인터럽트가 발생했을 때 구동 중인 프로세스의 레지스터가 스택 메모리 공간에 푸쉬된다고 설명했습니다. 이번에 실제 Trace32 프로그램으로 스택 메모리 덤프를 확인해 보겠습니다. 아래 콜스택은 ret_fast_syscall 함수에서 시작해서 do_fsync 함수 방향으로 호출하여 account_group_exec_runtime까지 실행하고 있는...

[라즈베리파이][리눅스커널] 인터럽트 벡터 분석

"인터럽트 핸들러는 언제 호출할까요?"라고 누군가 물어보면 인터럽트가 발생할 때 호출한다고 대답할 수 있습니다. "그럼 인터럽트가 발생하면 가장 먼저 어떤 코드가 실행되죠?"라고 어떤 분이 질문하면 어떻게 대답할 수 있을까요? 그동안 "인터럽트가 발생하면 실행하는 코드를 멈추고 실행 정보를 저장한다"라고 배웠습니다. 그럼 실행 중인 정보가 뭘까요? 이 ...

[라즈베리파이][리눅스커널] 인터럽트 컨택스트에서 스케쥴링을 하면?

인터럽트 컨택스트에서 프로세스가 휴면하면 어떤 일이 벌어질까요? 커널은 이를 감지하고 커널 패닉을 유발시킵니다.인터럽트 컨택스트에서 스케쥴링을 하면 안 됩니다. 왜냐면, 짧은 시간에 인터럽트 핸들러를 실행하고 인터럽트 벡터로 다시 돌아가 이미 중단시킨 프로세스를 다시 동작시켜야 하기 때문입니다. 그런데 인터럽트 컨택스트에서 스케쥴링을 하면 커널 입장에서...

[라즈베리파이][리눅스커널]IRQ Thread(threaded IRQ) 란 #CS

리눅스 커널을 익히는 과정에서 만나는 걸림돌 중 하나가 어려운 용어입니다. 어려운 개념을 낯선 용어로 설명하니 이해하기 어렵죠. IRQ Thread의 의미를 알기 전에 IRQ란 용어부터 알아볼까요? IRQ는 Interrupt Request의 약자로 하드웨어에서 발생한 인터럽트를 처리 한다는 의미입니다. 조금 더 구체적으로 인터럽트 발생 후 인터럽트 핸들...

[라즈베리파이] 인터럽트 디버깅 - in_interrupt #CS

in_interrupt 함수는 현재 구동 중인 프로세스 스택 Top 주소에 위치한 current_thread_info()->preempt_count 멤버이며 인터럽트 서비스 루틴이 실행되기 전 __irq_enter 함수에서 HARDIRQ_OFFSET를 더하고 인터럽트 서비스 루틴이 종료되면 해제합니다.이제 커널 소스를 조금 수정해서 라즈베리안에서는...

[라즈베리파이] 인터럽트 디버깅 - proc/interrupts #CS

새로운 리눅스 시스템을 접했을 때 인터럽트의 개수와 종류를 바로 파악하려면 proc 파일 시스템을 활용할 필요가 있습니다.그럼 라즈베리안에서 인터럽트 종류와 개수를 바로 알려면 어떤 명령어를 입력해야 할까요? 우선 리눅스 커널 proc 파일 시스템이 알려주는 인터럽트 정보(/proc/interrupts)를 활용할 필요가 있습니다. 그럼 이 정보부터 같이...
1 2 3