콘텐츠로 바로가기

Device Drivers & Module Programming

커널의 기능을 동적으로 확장하고 하드웨어와 소프트웨어 사이의 최종 통번역가 역할을 수행하는 디바이스 드라이버의 물리적 결합과 프로그래밍을 다루는 학습 노드입니다.

sys.entry
M

Me

hyunyoun's Blog

posts7 min read

1. Overview

디바이스 드라이버 및 모듈 프로그래밍(Device Drivers & Module Programming, DDM)은 운영체제 커널이라는 '왕국'에 새로운 무기(하드웨어)를 장착하거나 기능을 수시로 교체할 수 있게 만드는 커널의 동적 확장 및 제어 체계입니다.

하드웨어 제조사는 수천 곳이지만, OS 커널은 하나입니다. 학습자는 커널을 재컴파일하지 않고도 필요한 기능을 즉시 끼워 넣는 **LKM (Loadable Kernel Module)**의 물리적 결합 원리를 배웁니다. 또한, 하드웨어의 미세한 떨림을 감지하는 인터럽트 핸들러를 작성하고, 이를 사용자 앱이 파일처럼 다룰 수 있게 해주는 문자/블록/네트워크 장치의 물리적 추상화 기법을 심도 있게 다룹니다. 이를 통해 '코드'가 '실제 물리적 기계'를 부리는 마술의 최종 단계인 드라이버 설계 능력을 확보합니다.

2. Scope & Boundaries

In-Scope

  • Kernel Module Mechanics: insmod, rmmod 시 일어나는 심볼 사상 및 물리 메모리 로드
  • Driver Abstraction: Character, Block, Network 장치의 물리 분류와 공통 파일 인터페이스
  • Hardware Communication: 컨트롤러 레지스터 읽기/쓰기 및 인터럽트 서비스 루틴(ISR) 구현
  • Synchronization in Kernel: 드라이버 내의 공유 자원 보호와 Race Condition 방지 물리

Out-of-Scope

  • 특정 하드웨어 기기(예: 센서, 그래픽 칩)의 내부 전자 공학적 상세 로직
  • 고수준 어플리케이션 프레임워크 개발

Boundaries

  • DDM vs. Hardware Interface: 인터페이스(03-04-03)가 '데이터가 지나가는 길'을 다룬다면, DDM은 그 길을 지나가도록 '명령을 내리는 소프트웨어 통제 기술'에 집중하여 구분합니다.

3. Counterexample

  • 단순히 "하드웨어를 실행시키는 코드"라 설명하는 것은 DDM 학습이 아닙니다. 드라이버가 왜 유저 공간의 메모리에 직접 접근하지 못하고 copy_to_user와 같은 특수 함수를 통해 '경계를 넘는 물리적 데이터 이전'을 수행해야 하는지 보안 물리 관점에서 증명할 수 있어야 합니다. 또한, 잘못 짠 드라이버 코드 한 줄이 왜 시스템 전체를 멈추는 Kernel Panic으로 번지는지 물리적 권한 공유(Privilege sharing) 측면에서 분석하지 못한다면 DDM의 엄혹한 현실을 이해하지 못한 것입니다.

4. Prerequisites

  • System Call Interface & Privilege Switching (Basic): 유저-커널 경계 기초가 필수입니다. (03-01-02 SCP)
  • Interrupts, Exceptions, and Trap Handling (Recommended): ISR 구동 원리 이해가 권장됩니다. (03-01-03 IET)

5. Learning Map

  1. The Kernel Gateway: 운영체제의 핵심부(Kernel Space)로 내 코드를 안전하게 침투시키는 법을 배웁니다.
  2. Device Identity: 내 장치를 시스템에 등록하고 고유 번호(Major/Minor)를 부여받는 물리 등록 절차를 익힙니다.
  3. The Translator: 파일 읽기 요청을 하드웨어 핀 신호로 바꾸는 '통번역' 루틴을 작성합니다.
  4. Panic Protection: 커널을 죽이지 않고 하드웨어의 변덕을 받아주는 안전한 동기화 물리를 완성합니다.

6. Learning Topics

Basic

Core: 커널 모듈과 심볼 로딩 (Module Foundations)

  • Why to Learn: 커널이라는 거대한 성벽을 허물지 않고도 새로운 기능을 유연하게 장착하기 위함입니다.
  • What to Learn:
    • Loadable Kernel Modules (LKM): 실행 중인 커널에 동적으로 연결(Linking)되는 바이너리 물리
    • Init & Exit Routines: 모듈이 나타나고 사라질 때 자원을 물리적으로 할당/해제하는 시퀀스
    • Exported Symbols: 커널이 외부 모듈에게 공개한 함수들의 물리적 주소 목록
  • How to Learn:
    • "Hello World" 커널 모듈을 작성하고 lsmod로 시스템 메모리에 상주하는 실제 크기 확인 실습
    • 모듈 로딩 시 커널 메시지 버퍼(dmesg)에 남는 하드웨어 승인 로그 추적
  • Implement: 로드 시 현재 시간을 출력하고 언로드 시 작업 시간을 계산해 보여주는 기본 모듈

Core: 문자 장치와 파일 시스템 연동 (Character Devices)

  • Why to Learn: 유저가 복잡한 하드웨어를 '파일 하나 열기'처럼 아주 쉽게 다루게 해주기 위함입니다.
  • What to Learn:
    • Dev Nodes: /dev 하위에 물리적 실체처럼 존재하는 장치 파일 사상
    • File Operations Table: read, write, ioctl 명령이 드라이버의 어떤 물리 함수로 연결되는지 정의
    • Major/Minor Numbers: 수많은 장치 중 내 것을 찾아내는 커널 내 식별용 물리 태그
  • How to Learn:
    • 가상의 문자 장치를 등록하고, 유저 공간에서 echo 명령으로 데이터를 던졌을 때 커널 버퍼에 쌓이는 과정 관찰 실습
    • 장치 파일의 권한을 물리적으로 변경하며 접근 제어 매커니즘 실험
  • Implement: 메모리 일부를 장치처럼 사용하는 간단한 'Ramdisk' 기반 문자 드라이버

