首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设备驱动程序分类

设备驱动程序分类
EN

Stack Overflow用户
提问于 2014-09-10 01:46:52
回答 2查看 1.1K关注 0票数 5

因此,根据我在设备驱动程序( Linux)方面的两本书,值得注意的是O‘’REILLY版本(“Linux设备驱动程序(第3版)”)有3种类型的设备驱动程序:

  1. 一次读取/写入数据字节的字符驱动程序。
  2. 读取和写入数据块(文件存储设备)的块驱动程序。
  3. 发送和接收帧的网络驱动程序(对于以太网和wifi,这些是48位数据块)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-10 03:14:27

更准确地描述这类装置的方法是:

  • 字符设备处理数据流的。您可以向它们写入数据并从中读取数据,但不能跳过。如果没有可用的数据,从它们读取数据可能会阻塞。通用字符设备包括终端、串口以及诸如/dev/null/dev/random这样的特殊设备。不过,这不需要一次一个字节:许多设备将数据作为更大的帧返回。(例如,/dev/input下的Linux输入设备以32字节帧返回数据,每个帧代表一个事件。)
  • 块设备处理(一种固定的数据块)。您可以将数据读写到您想要的任何位置,也可以使用mmap()将数据映射到内存。它们通常用于表示存储设备(如磁盘),但也可用于表示其他更不寻常的事物。
  • 网络设备是一个特例。它们或多或少地专门用于实际与网络接口的设备(例如,以太网NIC、无线网络硬件、小区调制解调器等)。他们根本没有出现在/dev

字符和块设备都可以使用ioctl()实现不符合常规框架的特殊操作(例如,改变串口的波特率、弹出CD等),因此,在某种程度上,使用哪一种操作可能是任意的。不过,对于您所描述的设备类型:

  • 音频设备通常表示为字符设备。 旧的操作系统Linux声音系统将声音设备表示为/dev/dsp:从它读取数据将读取表示麦克风输入的PCM数据,并将PCM数据写入它将通过声卡播放。更现代的ALSA音响系统使用更复杂的设备和格式,但概念是相同的。
  • 视频设备是一种不寻常的情况。 一些简单的“帧缓冲区”视频驱动程序被实现为块设备,如/dev/fb0。该设备表示屏幕上的图像--例如,使用32位颜色的1024x768屏幕将由一个3MB的缓冲区表示--并向其写入将改变该图像。最常用的方法是将它映射到内存中。 不过,大多数现代视频设备并不那么简单。它们中的许多部分作为内核驱动程序实现,部分作为X11设备驱动程序实现,可以直接映射和写入视频硬件。它们有时可能包括额外的字符或块设备(例如,某些Nvidia显卡使用字符设备/dev/nvidia),但从该设备读取或写入数据的详细信息基本上是专有的。
票数 7
EN

Stack Overflow用户

发布于 2014-09-10 01:59:09

他们是性格驱动者。

gfx http://www.x.org/wiki/Development/Documentation/HowVideoCardsWork/

音频http://www.alsa-project.org/~tiwai/writing-an-alsa-driver/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25756121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档