Linux内核:驱动程序

本文介绍了Linux内核中的驱动程序,它们是内核与硬件或协议通信的关键。驱动程序分为通用和专用,理解驱动有助于配置和编译内核。文章详细列举了内核中各种驱动的分类和功能,包括I/O设备、存储设备、CPU、主板、总线等概念,并提及了部分驱动文件夹的用途,如ata、block、net等。此外,还讨论了驱动的通用性和专用性,以及如何通过驱动控制硬件和实现设备间的通信。
摘要由CSDN通过智能技术生成

本文译自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

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值