리눅스 계열은 모든 것을 파일로 취급합니다.
키보드, 마우스, 모니터 등의 디바이스 또한 파일로써 취급하게 됩니다.
사용자 태스크가 file-operations 구조체에 정의되어 있는 함수를 통해
장치 파일에 접근할 때 호출할 함수를 정의하고 구현해 주는것이다.
디바이스 드라이버는 각 디바이스마다 번호를 부여하는 데 이 번호를 major number라 한다
major number는 아이도느 객체에 저장되어 있다.
Task에서 특정 파일에 접근하게 되면 major number를 통하여 함수를 호출하게 된다.
하지만, 동일한 장치를 여러가지를 사용한다면 어떻게 될까?
동일한 장치는 동일한 major number를 사용한다. 하지만 각각 다른 기능을 하므로 구분을 해줘야 한다.
그리하여 major number안에 minor number로써 여러가지로 구분해 놓는다.
하나의 컴퓨터에 2대의 모니터를 사용한다면,
major number는 동일하고 minor number가 서로 다를 것이다.
minor number는 같은 디바이스 드라이버를 사용하는 장치가 여러 개존재할 때 이들을 서로 구분하기 위한 용도로
사용된다.
디바이스 드라이버는 하드웨어 로써 존재하는 디바이스 구동을 위한 소프트웨어이다.
그러므로 유저단에서 커널 단으로 접근하여 하드웨어를 구동하여야 한다.
드라이스 드라이버는 여러가지의 종류가 있다.
문자 디바이스 드라이버, 블록 디바이스 드라이버, 네트워크 디바이스 드라이버로 나눈다.
그 내부에서는 표준화(Standard)와 비표준화(Non-standard) 드라이버로 나눈다.
디바이스 드라이버 인터페이스(DDI)에서 표준화는 리눅스 같은 곳에서 사용하는 방식으로
호환성이 있는 I/O 인터페이스 이용하여 처리하게 된다.
비 표준화 DDI는 규정없이 특수한 H/W라서 표준화 된 방식으로는 사용할 수 없다.
'Linux > Kernel Analysis' 카테고리의 다른 글
Ubuntu 12.04 설치후 기본 설정 (0) | 2013.03.15 |
---|---|
ubuntu에서 Network(IP) 설정하기 (0) | 2012.11.29 |
커널 (0) | 2012.11.18 |
인터럽트(interrupt) (0) | 2012.11.18 |
[ubuntu 12.04] eclipse 실행 에러 (0) | 2012.11.10 |