2014-09-10 3 views
2

그래서이 나는 (리눅스 용) 디바이스 드라이버에이 책, 유명한 오라일리 버전 ("리눅스 디바이스 드라이버 (3 판") 장치 드라이버의 3 종류가 있습니다에 따라 :장치 드라이버 분류

    가 한 번 데이터 바이트에 대한 읽기/쓰기
  1. 캐릭터 드라이버. 데이터 블록 (파일 저장 장치)를 판독 및 기록

  2. 블록 드라이버. 보낼 경우 (프레임을 수신

  3. 네트워크 드라이버 이더넷 및 와이파 이는 48 비트의 데이터입니다).

비디오 및 사운드 드라이버는 어디에 적합합니까? AFAIK 화면에는 마더 보드에서 모니터로 프레임을 보내는 버스가 있고 화면의 이미지는 일정한 프레임 수/초로 새로 고쳐지는 메모리 맵 (정사각형 배열)이기 때문에 묻습니다. 사운드 드라이버는 또한 44.1 KHz의 샘플링 속도로 DAC에 16 비트 (2 바이트) 프레임을 전송합니다. 이 캐릭터 드라이버입니까? 네트워크 인터페이스, 스크린, 스피커, 마이크 및 웹캠은 프레임 (바이트 배열)을 읽고 쓰는 모든 장치이므로 네트워크 드라이버와 비슷한 범주에 속할 것입니다.

답변

4

그런 말을하는 것입니다 이러한 유형의 장치를 설명하는보다 정확한 방법 : 데이터의 스트림을

  • 문자 장치 거래. 데이터를 작성하고 데이터를 읽을 수는 있지만 건너 뛸 수는 없습니다. 사용할 수있는 데이터가 없으면 데이터 읽기가 차단 될 수 있습니다. 일반적인 문자 장치에는 터미널, 직렬 포트 및 /dev/null/dev/random과 같은 특수 장치가 포함됩니다. 하지만 한 번에 1 바이트 일 필요는 없습니다. 많은 장치가 더 큰 프레임으로 데이터를 반환합니다. (예를 들어, 32 바이트 프레임 /dev/input 반환 데이터 리눅스에서 입력 장치는, 각 하나 개의 이벤트를 나타내는.)

  • 차단 장치 선정 와 데이터 고정 블록. mmap()을 사용하여 원하는 위치에서 데이터를 읽고 쓰고 메모리에 매핑 할 수 있습니다. 이들은 종종 디스크와 같은 저장 장치를 나타내는 데 사용되지만,보다 특이한 다른 것을 나타내는 데에도 사용할 수 있습니다.

  • 네트워크 장치는 특별한 경우입니다. 네트워크와 실제로 인터페이스하는 장치 (예 : 이더넷 NIC, 무선 네트워크 하드웨어, 셀 모뎀 등)에 다소 독점적으로 사용됩니다. 그들은 /dev에 전혀 나타나지 않습니다.

모두 문자와 블록 디바이스는 ioctl()를 사용하여 일반 프레임 워크에 맞지 않는 특수 작전을 구현할 수있다 (예를 들면, CD 등을 배출, 시리얼 포트의 전송 속도를 변경) 일부, 그래서 어느 정도의 사용을 결정하는 것은 다소 임의적 일 수 있습니다. 그럼에도 불구하고 귀하가 묘사하고있는 유형의 장치에 대해 :

  • 오디오 장치는 일반적으로 문자 장치로 표시됩니다.

    구형 OSS 리눅스 사운드 시스템은 /dev/dsp과 같은 사운드 장치를 나타 냈습니다 : 그것으로부터 데이터를 읽는 것은 마이크 입력을 나타내는 PCM 데이터를 읽고, 그것에 PCM 데이터를 쓰는 것은 사운드 카드를 통해이를 재생할 것입니다. 보다 현대적인 ALSA 사운드 시스템은보다 복잡한 장치 및 형식 세트를 사용하지만 개념은 동일합니다.

  • 비디오 장치는 비정상적인 상황입니다.

    일부 간단한 "프레임 버퍼"비디오 드라이버는 /dev/fb0과 같은 블록 장치로 구현됩니다. 이 장치는 화면의 이미지를 나타냅니다. 32 비트 색상을 사용하는 1024x768 화면은 3MB 버퍼로 표시됩니다. 예를 들어, 3MB 버퍼로 표시하면 해당 이미지가 변경됩니다. 가장 일반적으로 메모리에 매핑하여 사용됩니다.

    대부분의 최신 비디오 장치는 그렇게 단순하지 않습니다. 대부분은 부분적으로 커널 드라이버로 구현되고 부분적으로는 비디오 하드웨어에 직접 매핑하고 쓸 수있는 X11 장치 드라이버로 구현됩니다. 때로는 추가 문자 또는 블록 장치가 포함될 수 있습니다 (예 : 일부 Nvidia 그래픽 카드는 문자 장치 /dev/nvidia을 사용함). 그러나이 장치에서 읽거나 쓰는 데이터의 세부 정보는 대부분 독점적입니다.