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