소개
저자
- 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 등이 있음