리눅스 커널 spinlock·mutex 오용 디버깅 — DEBUG_SPINLOCK, DEBUG_MUTEXES, lockdep 실측 비교

스핀락(spinlock)과 뮤텍스(mutex)를 잘못 쓴 커널 코드는 대부분 조용히 지나간다. 초기화하지 않은 스핀락은 0으로 채워진 메모리라 x86에서는 그냥 동작하고, 스핀락 안에서 호출한 kmalloc(GFP_KERNEL)은 메모리가 넉넉하면 잠들지 않으니 아무 일도 없다. 그러다…

Continue Reading리눅스 커널 spinlock·mutex 오용 디버깅 — DEBUG_SPINLOCK, DEBUG_MUTEXES, lockdep 실측 비교

Rust 커널 프로그래밍 가이드 (2) — Misc Device 드라이버로 배우는 open, read/write, ioctl

지난 글에서 살펴본 rust_minimal.rs는 로드되면 로그 몇 줄을 찍고 언로드되면 사라지는, 사실상 아무 일도 하지 않는 모듈이었다. 실제 드라이버라면 얘기가 다르다. 유저스페이스가 open()으로 열고, read()/write()로 데이터를 주고받고, ioctl()로 제어 명령을…

Continue ReadingRust 커널 프로그래밍 가이드 (2) — Misc Device 드라이버로 배우는 open, read/write, ioctl