본문 바로가기

리눅스

(32)
[리눅스커널] IRQ 스레드를 생성하는 시점 확인하기 이번 포스트에서는 IRQ 스레드를 생성하는 과정을 알아 봅시다.IRQ 스레드는 언제 생성할까?IRQ 스레드를 생성하기 위해서는 request_threaded_irq() 함수를 호출하면 됩니다.  IRQ 스레드를 생성하는 흐름도는 다음과 같습니다.   request_threaded_irq() 함수를 호출하면 다음 동작을 수행합니다.  - 전달한 IRQ 스레드 정보를 인터럽트 컨택스트에 설정  - kthread_create() 함수를 호출해서 IRQ 스레드 생성 kthread_create() 함수는 kthread_create_on_node() 함수로 치환됩니다. 위 그림에서 이해를 돕기 위해 kthread_create() 함수를 호출하면 kthread_create_on_node() 함수를 호출하는 것처럼 표..
[리눅스 커널] 리눅스 커널에서의 인터럽트 처리 흐름 리눅스 커널에서의 인터럽트 처리 흐름 인터럽트가 발생했을 때 커널이 이를 처리하는 과정은 다음과 같이 3단계로 나눌 수 있습니다.  1 단계: 인터럽트 발생 인터럽트가 발생하면 프로세스 실행을 중지하고 인터럽트 벡터로 이동합니다. 인터럽트 벡터에서 인터럽트 처리를 마무리한 후 다시 프로세스를 실행하기 위해 실행 중인 프로세스 레지스터 세트를 스택에 저장합니다. 이후 커널 내부 인터럽트 함수를 호출합니다.  2단계: 인터럽트 핸들러 호출 커널 내부에서는 발생한 인터럽트에 대응하는 인터럽트 디스크립터를 읽어서 인터럽트 핸들러를 호출합니다.  3단계: 인터럽트 핸들러 실행 인터럽트 핸들러에서 하드웨어를 직접 제어하고 유저 공간에 이 변화를 알립니다. 이해를 돕기 위해 한 가지 예를 들어보겠습니다. 안드로..
ftrace와 커널 로그로 인터럽트 컨텍스트 확인해보기 ftrace와 커널 로그로 인터럽트 컨텍스트 확인해보기 이번 절에서는 ftrace 로그를 분석하면서 커널이 인터럽트를 어떻게 처리하는지 알아봅시다. 리눅스 커널에서 커널 동작을 가장 정밀하게 담고 있는 로그는 뭘까요? 아마 많은 리눅스 전문가들은 ftrace라고 대답할 겁니다. ftrace는 리눅스 커널에서 제공하는 가장 강력한 디버그 로그입니다. 리눅스 커널의 공식 트레이서이기도 합니다. 여러분도 ftrace 로그를 자주 활용해서 리눅스 커널을 익히기를 바랍니다. ftrace로 인터럽트를 처리하는 인터럽트 핸들러 함수에 필터를 걸고 콜 스택 로그를 받아 보겠습니다. 인터럽트 동작을 확인하기 위한 ftrace 설정 ftrace로 인터럽트의 동작 방식을 분석하기 전에 ftrace를 설정하는 방법을 소개합니..
[리눅스커널] 인터럽트를 잘 알아야 하는 이유 커널이 인터럽트를 처리하는 과정과 자료구조를 왜 잘 알아야 할까요? 인터럽트를 처리하는 방식이 시스템 전반에 큰 영향을 끼치기 때문입니다. 또한 리눅스 커널 시스템 전반을 잘 이해하기 위해서도 커널이 인터럽트를 어떻게 처리하는지 잘 알고 있어야 합니다. 또 다른 이유는 다음과 같습니다.  대부분의 리눅스 드라이버는 인터럽트를 통해 하드웨어 디바이스와 통신합니다. 그래서 디바이스 드라이버 코드를 처음 분석할 때 인터럽트를 처리하는 함수나 코드를 먼저 확인합니다. 인터럽트의 동작 방식을 잘 알고 있으면 디바이스 드라이버 코드를 빨리 이해할 수 있습니다.  인터럽트가 발생하면 프로세스는 이미 정해진 동작을 수행합니다. 인터럽트 처리 과정을 숙지하면 프로세스가 스택 메모리 공간에서 어떻게 실행되는지 알게 됩..
[리눅스커널] 인터럽트(Interrupt)의 주요 개념 앞에서 인터럽트에 대해 소개했으니 리눅스 커널에서 인터럽트를 처리하는 방식을 이해하기 위해 알아야 할 주요 개념을 소개합니다.  인터럽트 핸들러  인터럽트 벡터  인터럽트 디스크립터  인터럽트 컨텍스트 인터럽트 핸들러란? 인터럽트가 발생하면 이를 핸들링하기 위한 함수가 호출되는데 이를 인터럽트 핸들러라고 합니다. 예를 들어, 키보드를 타이핑해서 인터럽트가 발생하면 키보드 인터럽트를 처리하는 키보드 인터럽트 핸들러가 호출됩니다. 마찬가지로 휴대폰에서 화면을 손으로 만지면 터치 인터럽트가 발생하고 터치 인터럽트를 처리하는 터치 인터럽트 핸들러가 호출됩니다. 다음 그림을 보면서 각 디바이스별로 인터럽트 핸들러가 처리되는 과정을 알아보겠습니다. 그림 5.2 디바이스별로 실행되는 인터럽트 핸들러 그림 5...
[리눅스커널] 인터럽트(Interrupt)란 인터럽트란 무엇일까요? 인터럽트란 일반적인 상황에서 갑자기 발생하는 비동기적인 통지나 이벤트라고 볼 수 있습니다. 이번 절에서는 인터럽트라는 용어와 그것의 의미를 알아보겠습니다. 일상 생활에서의 인터럽트 인터럽트란 단어가 생소하신가요? 낯설게 들리는 분도 있고 귀에 익은 분도 있을 것입니다. 일상생활에서 인터럽트란 갑자기 생긴 일이나 하던 일을 멈춘다는 의미입니다. 일상적으로 하던 일을 멈추게 하는 무엇인가가 갑자기 발생한 상황을 뜻합니다. 예를 들면, 책을 읽다가 갑자기 전화가 와서 읽던 책을 덮어 놓고 전화를 받는 상황이 그러합니다. 하드웨어 관점에서 인터럽트란? 임베디드 시스템 관점에서 인터럽트는 무엇일까요? 먼저 하드웨어 관점에서 생각해 봅시다. 하드웨어 관점에서 인터럽트란 하드웨어의 변화를 감지..
[RISC-V] sudo code for exception handling in Linux kernel ... MP:FFFFFFFF80002FEA| csrrc x9,sstatus,x5 // atomic read and clear bits in CSR. MP:FFFFFFFF80002FEE| csrr x18,sepc MP:FFFFFFFF80002FF2| csrr x19,stval MP:FFFFFFFF80002FF6| csrr x20,scause MP:FFFFFFFF80002FFA| csrr x21,sscratch void handle_exception() { word scause; word offset_vect; void *exception_func; bool interrupt_status; scause = sys_csr_reg_read(scause); // csrr x20,scause interrupt_st..
『디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 2』 출간 새로운 '리눅스 커널' 책인 《디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 2》 이 출간돼 소개합니다. 링크 http://www.yes24.com/Product/Goods/90085976 http://www.yes24.com/Product/Goods/90087307 이 책은 방대한 리눅스 커널을 처음 접하는 분들이 리눅스 커널을 학습하는 데 실패하지 않고, 끝까지 따라갈 수 있도록 구성했습니다. 두 권에 걸쳐 리눅스 커널의 주요 구성요소를 빠짐없이 소개하고 있어 리눅스 커널을 한층 더 깊게 체감하실 수 있습니다. 이 책을 다음과 같은 분들께 추천합니다. - 리눅스 보드로 졸업 과제를 준비 중인 졸업반 학생 - 연구실의 프로젝트를 리눅스 환경(리눅스 보드, 리눅스 배포판)에서 진행 중인 대학원생 ..