本文译自Linux.orgDevynCJohnson的系列文章《Linux内核》,本篇链接:http://www.linux.org/threads/the-linux-kernel-drivers.4205/,转载请注明出处及原作者。

在上一篇文章Linux内核:源代码中我们探讨了源代码的组成结构以及各个部分的功能,今天我们来介绍一下Linux的驱动。

驱动是使内核能够与硬件或协议进行通信或控制的程序。如果没有驱动,内核无法与硬件或是协议进行通信(实际上,内核将指令发给BIOS,然后再由BIOS发给硬件)。Linux的内核代码在driver文件夹中包含了许多驱动程序。本文将逐一介绍driver文件夹中的驱动程序。理解驱动程序对于配置和编译内核是很有意义的。否则用户有可能在他们的内核中加入了不需要的驱动,或者是遗漏了重要的驱动程序。驱动的源代码中通常都会在注释中说明这个驱动的用途。例如,tc驱动的源代码就有一行的注释说明,这个驱动是用于TURBOchannel总线[1]的。用户可以通过阅读驱动程序的文档来了解该驱动的用途。

在介绍各种驱动程序之前,我们先来介绍一些术语:
- I/O设备是指输入/输出设备,例如调制解调器和网卡就属于输入输出设备。显示器属于输出设备,键盘鼠标以及游戏手柄属于输入设备。
- 存储设备存储数据,诸如SD卡,硬盘,CD,存储卡等等。
- CPU也被称为处理器,是计算机的大脑和心脏。如果没有了CPU,计算机将无法工作。
- 主板是一块连接各种硬件的印刷电路板,主板及其组件对于计算机也是十分重要的。许多计算机用户也将主板称为计算机的核心。主板上还集成了外设端口。外设包括输入设备,输出设备,以及存储设备。
- 总线是指将主板与外设连接起来的电路。
- 网络设备将两台或以上的计算机连接起来。
- 端口是用户可以插入外设或者线缆的设备,例如用户可以将FireWire记忆棒插入FireWire端口,以太网电缆插入以太网端口。
- 32/64位系统,是指寄存器,地址总线以及数据总线的位数,以64位的主板为例,数据总线为64位线宽。
- 内存地址是指以位的形式存在的指向内存中的地址,所以32位的内存地址使用了32位来描述某一个点在内存中存储的位置。

许多驱动都是通用驱动,以通用键盘驱动为例,安装了通用键盘驱动的内核几乎可以使用所有的键盘。然而有些驱动则是专用的,例如Apple和Commodore就在他们的计算机或者系统中拥有专用驱动。Linux内核包含了诸如智能手机,Apple设备,Amigaxitong,Sony PlayStation 3,Andriod 平板电脑之类的驱动。

