사용자 File I/O에서 커널 디바이스 I/O까지 흐름 정리

리눅스 시스템에서 read() 또는 write()를 호출했을 때, 이 요청은 어떻게 실제 eMMC 디바이스까지 도달할까? 이번 글에서는 사용자의 File I/O 요청이 커널 eMMC 디바이스로 연결되는 전체 흐름을 커널 내부 경로를 따라…

Continue Reading사용자 File I/O에서 커널 디바이스 I/O까지 흐름 정리

kprobes와 tracepoint로 커널 디버깅하기

커널 코드에 printk를 넣고 재빌드/재부팅하는 것은 확인할 지점이 늘어날수록 비용이 커진다. tracepoint와 kprobe는 커널을 재빌드하지 않고도 특정 함수의 호출, 인자, 리턴값을 실시간으로 들여다볼 수 있게 해주는 두 가지 트레이싱 메커니즘이다.…

Continue Readingkprobes와 tracepoint로 커널 디버깅하기

ftrace 사용법

ftrace는 리눅스 커널에 내장된 강력한 추적 도구로, 함수 호출, 스케줄 및 이벤트 추적을 가능하게 하는 강력한 디버깅 및 프로파일링 도구이다. 이 블로그 글에서는 ftrace를 사용하여 리눅스 커널 함수를 추적하는 방법에…

Continue Readingftrace 사용법

dump_stack() 함수

dump_stack() 함수는 리눅스 커널 디버깅의 핵심 도구 중 하나로, 콜 스택을 커널 로그로 볼 수 있게 한다. 커널 개발자들은 이 함수를 활용하여 프로그램의 동작을 추적하고 문제 해결을 위한 힌트를 얻을…

Continue Readingdump_stack() 함수

printk() 함수

printk() 함수는 리눅스 커널에서 메시지 출력과 디버깅을 위한 핵심 도구 중 가장 기본이 되는 도구이다. 이 글에서는 printk() 함수의 기능, 사용법, 예제 코드, 그리고 유용한 팁에 대해 알아본다. printk() 함수…

Continue Readingprintk() 함수

cgroups v1 사용법

cgroup v1 하에서는 시스템 프로세스들에 대한 계층 구조를 각기 제공하는 별게 cgroup 파일시스템의 각 컨트롤러를 마운트 할 수 있다. 또한 같은 cgroup 파일시스템에 여러 (또는 모든) cgroup v1 컨트롤러들을 함께…

Continue Readingcgroups v1 사용법

리눅스 커널 initcalls: 초기화 함수 실행 메커니즘

리눅스 커널에서 initcalls는 초기화 함수를 실행하는 메커니즘으로 커널 초기화 단계에서 시스템의 다양한 구성 요소를 초기화하는 데 사용된다. 이번 글에서는 initcalls의 동작 원리와 사용 방법에 대해 알아보고, 커널 코드 및 예제를…

Continue Reading리눅스 커널 initcalls: 초기화 함수 실행 메커니즘