리눅스 커널 모듈 프로그래밍 가이드
(sysprog21.github.io)소개
저자
- Linux Kernel Module Programming Guide는 Ori Pomerantz가 Linux v2.2용으로 처음 작성
- Peter Jay Salzman이 Linux v2.4용으로 업데이트
- Michael Burian이 Linux v2.6용으로 공동 유지보수
- Bob Mottram이 Linux v3.8 이후 버전의 예제 업데이트
- Jim Huang이 최근 Linux 버전(v5.0 이상)으로 업데이트 및 LaTeX 문서 수정
감사의 글
- 여러 기여자들이 수정 및 제안을 제공
커널 모듈이란?
- Linux 커널 모듈은 필요에 따라 커널에 동적으로 로드 및 언로드할 수 있는 코드 세그먼트
- 커널 모듈은 시스템 재부팅 없이 커널 기능을 확장
- 모듈이 없으면 새로운 기능을 추가할 때마다 커널을 재빌드하고 시스템을 재부팅해야 함
커널 모듈 패키지
- Ubuntu/Debian:
sudo apt-get install build-essential kmod - Arch Linux:
sudo pacman -S gcc kmod
내 커널에 어떤 모듈이 있는가?
lsmod명령어로 현재 커널에 로드된 모듈 확인 가능/proc/modules파일에서도 확인 가능
커널 다운로드 및 컴파일 필요 여부
- 이 가이드를 따르기 위해 커널을 다운로드하고 컴파일할 필요는 없음
- 테스트 배포판에서 예제를 실행하는 것이 안전
시작하기 전에
- 모듈 버전 관리, X Window System 사용, SecureBoot 등 주의사항
헤더
- 커널 헤더 파일 설치 필요
- Ubuntu/Debian:
sudo apt-get install kmod linux-headers-$(uname -r) - Arch Linux:
sudo pacman -S linux-headers - Fedora:
sudo dnf install kernel-devel kernel-headers
예제
- 모든 예제는 문서의 examples 하위 디렉토리에 있음
Hello World
가장 간단한 모듈
hello-1.c파일 생성 및 컴파일- 모듈 로드 및 언로드 방법 설명
Hello와 Goodbye
module_init및module_exit매크로 사용 예제
__init 및 __exit 매크로
__init매크로는 초기화 함수가 완료되면 메모리를 해제__exit매크로는 모듈이 커널에 내장된 경우 함수를 생략
라이선스 및 모듈 문서화
MODULE_LICENSE매크로를 사용하여 모듈의 라이선스 지정MODULE_AUTHOR,MODULE_DESCRIPTION매크로 사용 예제
명령줄 인수 전달
module_param매크로를 사용하여 모듈에 명령줄 인수 전달MODULE_PARM_DESC매크로를 사용하여 인수 설명 추가
여러 파일에 걸친 모듈
- 여러 소스 파일로 나누어진 커널 모듈 예제
사전 컴파일된 커널용 모듈 빌드
- 사전 컴파일된 커널용 모듈 빌드 방법 설명
GN⁺의 정리
- 이 가이드는 Linux 커널 모듈 프로그래밍에 대한 포괄적인 안내서로, 다양한 예제와 함께 커널 모듈의 기본 개념부터 고급 주제까지 다룸
- 커널 모듈을 통해 시스템 재부팅 없이 커널 기능을 확장할 수 있으며, 이는 개발자에게 큰 이점
- 모듈 버전 관리, SecureBoot 등 주의사항을 잘 이해하고 따라야 함
- 관련 프로젝트로는 Linux Device Drivers, The Linux Programming Interface 등이 있음
댓글과 토론
Hacker News 의견
- "Detecting button presses" 예제는 RPi 모듈을 빌드해야 해서 어렵다는 의견 있음
- qemu는 커널 해킹을 경험하기 좋은 방법임
- Linux Foundation이 LDD(linux device driver)와 Linux 커널 책 업데이트를 후원해야 한다는 의견 있음
- 22년 전에 처음 읽었다는 사용자의 경험 공유
- The Linux Memory Manager 책의 최신 업데이트는 7월 초에 있었으며, 현재 편집 중이라는 소식 있음
- Linux 커널 프로그래밍에 대한 일반적인 질문, 예를 들어 파일 시스템이나 메모리 관리 해킹에 대한 질문 있음
- Robert Love의 "Linux Kernel Development" 책이 있었으나, 아마도 더 이상 업데이트되지 않음
- 커널 모듈을 바로 빌드하는 상세하고 실습적인 튜토리얼에 대한 칭찬 있음
- 저자가 LLM을 사용하여 텍스트를 작성하거나 개선했는지에 대한 질문 있음