본문 바로가기
Linux System/Device Driver

Device Driver

by rewyear 2022. 9. 14.

개요

디바이스 드라이버는 특정 H/W 장치(Device)에 대한 제어를 위해 커널에서 동작하는 프로그램으로서, 시스템과 H/W 장치 간 인터페이스 역할

 

특성

  1. 커널에 포함되어 동작(built-in)하거나 런타임에 적재(module)되어 사용 됨.
  2. 커널의 일부분으로 동작함으로 error 발생 시 시스템이 critical한 영향을 끼칠수 있음
  3. 표준 인터페이스를 제공해야 하며, 커널 Service(memory allocation, IRQ, wait, etc...)를 이용할 수 있다.

 

종류

  • Character(문자) 디바이스 드라이버: buffer를 거치지 않고 direct로 raw data에 대하여 read/write 가능한 장치(ex. 키보드, 마우스, 시리얼포트 etc)
  • Block(블록) 디바이스 드라이버: 블록 단위의 입출력이 가능한 장치로서, file system에 의해 mount되서 사용 됨. 주로 메모리 관련 장치(하드 디스크, 램디스크)
  • Network(네트워크) 디바이스 드라이버: 네트워크 물리적 계층을 연계되어 네트워크 통신을 통해 패킷을 송수신할 수 있는 장치(이더넷)

 

디바이스 파일

리눅스에서는 모든 resource들을 파일 형태로 다루는데 H/W 장치도 마찬가지.

/dev/ 디렉토리에 생성되며, 장치에 대하여 생성된 파일을 디바이스 파일 or node라고 한다.

유저는 해당 디바이스 node를 통해 장치에 접근할 수 있음.

 

mknod

디바이스에 대한 node를 생성하기 위해 사용되는 명령어.

mknod
# mknod DeviceName Type MajorNumber MinorNumber

Device name, type, Major Number, Minor Number를 지정해주어야 함.

  • DeviceName: 디바이스 name
  • Type: 디바이스 type(c, b)
  • MajorNumber: 커널이 각 디바이스 드라이버를 식별하는데 사용 되는 번호
  • MinorNumber: 디바이스 드라이버가 같은 디바이스가 여러 개인 경우, 이를 식별하는데 사용되는 번호

예시

Serial port를 나타내는 포트 2개를 예시로 들면, ttyS0와 ttyS1의 경우 Major Number가 4로 같은 반면(같은 디바이스 드라이버를 사용), Minor Number는 65, 66으로 다름

mknod example
mknod /dev/ttyS0 c 4 65
mknod /dev/ttyS1 c 4 66
300x250