Linux 커널 개발 어려움 — 디버깅 환경 제약과 문제 해결 과정
Linux 커널 개발에서 가장 어려웠던 건 일반 애플리케이션과 달리 디버거를 바로 붙이기 어려운 환경이었습니다. 유저스페이스처럼 gdb를 바로 붙일 수 없어서, printk 로그와 dmesg 출력에 의존해 문제를 추적해야 했습니다. 한번은 드라이버 모듈에서 메모리 접근 오류가 나는데 원인이 인터럽트 핸들러 안에서 발생해서 콜스택이 잘렸고, 로그만으로는 문제 위치를 특정하기 어려웠습니다. KASAN을 활성화해서 메모리 접근 경계 위반을 감지하도록 했더니 오류 위치가 특정됐고, 결국 구조체 초기화 누락이 원인이었습니다.
커널 개발은 유저스페이스보다 실수의 대가가 크고, 잘못된 포인터 하나가 전체 시스템 크래시로 이어질 수 있어 코드 리뷰와 테스트를 더 꼼꼼히 해야 한다는 걸 배웠습니다. 지금도 커널 관련 코드를 건드릴 때는 변경 범위를 최소화하고 롤백 계획을 먼저 세우는 방식을 씁니다.