设备驱动分类

时间:2014-09-10 01:46:53

标签: c device-driver

所以根据我在设备驱动程序(Linux)上的2本书,值得注意的是O&#39; REILLY版本(&#34; Linux设备驱动程序(第3版&#34;))有3种类型的设备驱动程序:< / p>

  1. 一次读取/写入数据字节的字符驱动程序。

  2. 阻止读取和写入数据块的驱动程序(文件存储设备)。

  3. 发送和接收帧的网络驱动程序(对于以太网和wifi,这些是48位数据块)。

  4. 那么视频和声音驱动程序适合哪些地方?我问,因为AFAIK你的屏幕有一个总线,从主板发送帧到显示器,屏幕上的图像是一个内存映射(一个方形阵列),以一定的帧数/秒刷新。声音驱动程序还以44.1 KHz的采样率向DAC发送16位(2字节)帧。这些人物驱动程序?我认为它们与网络驱动程序类似,因为网络接口,屏幕,扬声器,麦克风和网络摄像头都是读写帧(一个字节数组)的设备。

2 个答案:

答案 0 :(得分:6)

描述这些类型设备的更准确方法是:

  • 字符设备处理数据流。您可以向他们写入数据并从中读取数据,但您无法跳过。如果没有可用的话,从它们读取数据可能会阻止。常用字符设备包括终端,串行端口以及/dev/null/dev/random等特殊设备。但这不一定是一个字节,但是:许多设备将数据作为较大的帧返回。 (例如,/dev/input下的Linux输入设备以32字节帧的形式返回数据,每个帧代表一个事件。)

  • 块设备处理固定数据块。您可以将数据读取和写入所需的任何位置,也可以使用mmap()将数据映射到内存。它们通常用于表示存储设备(如磁盘),但也可用于表示其他更常见的事物。

  • 网络设备是一种特殊情况。它们或多或少地专门用于实际与网络接口的设备(例如,以太网NIC,无线网络硬件,小区调制解调器等)。他们根本不会出现在/dev

字符和块设备都可以使用ioctl()实现不适合普通框架的特殊操作(例如,更改串行端口的波特率,弹出CD等),因此,在某种程度上,决定使用哪一个可能有点武断。然而,对于您所描述的设备类型:

  • 音频设备通常表示为角色设备。

    较旧的OSS Linux声音系统将声音设备表示为/dev/dsp:从中读取数据将读取表示麦克风输入的PCM数据,并将PCM数据写入其中将通过声卡播放。更现代的ALSA音响系统使用更复杂的设备和格式,但概念是相同的。

  • 视频设备是一种不寻常的情况。

    一些简单的&#34;帧缓冲&#34;视频驱动程序实现为块设备,例如/dev/fb0。此设备代表屏幕上的图像 - 例如,使用32位颜色的1024x768屏幕将由3 MB缓冲区表示 - 并且写入它会更改该图像。它最常用于将其映射到内存中。

    但是,大多数现代视频设备都不是那么简单。其中许多部分实现为内核驱动程序,部分实现为X11设备驱动程序,可直接映射和写入视频硬件。它们有时可能包含额外的字符或块设备(例如,一些Nvidia显卡使用字符设备/dev/nvidia),但是从该设备读取或写入的数据的细节在很大程度上是专有的。

答案 1 :(得分:1)