有些驱动程序属于多种驱动类型,例如音频驱动在net文件夹和media文件夹中都存在。
accessibility - 无障碍设备驱动
acpi - 高级组态及能源界面,负责管理电源
amba - 高级微处理器总线结构(AMBA),是一种运行在单片机系统(SoC)上的管理与协作协议。单片机是一种单个芯片包含多数或全部计算机必须组建的芯片。该文件夹中的驱动程序允许内核在SoC上运行。
ata - 该文件夹中的驱动支持PATA和SATA设备,SATA是一种计算机总线界面,它负责将诸如硬盘的存储设备与主机总线适配器连接。PATA则是连接硬盘,软盘以及光驱在内的存储设备,PATA也被称为IDE。
atm - 异步传送模式(ATM)是一种电信标准,在这个文件夹中有各种各样的总线来驱动PCI桥(他们与PCI总线连接)以及以太网控制器(以太网通信通过集成电路芯片控制)。
auxdisplay - 该文件夹中包括三种驱动:LCD帧缓冲,LCD控制以及LCD驱动。他们都是液晶显示器(LCD)的驱动程序。
base - 这个文件夹中包含了一些重要的驱动:组件,系统总线,虚拟机程序管理等等。
bcma - 由Broadcom制作,基于AMBA协议的一些总线的驱动。
block - 块设备驱动。
bluetooth - 蓝牙驱动。
bus - 包括三个驱动:ocp端口协议到scp协议转换驱动,设备间通信驱动,以及设备间通信纠错驱动。
cdrom - 包括两个驱动:一个是CD驱动,包括读写DVD和CD。 另一个是GD驱动,GD是指GB级别只读存储,一张GD的容量为1.2GB,介于CD和DVD容量之间。
char - 字符设备驱动,字符设备每次传输一个字符的数据,例如打印机。
clk - 系统时钟驱动。
clocksource - 允许将时钟用作计时器。
connector - 该文件夹中的驱动支持内核了解进程何时fork或运行,并且通过proc连接器更改用户ID,用户组ID和会话ID。内核需要了解进程何时fork和执行,否则进程无法有效管理资源。
cpufreq - 这些驱动程序通过更改电源消耗控制CPU频率。
cpuidle - 这些驱动管理CPU的空闲状态,如果系统中有多个CPU,驱动会试图保持CPU的空闲一致。
crypto - 加密驱动。
dca - 直接高速缓存访问(DCA)驱动允许内核访问CPU的高速缓存(cache)。CPU的高速缓存就像是集成在CPU芯片上的RAM,但是较之于RAM芯片运行速度更快。然而CPU的高速缓存存储空间小,因此CPU仅将最重要的和执行的代码至于高速缓存上。
devfreq - 这个驱动通过改变CPU的频路来达到节能的目的,也被称为CPU节流。
dio - 数字输入输出总线驱动。
dma - 直接取内存驱动(DMA)允许设备不通过CPU访问内存,降低了CPU的负担。
edac - 错误检测与更正驱动。
eisa - 工业标准体系扩展(EISA)驱动使得内核支持EISA协议。
extcon - 外部连接驱动检测端口,并发现插入的外部设备。例如,该驱动可以发现用户插入的U盘。
firewire - FireWire驱动。
firmware - 该文件夹中的驱动与诸如BIOS之类设备的组件通信。BIOS是用于启动操作系统以及控制外设的硬件和组件。有些BIOS系统允许用户CPU超频,超频是指使CPU运行在更快的速度。CPU的运行速度是以MHz或GHz计的,一个3.7GHz的CPU显然比700MHz的处理器速度更快。
gpio - 通用输入/输出端口(GPIO)是芯片上的通用引脚,用户可以控制其行为。本文件夹中的驱动用于控制GPIO。
gpu - 本文件夹中的驱动用于控制VGA,GPU,以及DRM。VGA是640*480分辨率的模拟计算机显示。GPU是图像处理器,DRM是Unix的翻译系统。
hid - 本文件夹中的驱动支持USB人机界面设备。
hsi - 本文件夹中的驱动支持诺基亚N900中的蜂窝调制解调器。
hv - 支持KVP的驱动程序。
hwmon - 硬件监视驱动允许内核读取硬件中的传感器信息,例如,CPU中集成了热敏电阻,内核就可以通过监视CPU的温度来调节冷却风扇的转速。
hwspinlock - 硬件自旋锁驱动允许系统拥有:两个及以上不同的处理器,或者是双核或多核的处理器。
i2c - I2C驱动允许内核使用I2C协议,I2C协议支持与低速外设进行通信。
ide - 这些驱动程序用于PATA/IDE设备,例如CD光驱和硬盘。
idle - 这些驱动管理英特尔处理器的空闲状态。
iio - 工业I/O内核驱动支持内核运行ADC或DAC。
infiniband - 该驱动支持企业级数据中心或者是超级计算机所使用的高性能端口。
input - 这一文件夹中包含了许多驱动,他们都用于驱动输入设备,例如游戏手柄,鼠标,键盘等等。
iommu - 输入输出内存管理单元(IOMMU)是内存管理单元的一种,它通过总线与RAM相连,IOMMU可以使得外设不通过CPU访问RAM,从而降低了CPU的负担。
ipack - 该驱动用于支持母板与子板之间的虚拟总线。
irqchip - 该文件夹中的驱动支持中断请求(IRQ),IRQ是指由硬件向处理器提出的一种请求,通常情况下这一请求是使得处理器暂停一个正在运行的程序转而运行另一个特定程序。
isdn - 该驱动支持ISDN,ISDN(综合业务数字网络)是一个通信标准的集合,它可以通过传统的电话网络传输音频,视频,数据以及其他的网络服务。
leds - LED驱动。
lguest - 管理虚拟机中操作系统的中断请求。
macintosh - Apple硬件的驱动
mailbox - 管理邮件系统。
md - 该文件夹中的驱动支持RAID(独立硬盘冗余阵列),RAID是一种多个硬盘共享或备份数据的系统。
media - 多媒体设备驱动。
memory - 重要的RAM驱动。
memstick - Sony记忆棒的驱动。
message - LSI PCI芯片或适配器的驱动。LSI是指大规模集成电路。
mfd - 多功能设备(MFD)驱动,MFD是指提供诸如邮件,传真,复印,打印等多种服务的设备。
misc - 该文件夹中包含了一些无法归类的驱动程序。
mmc - 多媒体卡(MMC)驱动,处理应用于闪存卡的MMC标准。
mtd - 存储技术设备驱动是Linux用于与闪存卡的驱动。闪存卡与块设备或字符设备的运行方式不同。虽然USB存储卡和SD卡都是闪存设备,但是他们使用的是块设备的驱动,本文件夹中的驱动是新型闪存设备的驱动程序。
net - 网络驱动提供诸如Appletalk,TCP以及其他网络协议,该文件夹中的驱动也同样支持调制解调器,USB2.0以太网设备。
nfc - 该文件夹中的驱动是德州仪器公司的共享传输层和NCI核之间的界面。
ntb - 提供PCIe系统间的非透明桥接,PCIe是一种高速扩展总线标准。
nubus -NuBus是一种32位的并行计算机总线,该驱动用于Apple设备。
oprofile - 这些驱动反映了从驱动到用户进程(用户运行的应用)的这个系统,帮助开发者寻找性能问题。
parisc - 支持惠普公司的PA-RISC设备。
parport - 支持Linux下的并行端口。
pci - 提供PCI总线服务。
pcmcia - 笔记本电脑的主板驱动。
pinctrl - 引脚控制驱动。
platform - 该文件夹中的驱动支持不同的计算机平台,诸如Acer,Dell,Toshiba,IBM等等。
pnp - 即插即用设备驱动。
power - 允许内核测量电池电量,检测充电以及电源管理。
pps - 控制电脉冲频率以计算时间。
ps3 - Sony的Playstation3的驱动。
ptp - 图片传输协议(PTP)支持由数码相机传输图片。
pwm - 控制向设备输出的电脉冲(PWM),主要用于控制CPU风扇的转速。
regulator - 支持诸如温度调节一类的调节设备。
remoteproc - 管理远程处理器。
rpmsg - 这些驱动程序支持远程处理器消息总线。
rtc - 实时时钟驱动支持内核读取时钟。
sbus - 基于SPARC的总线的驱动程序。
scsi - 应用SCSI标准的外设的驱动。
spi - SPI总线的驱动程序。
ssb - SSB驱动支持Broadcom芯片和嵌入式设备上的迷你总线。
staging - 这一文件夹中的驱动程序未经过严格测试,所以并未被放入内核的主流驱动程序之中。
target - SCSI目标的驱动程序。
thermal - 确保CPU不会过热的驱动。
tty - 管理与实际终端(如显示器)连接的驱动。
uio - 允许用户使用运行在用户空间的驱动,确保用户制作的驱动不会导致内核崩溃。
usb - USB驱动。
vfio - 允许设备访问用户空间的驱动。
video - 管理显卡和显示器的驱动。
virt - 虚拟化驱动。
virtio - 允许virtio设备通过PCI设备使用。
watchdog - 管理watchdog计时器的驱动。
xen - Xen虚拟机驱动。
zorro - 支持Zorro Amiga总线。
下一篇文章中我们来聊一聊系统安全。

