2P by neo 2달전 | favorite | 댓글 1개

소개

저자

  • 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_initmodule_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을 사용하여 텍스트를 작성하거나 개선했는지에 대한 질문 있음