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
- The Kernel Gateway: 운영체제의 핵심부(Kernel Space)로 내 코드를 안전하게 침투시키는 법을 배웁니다.
- Device Identity: 내 장치를 시스템에 등록하고 고유 번호(Major/Minor)를 부여받는 물리 등록 절차를 익힙니다.
- The Translator: 파일 읽기 요청을 하드웨어 핀 신호로 바꾸는 '통번역' 루틴을 작성합니다.
- 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)에 남는 하드웨어 승인 로그 추적
- "Hello World" 커널 모듈을 작성하고
- Implement: 로드 시 현재 시간을 출력하고 언로드 시 작업 시간을 계산해 보여주는 기본 모듈
Recommended
Core: 문자 장치와 파일 시스템 연동 (Character Devices)
- Why to Learn: 유저가 복잡한 하드웨어를 '파일 하나 열기'처럼 아주 쉽게 다루게 해주기 위함입니다.
- What to Learn:
- Dev Nodes:
/dev하위에 물리적 실체처럼 존재하는 장치 파일 사상 - File Operations Table:
read,write,ioctl명령이 드라이버의 어떤 물리 함수로 연결되는지 정의 - Major/Minor Numbers: 수많은 장치 중 내 것을 찾아내는 커널 내 식별용 물리 태그
- Dev Nodes:
- 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: 드라이버가 쓸 수 있는 극히 작은 물리 스택() 관리법
- Race Conditions in Kernel: 인터럽트와 프로세스 맥락이 엉킬 때 발생하는 데이터 파손 방지
- Debugging Tools: , , JTAG 등을 이용한 커널 내부의 물리적 실행 흐름 강제 중단 및 조사
- How to Learn:
- 고의로 널 포인터를 참조하는 드라이버를 로드하여 'Oops' 메시지나 'Panic'이 발생하는 하드웨어 덤프 분석 실습
- 락(Lock)을 잘못 사용하여 시스템이 무한 대기에 빠지는 데드락 상황 물리 재현
- Implement: 시스템 리소스를 감시하다가 임계치를 넘으면 자신을 보호 해제(Unload)하는 지능형 가드 모듈
7. Terminology
8. References
Primary
- [P2] SWEBOK v4.0 - Software Construction / Runtime Efficiency (Execution Reliability) — Structural context.
- [P1] CS2023 - OS/Operating System Principles (Device Management) — Core requirements.
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) 파손'의 물리적 원인과 대응 기법을 기술할 수 있는 가?