下面是一些关于如何开发Linux驱动的教程链接:

http://www.freesoftwaremagazine.com/articles/drivers_linux

http://lwn.net/Kernel/LDD3/

http://www.linuxdevcenter.com/pub/a…troduction-to-device-drivers-under-linux.html

http://www.linux-drivers.org/

[1]TURBOchannel总线是曾经被Digital公司广泛应用的总线,但目前已基本停用。https://en.wikipedia.org/wiki/TURBOchannel

Linux内核:驱动程序相关推荐

  1. 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序 3

    在前一篇文章中,我们介绍了如何在Ubuntu上为Android系统编写Linux内核驱动程序.在这个名为hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文 ...

  2. 在Ubuntu上为Android系统编写Linux内核驱动程序

    在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了. 据统计,截止2011年5月,AppStore的应用 ...

  3. Android驱动(1)---Ubuntu中为Android系统上编写Linux内核驱动程序实现方法

    Ubuntu中为Android系统上编写Linux内核驱动程序实现方法 本文主要介绍在Ubuntu 上为Android系统编写Linux内核驱动程序, 这里对编写驱动程序做了详细的说明,对研究Andr ...

  4. Android 8.0 linux内核,在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序---Android8.0版本实现-对照老罗版本...

    老罗版本参见:https://blog.csdn.net/luoshengyang/article/details/6573809 在Android硬件抽象层(HAL)概要介绍和学习计划一文中,我们简 ...

  5. 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6571210 在前一篇文章中,我们介绍了如何在U ...

  6. android驱动开发 老罗,在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序(老罗学习笔记3)...

    在Android硬件抽象层(HAL)概要介绍和学习计划一文中,我们简要介绍了在Android系统为为硬件编写驱动程序的方法.简单来说,硬件驱动程序一方面分布在Linux内核中,另一方面分布在用户空间的 ...

  7. 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序 (学习老罗的)

    不得不说,老罗写的太好了. 按照他的方法,我两次就成功了. 不过有点让人奇怪的地方就是 第一次我make snod是成功的 但是执行如下代码:       root@android:/ # cd sy ...

  8. 在Ubuntu上为Android系统编写Linux内核驱动程序(学习老罗的)

    首先提出2个问题 1. 驱动程序的作用是什么? 答:驱动程序的作用主要是向上层提供访问设备寄存器的一个接口,包括读和写. 2. 访问设备驱动程序的方法? 答:a. 通过proc文件系统来访问:b. 通 ...

  9. 在Ubuntu上为Android系统编写Linux内核驱动程序 2

    如下书本参考:嵌入式Linux应用开发和Linux设备驱动程序. 在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iph ...

  10. android驱动之旅-在Ubuntu上为Android系统编写Linux内核驱动程序(3)

    Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节.也就是说,把对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空 ...

