디바이스드라이버
디바이스드라이버
디바이스 드라이버
디바이스 드라이버(Device Driver)는 운영 체제와 하드웨어 간의 인터페이스 역할을 하는 소프트웨어
리눅스에서 커널 모듈(kernel module, .ko
(kernel object) ) 형태로 동작
1. 문자(Char) 디바이스 드라이버
특징
- 데이터를 바이트 단위로 입출력
- 키보드 입력, 마우스 이벤트, 시리얼 포트 등의 장치 제어
- 버퍼링 사용 x, 즉시 데이터 처리
2. 블록(Block) 디바이스 드라이버
특징
- 데이터를 블록(512B, 4KB 등) 단위로 입출력
- 주로 디스크 장치(HDD, SSD, USB, SD 카드) 등에서 사용
- 버퍼링 및 캐싱을 지원, 성능 최적화 가능
3. 네트워크(Network) 디바이스 드라이버
특징
- 네트워크 패킷 송수신을 처리
- TCP/IP 스택과 직접 통신
eth0
,wlan0
같은 네트워크 인터페이스 제공
예제
hello.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <linux/module.h> // 모듈 관련 헤더
#include <linux/kernel.h> // printk 함수 사용
MODULE_LICENSE("GPL"); // 라이센스 지정, 필수
// 모듈이 로드될때 실행되는 함수
static int __init hello_init(void) {
printk(KERN_INFO "Hello, Device Driver Loaded.\n");
return 0;
}
// 모듈이 언로드 될때 실행되는 함수
static void __exit hello_exit(void) {
printk(KERN_INFO "Goodbye, Device Driver Unloaded.\n");
}
module_init(hello_init); // 초기화 함수 등록
module_exit(hello_exit); // 종료 함수 등록
Makefile
obj-m += hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
$
1
sudo apt install linux-headers-$(uname -r)
커널에 로드
1
sudo insmod hello.ko
언로드
1
sudo rmmod hello
로그 확인
1
dmesg | tail