7. 디바이스 드라이버
• 유닉스 계열 시스템에서 모든 것은 파일로
취급된다.
디스크에 저장되어 있는
파일(*.txt,*.c…..)
정규파일
모니터 , 키보드, 마우스,
하드디스크, RAM…..
장치파일
리눅스파일
open(),write(),read(),ioctl()………………
8. 사용자 입장에서 디바이스 드라이버
• 사용자 태스크가 file_operation구조체에 정의되
어 있는 함수를 통해 장치파일에 접근할 때 호출
할 함수를 정의하고 구현해 주는 것
13. 디바이스 드라이버 유형
• 문자 디바이스 드라이버
– 가장 보편적 디바이스 드라이버
• 블록디바이스드라이버
– 블록단위로 입출력 데이터를 저장하는 장치를
다룸
• 네트워크 디바이스 드라이버
14. 장치파일 생성
• mknod 명령어 사용
– ex)mknod /dev/example [c|b] 주번호 부번호
• 생성파일 inode의 i_name : 파일이름
i_rdev : 주번호 부번호
i_mode : 장치 파일 유형
15. 개발자 입장에서 디바이스 드라이버
• 사용자 태스크는 시스템 콜을 통해 장치
파일에 접근한다. 이 때 호출가능한 함수
는 파일 오퍼레이션 구조체에 정의 되있다.
• 반대로 드라이버 개발자는 파일 오퍼레이
션 구조체에 정의되어 있는 함수를 디바이
스 드라이버 내에 구현해 줌으로써 필요한
인터페이스를 제공한다.
18. 리눅스에서 각 디바이스가 사용하는 주 번호
• 현재 실제 사용중인 주 번호
– cat /proc/devices
Major Character devices Block devices
0
1 Memory device RAM disk
2 Pseudo-TTY Floppy disk
3 Pseudo-slaves IDE disk
…
231~239 Unassigned
240~254 Locl / Experimental use
255 Reserved
23. 블록 디바이스 드라이버
• 블록 디바이스 드라이버는 문자 디바이스 드라이버와는 달리 사용
자의 read()/write()와 1:1 로 사상되지 않는다.
• 대신 리눅스 버퍼캐시를 이용하여 통신,
->블록단위로 입출력을 하기 때문
• 버퍼캐시와 블록 디바이스 드라이버간의 통신은 큐를 사용한다.
• 큐에 들어온 요청을 살펴보고 적절한 동작을 수행