# 리눅스 커널 모듈 프로그래밍 가이드

> Clean Markdown view of GeekNews topic #16046. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16046](https://news.hada.io/topic?id=16046)
- GeekNews Markdown: [https://news.hada.io/topic/16046.md](https://news.hada.io/topic/16046.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-07-28T09:53:34+09:00
- Updated: 2024-07-28T09:53:34+09:00
- Original source: [sysprog21.github.io](https://sysprog21.github.io/lkmpg/)
- Points: 2
- Comments: 1

## Topic Body

### 소개

#### 저자

- 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 등이 있음

## Comments



### Comment 27608

- Author: neo
- Created: 2024-07-28T09:53:34+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41083972) 
- "Detecting button presses" 예제는 RPi 모듈을 빌드해야 해서 어렵다는 의견 있음
  - qemu는 커널 해킹을 경험하기 좋은 방법임
- Linux Foundation이 LDD(linux device driver)와 Linux 커널 책 업데이트를 후원해야 한다는 의견 있음
- 22년 전에 처음 읽었다는 사용자의 경험 공유
- The Linux Memory Manager 책의 최신 업데이트는 7월 초에 있었으며, 현재 편집 중이라는 소식 있음
- Linux 커널 프로그래밍에 대한 일반적인 질문, 예를 들어 파일 시스템이나 메모리 관리 해킹에 대한 질문 있음
  - Robert Love의 "Linux Kernel Development" 책이 있었으나, 아마도 더 이상 업데이트되지 않음
- 커널 모듈을 바로 빌드하는 상세하고 실습적인 튜토리얼에 대한 칭찬 있음
  - 관련 자료: https://0xax.gitbooks.io/linux-insides/content/index.html
- 저자가 LLM을 사용하여 텍스트를 작성하거나 개선했는지에 대한 질문 있음