Practical

Core: 리얼타임 하드웨어 응대 (Interrupt & ISR)

  • Why to Learn: 하드웨어가 보낸 긴급 신호를 0.0001초 안에 잡아내어 처리해야 시스템이 부드럽게 돌아가기 때문입니다.
  • What to Learn:
    • Registering ISR: 인터럽트 라인(IRQ)에 내 처리 함수를 물리적으로 결합하는 법
    • Top/Bottom Half revisited: 드라이버 레벨에서의 긴급 업무와 지연 업무의 물리적 분할 전략
    • Atomic Context Constraints: 드라이버의 심장부(ISR)에서 수면(Sleep)이나 I/O 대기가 왜 치명적인지 연구
  • How to Learn:
    • 버튼을 누를 때마다 인터럽트가 발생하게 하고, ISR 내부의 연산 시간이 시스템 지연에 미치는 물리적 영향력 측정 실습
    • 하드웨어 레지스터를 직접 읽어 장치의 물리적 상태값(Status bit)을 수리적으로 해석
  • Implement: 입출력 완료 인터럽트를 처리하고 메인 루프에 데이터를 안전하게 전달하는 통신 드라이버

Advanced

Core: 커널 디버깅과 메모리 안정성 (Kernel Hardening)

  • Why to Learn: 드라이버의 작은 결함이 무시무시한 블루스크린(BSOD)이나 커널 패닉으로 이어지는 것을 물리적으로 원천 차단하기 위함입니다.
  • What to Learn:
    • Kernel Stack Limits: 드라이버가 쓸 수 있는 극히 작은 물리 스택(4KB 8KB4KB~8KB) 관리법
    • Race Conditions in Kernel: 인터럽트와 프로세스 맥락이 엉킬 때 발생하는 데이터 파손 방지
    • Debugging Tools: KDBKDB, KGDBKGDB, JTAG 등을 이용한 커널 내부의 물리적 실행 흐름 강제 중단 및 조사
  • How to Learn:
    • 고의로 널 포인터를 참조하는 드라이버를 로드하여 'Oops' 메시지나 'Panic'이 발생하는 하드웨어 덤프 분석 실습
    • 락(Lock)을 잘못 사용하여 시스템이 무한 대기에 빠지는 데드락 상황 물리 재현
  • Implement: 시스템 리소스를 감시하다가 임계치를 넘으면 자신을 보호 해제(Unload)하는 지능형 가드 모듈

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
Device Driver 운영체제가 특정 하드웨어 기기와 소통할 수 있도록 추상화된 제어 인터페이스를 제공하는 특수 소프트웨어입니다. 기본 통번역가 Kernel / Interface API 단순한 '응용 프로그램'이 아님 P1:CS2023 core
LKM (커널 모듈) 커널의 심장부를 재구성하지 않고도 기능을 추가/삭제할 수 있게 하는 동적 로딩 바이너리 조각입니다. 기본 확장 조각 insmod / Symbol static link 독립 실행 불가능하며 커널에 기생함 Industry/Unix core
ISR 하드웨어 인터럽트 발생 시 즉각적으로 실행되어 장치의 긴급한 요청을 처리하는 드라이버 내 특수 함수입니다. 추천 긴급 처리 Handler / IRQ Callback 일반적인 함수 호출 규약과 다름 P1:CS2023 core
ioctl 표준 파일 시스템 명령(read/write)으로 표현하기 힘든 장치 전용의 복잡한 물리 명령을 전달하는 통로입니다. 실무 특수 명령 Control / Config read/write 앱 인터페이스와 장치 사동의 핵심 Industry Std core

8. References

Primary

Secondary

  • [Linux Device Drivers] Alessandro Rubini — The driver development bible.
  • [Essential Linux Device Drivers] Venkateswaran — Comprehensive real-world guide.

Industry

  • [Kernel.org: Linux Kernel Module Programming Guide] — Official documentation.
  • [Microsoft: Developing, Testing, and Deploying Drivers (WDF)] — Windows driver framework.

9. Final Checklist

Primary

  • '사용자 공간'과 '커널 공간' 사이에서 디바이스 드라이버가 수행하는 물리적 매개 역할(Syscall 연동)을 설명 가능한가? (P1)
  • '문자 장치', '블록 장치', '네트워크 장치'의 물리적 데이터 전송 단위와 처리 방식의 근본적 차이를 입증할 수 있는 가? (P1)

Secondary

  • 드라이버 코드 작성 시, 왜 전역 변수를 함부로 쓰면 안 되는지 '인터럽트 중첩(Reentrancy)' 상황을 근거로 소통 가능한가?
  • 하드웨어 장치를 제어할 때 Memory-mapped I/O 주소가 커널 페이지 테이블에 어떻게 물리적으로 사상되는지 그 생애 주기를 도출할 수 있는 가?

Industry

  • 새로운 IoT 센서를 시스템에 붙일 때, 드라이버 성능 지표인 '인터럽트 응답 지연'을 최소화하기 위한 ISR 설계 방안을 제안할 수 있는 가? (SFIA)
  • 커널 업데이트 시, 드라이버 비호환성으로 발생하는 'ABI(Application Binary Interface) 파손'의 물리적 원인과 대응 기법을 기술할 수 있는 가?