Linux:Kernel:DeviceDriver
장치 드라이버/제어기(문화어: 장치구동기, 장치구동프로그람) 또는 디바이스 드라이버(영어: device driver)는 특정 하드웨어나 장치를 제어하기 위한 커널의 일부분으로 동작하는 프로그램이다. 컴퓨터를 구성하는 다양한 입출력 장치마다 각각 장치드라이버가 프로그램 되어 커널에 통합되어 실행된다. 높은 수준의 컴퓨터 프로그램들이 컴퓨터 하드웨어 장치와 상호 작용하기 위해 만들어진 하나의 컴퓨터 프로그램이다.
장치드라이버는 커널의 일부분이기는 하나 커널과 통합되는 것은 처음부터 해당 드라이버 프로그램 코드소스가 커널 전체 소스에 포함되어 컴파일되는 경우도 있고, 그리고 별도로 컴파일된 파일(윈도의 .sys, 리눅스의 .o)의 형태로 존재하고 부팅 시 또는 필요 시 해당 파일이 로드되어 커널과 통합되기도 한다.
드라이버는 흔히 컴퓨터 버스, 또는 하드웨어와 이어진 통신 하위 시스템을 통해 장치와 통신한다. 요청하는 프로그램이 드라이버의 명령어를 호출하면, 드라이버는 장치에 명령어를 전달한다. 장치가 드라이버에게 데이터를 되돌려 주면, 드라이버는 원래 요청한 프로그램의 명령어로 데이터를 다시 전달한다. 드라이버는 하드웨어에 의존하며 특정한 운영 체제를 따른다. 이러한 드라이버는 비동기 시간에 의존하는 하드웨어 인터페이스에 필요한 인터럽트를 다룰 수 있다.
장치 드라이버는 흔히 장치 칩의 레지스터에 접근하여 하드웨어를 제어하며 하드웨어와 주변 기기를 사용하는 프로그램의 중간 다리 역할을 한다.
MS-DOS의 경우 하드웨어를 제어하기 위한 x86 기계어 명령어 IN,OUT은 응용프로그램에서 직접 사용할 수 있다. 그러나 본격적인 운영체제가 도입된 경우 (윈도 NT 계열, 유닉스 계열 등), 커널과 응용프로그램이 분리되어 설계되고 실행된다. 장치 드라이버는 커널의 일부분으로 응용프로그램에서는 완전히 분리된 자원과 실행 방식을 가진다.
커널은 부팅 시에 시작되어 컴퓨터 종료시 커널이 끝난다. 장치 드라이버는 하드웨어와 밀접하게 연관되고 해당 장치를 제어하는 프로그램이다. 커널 공간에서 이루어지는 작업으로는 입출력, 네트워크 등의 하드웨어 제어, 메모리와 같은 컴퓨터의 리소스 관리, 응용프로그램의 실행 제어 등이 있다. 커널과는 달리 응용프로그램은 사용자 요청에 의해 저장장치로부터 메모리에 로드되어 실행한다. 응용프로그램이 하드웨어를 직접 제어할 수는 없기 때문에, 커널의 장치 드라이버를 사용하기 위해 시스템 호출 방법으로 커널에 접근하여 자료를 처리한다.
전자 제품에서 각각의 주변 기기들을 제어하기 위해 설계된 펌웨어 또한 장치 드라이버로 분류된다. 장치 드라이버의 실제 예는 소스가 공개된 리눅스 커널 소스에서 /driver 디렉터리 밑에 있는 파일들을 참조하여 볼 수 있다.
Category
See also
Favorite site
- Wikipedia (en) 장치드라이버에 대한 설명
- 디바이스 드라이버란?
- [추천] 커널 2.6.x 디바이스 드라이버
- [추천] LDD_Part 1. 디바이스 드라이버의 이해
- KLDP: Linux Device Driver Self Study
- 디바이스 드라이버의 읽기와 쓰기
- Joinc: Linux 커널에서의 디바이스 드라이버 작성
- KLDP: Kernel Module Programming Guide
- KLDP: 리눅스 커널 모듈 프로그래밍 안내서
- KLDP: The Linux Kernel HOWTO in Korean
- KLDP: 선점형 Thread의 구현