INTRO(4)

명칭
intro - 디바이스 및 디바이스 드라이버의 소개

해설
본섹션에서는 디바이스, 디바이스 드라이버, 그 외 하드웨어에 관련한 정보를 적습니다.

  디바이스의 추상화
디바이스와는 많은 경우, 디스크, 프린터, 혹은 키보드 첨부의 그래픽스 디스플레이와 같은, 시스템에 속하는 하드웨어 관련의 기재를 나타내는 용어입니다. 또, 이른바 유사 디바이스 (이)라는 것도 있습니다. 이것은, 디바이스 드라이버가 소프트웨어적으로 디바이스의 동작을 에뮤레이트 하는 것으로, 특정의 하드웨어를 근간으로서 가지지 않습니다. 후자의 종류의 전형적인 예로서 /dev/mem (이)가 있습니다. 이것은 통상 파일과 같은 시멘틱스로 물리 메모리에 액세스 할 수 있는 작은 구멍과 같은 것입니다.

일반적으로, 디바이스의 추상화의 상위층에서는, 공통적인 시스템 콜군이 제공됩니다. 이러한 시스템 콜은 커널의 상위층에 의해 대응하는 디바이스 드라이버에 보내집니다. 디바이스에 이용할 수 있는 시스템 콜군은, open(2), close(2), read(2), write(2), ioctl(2), select(2), mmap(2) (으)로부터 선택됩니다. 모든 드라이버가 이러한 시스템 콜 모든 것을 실장하고 있는 것은 아닙니다. 예를 들면, mmap(2) (을)를 단말 디바이스상에서 호출해도 어떤 도움도 되지 않을 것입니다.

  디바이스에의 액세스
UNIX 풍 operating system하의 대부분의 디바이스에는, 이른바 디바이스 노드 , 혹은 특수 파일 (이)라고도 불리는 것을 개입시켜 액세스 합니다. 이것은 통상은 그 파일 시스템 계층의 /dev 디렉토리하에 놓여집니다. (hier(7) 을 참조)

devfs(5) 하지만 완전하게 기능하고 있지 않으면, 각 디바이스 노드는 정적으로, 한편 관련하는 디바이스 드라이버의 존재 (와)는 관계없는 것으로, 작성될 필요가 있습니다. 대체로는 MAKEDEV(8) (을)를 실행시켜 작성합니다.

이것은 즉, 일관한 상태가 되지 않을지도 모른다고 하는 것입니다. 관련하는 드라이버가 설정되어 있지 않은 것 같은 디바이스 노드가 존재할지도 모르고, 디바이스의 검출에 성공했는데, 대응하는 디바이스 노드가 아직 없기 위해(때문에) 액세스 할 수 없는 드라이버가 존재할지도 모릅니다. 전자의 경우에서는, 그 디바이스 노드를 통해 디바이스를 참조하려고 해도, 커널의 상위층으로부터 에러가 돌려주어집니다. 통상 이 에러는 ‘ENXIO’ 입니다. 후자의 경우에서는, 드라이버와 디바이스를 사용할 수 있도록(듯이) 하려면 , 디바이스 노드를 작성할 필요가 있습니다.

디바이스에 따라서는 2 종류로 나누어지는 일이 있습니다. 블록형 (block) 디바이스 (와)과 캐릭터형 (character) 디바이스 입니다. 보다 정확하게 말하면 즉, 버퍼링 되는 디바이스와 버퍼링 되지 않는 디바이스 (raw 디바이스) 입니다. ‘ls -l’ 의 출력으로는, 파일의 형태의 식별로 캐릭터 ‘b’ (와)과 ‘c’ 그리고 관습적인 통칭을 나타내고 있습니다. 버퍼링 되는 디바이스는, operating system의 버퍼 캐쉬를 경유해 액세스 되고 있습니다. 그리고, 이러한 디바이스는, 게다가 위에 파일 시스템을 거듭하는 것만을 목적으로 하고 있습니다. 통상, 버퍼링 되는 디바이스는, 디스크나 디스크풍디바이스, 거기에 역사적인 이유로부터 테이프 디바이스에게만 실장됩니다.

raw 디바이스는 모든 드라이버에 이용할 수 있습니다. 이것에는 버퍼링 되는 디바이스도 실장하는 것 같은 드라이버도 포함합니다. 그러한 디바이스에서는, 관습적으로 디바이스 노드의 패스명에 캐릭터 ‘r’ (을)를 전치 해 차이를 나타냅니다. 예를 들면, /dev/rda0 (은)는 1 대째의 SCSI 디스크용의 raw 디바이스를 나타냅니다. 한편, /dev/da0 (은)는 같이 버퍼링 되는 디바이스의 디바이스 노드입니다.

버퍼링 되지 않는 디바이스는, 파일 시스템 조작에 관련하지 않는 동작 모두에게 이용되겠지요. 이것은 그 디바이스가 디스크 디바이스라고 해도입니다. 이것에는, 디스크 패티션 전체의 백업을 취할 때나, raw floppy disk에 백업 하는 경우를 포함합니다 (이 때, floppy disk는 테이프와 같이 사용됩니다)

디바이스 노드에의 액세스 제한은, 커널 내부의 드라이버에 의해 직접 암묵 지정되어 있는 것은 아니고, 보통은 그 디바이스 노드 엔트리의 통상 파일 퍼미션의 문제입니다.

  디바이스 노드를 가지지 않는 드라이버
네트워크 디바이스용의 드라이버에 액세스 할 경우에는 디바이스 노드는 사용하지 않습니다. 이러한 드라이버는 커널 내부의 다른 판단으로 선택됩니다. 또 일반적으로 네트워크 디바이스의 이용은, open(2) (을)를 호출하는 것이 아니라, socket(2) 시스템 콜로 행해집니다.

  커널에 드라이버를 짜넣는다
각 커널에는, 그 커넬의 기능이나 드라이버를 선택하거나 각종 옵션을 조정하기 위한 기초로서 이용되는, 설정 파일이 존재합니다. 관련하는 파일의 상세한 기술에 대해서는 config(8) (을)를 참조해 주세요. 본섹션의 개개의 메뉴얼 페이지는, 설정 파일의 샘플행을 그 서식 섹션에 제시하고 있습니다. 설정 파일의 샘플로서 ( i386 아키텍쳐용의) /sys/i386/conf/LINT 도 참조해 주세요.

관련 항목
close(2), ioctl(2), mmap(2), open(2), read(2), select(2), socket(2), write(2), devfs(5), hier(7), config(8), MAKEDEV(8)

저자
본메뉴얼 페이지는 David E. O'Brien 의 투고를 바탕으로 Joerg Wunsch 하지만 썼습니다.

역사
intro 하 FreeBSD 2.1 그리고 등장했습니다.