最新文章

  1. server 2003登录界面黑屏的解决办法
  2. 蓝桥杯:安慰奶牛(最小生成树)
  3. mysql 两列数据互换_mysql 实现互换表中两列数据方法简单实例
  4. mc服务器如何开修改物品开挂,如何在我的世界电脑服务器开挂
  5. HTML5学习笔记(一):初步印象
  6. CSVDE批量导入域用户
  7. 22.4. IP Address
  8. 数据集如何影响作物病害识别的有效性
  9. Mysql常用的几种join连接方式
  10. HashTable源码
  11. 大学生创业计划书PPT模板在哪免费下?经典商业计划书PPT模板大全
  12. snipaste截长图
  13. 软件项目管理-会议记录模板
  14. 【STM32H7的DSP教程】第7章 ARM DSP源码和库移植方法(IAR8)
  15. 有符号与无符号,长整型与短整型
  16. 红颜本无心 奈何为祸水
  17. 东北大学oj平台python答案_你觉得东北大学的Python考试怎么样?
  18. YOLO v5训练时报fitness错误,求解
  19. 相机的变焦,对焦和景深的理解和照相機的成像原理
  20. 低学历转行3D建模有前途吗,游戏3D建模怎么样?

热门文章

  1. bilibili_Linux3_linux安装
  2. 服务器安全基线检查(Python)代码执行
  3. python运维开发工程师养成记(break语句)
  4. HTTPS 证书免费续费操作流程
  5. 谷歌chrome浏览器设置成深色(dark)模式
  6. 【详细】win2008环境下oracle11G配置高可用dataguard
  7. 旅游社区如何吸引流量和留住用户?
  8. laravel框架 APP 支付宝支付
  9. 表连接查询(多表查询,内连接,左外连接,右外连接)
  10. 【python】给你女神制作一个520图片墙吧~