From 96a3da6e240d0e0890d04bd0b1ae78df9cf82a0a Mon Sep 17 00:00:00 2001 From: wxy Date: Thu, 31 Oct 2013 14:16:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=EF=BC=9A03=20The=20Linux=20K?= =?UTF-8?q?ernel--Drivers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../03 The Linux Kernel--Drivers.md | 95 ++++++++++--------- 1 file changed, 48 insertions(+), 47 deletions(-) rename {translated/The Linux Kernel => published}/03 The Linux Kernel--Drivers.md (51%) diff --git a/translated/The Linux Kernel/03 The Linux Kernel--Drivers.md b/published/03 The Linux Kernel--Drivers.md similarity index 51% rename from translated/The Linux Kernel/03 The Linux Kernel--Drivers.md rename to published/03 The Linux Kernel--Drivers.md index 0eec7e3529..10cd77d099 100755 --- a/translated/The Linux Kernel/03 The Linux Kernel--Drivers.md +++ b/published/03 The Linux Kernel--Drivers.md @@ -1,100 +1,101 @@ -03 Linux : 驱动 -================================================================================ -驱动是使内核能够交流和处理硬件或协议(规则和标准)的小程序。没有驱动程序,内核不知道如何与硬件交流或者处理协议(内核实际上先发送指令给BIOS然后BIOS传给硬件) 。 Linux内核代码在驱动程序文件夹中以源代码的形式包含了许多驱动程序。 驱动文件夹中的每个文件夹会在下面说明。在配置和​​编译内核时,它有助于了解驱动程序。否则,用户可能会在编译时加入不必要的或者遗留重要的驱动。驱动代码通常会包含一行注释行来指出驱动的目的。 比如,tc的驱动代码,有一行的注释说是用于TURBOchannel总线。由于这些文档,用户应该看驱动前几行的注释来了解它们的目的。 +戴文的Linux内核专题:03 驱动程序 +=========================== -有几个术语应该已经知道所以以下信息是可以理解的。一个I / O设备指的是输入/输出设备。调制解调器和网卡就是这样的例子,他们发送和接收数据。监视器是一个输出设备 - 只有信息出来。键盘,鼠标和游戏杆是数据输入系统。存储设备存储数据。这方面的例子包括SD卡、硬盘、光盘、存储卡等等。 CPU (也称为处理器)是计算机的“大脑”或“心脏” 。如果没有这一块处理芯片,电脑无法运作。 主板是一块连接板上不同组件的印刷线路板。主板和各个组件的一台计算机不可缺少的功能。许多计算机用户说主板是电脑的心脏(主板上有CPU ) 。该主板包含了用于连接外设的端口。外设包括输入,输出和存储设备。总线上主板的电路并且它连接着连接外设。网络设备处理两台或多台计算机之间的连接。端口是用户可以插入另外一台设备或一根电缆的设备。例如,用户将插入一根火线记忆棒插入一个火线端口;以太网电缆插入入一个以太网端口。光碟的读取是利用激光从可以散射或反射的激光的反射面上读出。一个常见的​​光盘是DVD 。许多系统是32位或者64位系统,这指的是寄存器的,地址总线或数据总线的位数。例如,在一块64位的主板上,数据总线(组件之间的银线)有64根并排到目的的线。存储器地址以位(0和1)的形式在存储器中编址。因此,一个32位存储地址包含32位的0和1来表示存储器上的某处地址。 +驱动程序是使内核能够沟通和操作硬件或协议(规则和标准)的小程序。没有驱动程序,内核不知道如何与硬件沟通或者处理协议(内核实际上先发送指令给BIOS,然后BIOS传给硬件)。 Linux的内核代码在驱动程序文件夹中以源代码的形式包含了许多驱动程序。驱动文件夹中的每个文件夹会在下面说明。在配置和​​编译内核时,这样有助于你了解驱动程序。否则,用户可能会在编译时加入不必要的或者漏掉重要的驱动。驱动代码通常会包含一个单行注释来指出驱动的目的。 比如,tc的驱动代码,有一行的注释说是用于TURBOchannel总线。由于这些文档,用户应该看驱动前几行的注释来了解它们的用途。 -许多驱动程序是通用驱动程序这意味着一个通用键盘驱动可以使内核可以处理几乎所有的键盘。然而,有些驱动是专用驱动。像苹果和Commodore分别为苹果电脑和Amiga系统制造了专门的硬件。 Linux内核中已经包含了许多诸如智能手机、苹果、Amiga系统、PS3、Android平板,和许多其他设备的驱动程序。 +有几个术语你应该已经知道,所以下面的信息应该是明白的。一个I/O设备指的是输入/输出设备。例如调制解调器和网卡,他们发送和接收数据。监视器是一个输出设备 - 只有信息出来。键盘、鼠标和游戏杆是数据输入系统。存储设备用于存储数据,例如SD卡、硬盘、光盘、存储卡等。CPU(处理器)是计算机的“大脑”或“心脏” ,如果没有它,电脑就无法运作。主板则是一块连接板上不同组件的印刷线路板。主板及各个组件是计算机的运行的基础。许多计算机用户说主板是电脑的心脏(主板上有CPU)。主板包含了用于连接外设的端口,外设包括输入、输出和存储设备。总线是主板的电路,它连接着外设。网络设备用于两台或多台计算机之间的连接。端口则是用户可以插入另外一台设备或一根电缆的设备,例如,用户可以将插入一根火线记忆棒插入一个火线端口;将以太网电缆插入一个以太网端口。光碟的读取是利用激光,从可以散射或反射的激光的反射面上读出数据,一个常见的​​光盘是DVD。许多系统说自己是32位或者64位,这指的是寄存器、地址总线或数据总线的位数。例如,在一块64位的主板上,数据总线(组件之间的银线)有64根并排到目的的线。存储器地址以位(0和1)的形式在存储器中编址,因此,一个32位存储地址包含32个0和1来表示存储器上的某处地址。 -注意有些设备不在本目录中。比如,射频驱动在net和media文件夹下。 +许多驱动程序是通用驱动程序,这意味着一个通用键盘驱动可以使内核可以处理几乎所有的键盘。然而,有些驱动是专用驱动,像苹果和Commodore就分别为苹果电脑和Amiga系统制造了专门的硬件。Linux内核中已经包含了许多诸如智能手机、苹果、Amiga系统、PS3、Android平板,和许多其他设备的驱动程序。 + +注意有些设备的驱动不在本目录中。比如,射频驱动在net和media文件夹下。 **accessibility** - 这些驱动提供支持一些辅助设备。在Linux 3.9.4中,这个文件夹中只有一个驱动就是盲文设备驱动。 -**acpi** - 高级配置和电源接口(ACPI)驱动用来管理电源使用。 +**acpi** - 高级配置和电源接口(ACPI : Advanced Configuration and Power Interface)驱动用来管理电源使用。 -**amba** - 高级微控制器总线架构(AMBA)是与片上系统(SoC)的管理和互连的协议。SoC是一块包含许多或所有必要的计算机组件的芯片。这里的AMBA驱动让内核能够运行在这上面。 +**amba** - 高级微控制器总线架构(AMBA : Advanced Microcontroller Bus Architecture)是与片上系统(SoC)的管理和互连的协议。SoC是一块包含许多或所有必要的计算机组件的芯片。这里的AMBA驱动让内核能够运行在这上面。 **ata** - 该目录包含PATA和SATA设备的驱动程序。串行ATA(SATA)是一种连接主机总线适配器到像硬盘那样的存储器的计算机总线接口。并行ATA(PATA)用于连接存储设备,如硬盘驱动器,软盘驱动器,光盘驱动器的标准。PATA就是我们所说的IDE。 -**atm** - 异步通信模式(ATM)是一种通信标准。这里有各种接到PCI桥的驱动(他们连接到PCI总线)和以太网控制器(控制以太网通信的集成电路芯片)。 +**atm** - 异步通信模式(ATM : Asynchronous Transfer Mode)是一种通信标准。这里有各种接到PCI桥的驱动(他们连接到PCI总线)和以太网控制器(控制以太网通信的集成电路芯片)。 -**auxdisplay** - 这个文件夹提供了三个驱动。LCD帧缓存驱动、LCD控制器驱动和一个LCD驱动。这些驱动管理液晶显示器。液晶显示器会在按压时显示波纹。注意:按压会损害屏幕,所以请不要用力戳LCD显示屏。 +**auxdisplay** - 这个文件夹提供了三个驱动。LCD 帧缓存(framebuffer)驱动、LCD控制器驱动和一个LCD驱动。这些驱动用于管理液晶显示器 —— 液晶显示器会在按压时显示波纹。注意:按压会损害屏幕,所以请不要用力戳LCD显示屏。 **base** - 这是个重要的目录包含了固件、系统总线、虚拟化能力等基本的驱动。 -**bcma** - 这些驱动是用于使用基于AMBA协议的总线协议。AMBA是由博通公司开发。 +**bcma** - 这些驱动用于使用基于AMBA协议的总线。AMBA是由博通公司开发。 -**block** - 这些驱动提供对块设备的支持,像软驱、SCSI磁带、TCP块设备等等。 +**block** - 这些驱动提供对块设备的支持,像软驱、SCSI磁带、TCP网络块设备等等。 -**bluetooth** - 蓝牙是一种安全的无线个人区域网络标准(PANs)。蓝牙驱动就在这个文件夹,它允许系统使用不同的蓝牙设备。例如,一个蓝牙鼠标缺少电缆,并且计算机有一个电子狗(小型USB接收器)。Linux系统必须能够知道进入电子狗的信号。否则,蓝牙设备无法工作。 +**bluetooth** - 蓝牙是一种安全的无线个人区域网络标准(PANs)。蓝牙驱动就在这个文件夹,它允许系统使用各种蓝牙设备。例如,一个蓝牙鼠标不用电缆,并且计算机有一个电子狗(小型USB接收器)。Linux系统必须能够知道进入电子狗的信号,否则蓝牙设备无法工作。 **bus** - 这个目录包含了三个驱动。一个转换ocp接口协议到scp协议。一个是设备间的互联驱动,第三个是用于处理互联中的错误处理。 -**cdrom** - rom(只读GB盘)。GD光盘是1.2GB容量的光盘。这像一个更大的CD或者更小的DVD。GD通常用于世嘉游戏机中。 +**cdrom** - 这个目录包含两个驱动。一个是cd-rom,包括DVD和CD的读写。第二个是gd-rom(只读GB光盘),GD光盘是1.2GB容量的光盘,这像一个更大的CD或者更小的DVD。GD通常用于世嘉游戏机中。 -**char** - 字符设备驱动就在这里。字符设备每次传输数据传输一个字符。这个文件夹里的驱动包括打印机,PS3闪存驱动、东芝SMM驱动和随机数发生器驱动。 +**char** - 字符设备驱动就在这里。字符设备每次传输数据传输一个字符。这个文件夹里的驱动包括打印机、PS3闪存驱动、东芝SMM驱动和随机数发生器驱动等。 **clk** - 这些驱动用于系统时钟。 -**clocksource** - 这些驱动使用时钟作为定时器。 +**clocksource** - 这些驱动用于作为定时器的时钟。 -**connector** - 这些驱动使内核知道当进程fork并使用proc连接器更改UID(用户ID),GID(组ID),和SID(会话ID)。内核需要知道什么时候进程fork(CPU中运行多个任务)并执行。否则,内核可能会低效管理资源。 +**connector** - 这些驱动使内核知道当进程fork并使用proc连接器更改UID(用户ID)、GID(组ID)和SID(会话ID)。内核需要知道什么时候进程fork(CPU中运行多个任务)并执行。否则,内核可能会低效管理资源。 -**cpufreq** - 这些驱动改变CPU的电源功率。 +**cpufreq** - 这些驱动改变CPU的电源能耗。 -**cpuidle** - 这些驱动用来管理空闲的CPU。一些系统使用多个CPU,那么其中一个会尝试保持空闲。 +**cpuidle** - 这些驱动用来管理空闲的CPU。一些系统使用多个CPU,其中一个驱动可以让这些CPU负载相当。 **crypto** - 这些驱动提供加密功能。 -**dca** - 直接缓存访问驱动允许内核访问CPU缓存。CPU缓存就像CPU内置的RAM。CPU缓存的速度比RAM更快。然而,CPU缓存的容量比RAM小得多。CPU在这个缓存系统上存储了最重要的和执行的代码。 +**dca** - 直接缓存访问(DCA : Direct Cache Access)驱动允许内核访问CPU缓存。CPU缓存就像CPU内置的RAM。CPU缓存的速度比RAM更快。然而,CPU缓存的容量比RAM小得多。CPU在这个缓存系统上存储了最重要的和执行的代码。 -**devfreq** - 这个驱动程序提供了一个通用的动态电压和频率调整(DVFS)框架,可以根据需要改变CPU频率来节约能源。这就是所谓的CPU节流。 +**devfreq** - 这个驱动程序提供了一个通用的动态电压和频率调整(DVFS : Generic Dynamic Voltage and Frequency Scaling)框架,可以根据需要改变CPU频率来节约能源。这就是所谓的CPU节能。 -**dio** - 数字输入/输出总线驱动允许内核可以使用DIO总线。 +**dio** - 数字输入/输出(DIO :Digital Input/Output)总线驱动允许内核可以使用DIO总线。 -**dma** - 直接内存访问(DMA)驱动允许设备无需CPU访问内存。这减少了CPU的负载。 +**dma** - 直接内存访问(DMA)驱动允许设备无需CPU直接访问内存。这减少了CPU的负载。 -**edac** - 错误检测和校正驱动帮助减少和纠正错误。 +**edac** - 错误检测和校正( Error Detection And Correction)驱动帮助减少和纠正错误。 -**eisa** - 扩展工业标准结构总线驱动提供内核对EISA总线的支持。 +**eisa** - 扩展工业标准结构总线(Extended Industry Standard Architecture)驱动提供内核对EISA总线的支持。 -**extcon** - 外部连接器驱动用于检测设备插入时的变化。例如,extcon会检测用户是否插入了USB驱动器。 +**extcon** - 外部连接器(EXTernal CONnectors)驱动用于检测设备插入时的变化。例如,extcon会检测用户是否插入了USB驱动器。 **firewire** - 这些驱动用于控制苹果制造的类似于USB的火线设备。 **firmware** - 这些驱动用于和像BIOS(计算机的基本输入输出系统固件)这样的设备的固件通信。BIOS用于启动操作系统和控制硬件与设备的固件。一些BIOS允许用户超频CPU。超频是使CPU运行在一个更快的速度。CPU速度以MHz(百万赫兹)或GHz衡量。一个3.7 GHz的CPU的的速度明显快于一个700Mhz的处理器。 -**gpio** - 通用输入/输出(GPIO)是由用户控制行为的芯片的管脚。这里的驱动就是控制GPIO。 +**gpio** - 通用输入/输出(GPIO :General Purpose Input/Output)是可由用户控制行为的芯片的管脚。这里的驱动就是控制GPIO。 -**gpu** - 直接渲染管理(DRM)。VGA是640*480的模拟计算机显示器或是简化的分辨率标准。GPU是图形处理器。DRM是一个Unix渲染系统。 +**gpu** - 这些驱动控制VGA、GPU和直接渲染管理(DRM :Direct Rendering Manager )。VGA是640*480的模拟计算机显示器或是简化的分辨率标准。GPU是图形处理器。DRM是一个Unix渲染系统。 **hid** - 这驱动用于对USB人机界面设备的支持。 -**hsi** - 这个驱动用于内核可以访问像Nokia N900这样的蜂窝式调制解调器。 +**hsi** - 这个驱动用于内核访问像Nokia N900这样的蜂窝式调制解调器。 -**hv** - 这个驱动用于提供Linux中的键值对(KVP)功能。 +**hv** - 这个驱动用于提供Linux中的键值对(KVP :Key Value Pair)功能。 **hwmon** - 硬件监控驱动用于内核读取硬件传感器上的信息。比如,CPU上有个温度传感器。那么内核就可以追踪温度的变化并相应地调节风扇的速度。 -**hwspinlock** - 硬件自旋锁驱动允许系统同时使用两个或者更多的处理器而不是使用一个处理器上的两个或更多的核心。 +**hwspinlock** - 硬件转锁驱动允许系统同时使用两个或者更多的处理器,或使用一个处理器上的两个或更多的核心。 -**i2c** - I2C驱动可以使计算机用I2C协议处理主板上的低速外设。系统管理总线(SMBus)驱动管理SMBus,这是一种用于轻量级通信的two-wire总线。 +**i2c** - I2C驱动可以使计算机用I2C协议处理主板上的低速外设。系统管理总线(SMBus :System Management Bus)驱动管理SMBus,这是一种用于轻量级通信的two-wire总线。 **ide** - 这些驱动用来处理像CDROM和硬盘这些PATA/IDE设备。 -**idle** - 这个驱动用来处理空闲的Intel处理器。 +**idle** - 这个驱动用来管理Intel处理器的空闲功能。 -**iio** - 工业I/O核心驱动程序用来处理AD或DA转换器。 +**iio** - 工业I/O核心驱动程序用来处理数模转换器或模数转换器。 -**infiniband** - Infiniband是在企业数据中心和一些超级计算机中使用的一中高性能的端口。这个目录中的驱动用来支持Infiniband硬件。 +**infiniband** - Infiniband是在企业数据中心和一些超级计算机中使用的一种高性能的端口。这个目录中的驱动用来支持Infiniband硬件。 -**input** - 耳机按钮,和许多其他的驱动。如今的操纵杆使用USB端口,但是在1980年代和1990年代,操纵杆是插在gameport中。 +**input** - 这里包含了很多驱动,这些驱动都用于输入处理,包括游戏杆、鼠标、键盘、游戏端口(旧式的游戏杆接口)、遥控器、触控、耳麦按钮和许多其他的驱动。如今的操纵杆使用USB端口,但是在上世纪80、90年代,操纵杆是插在游戏端口的。 -**iommu** - 输入/输出内存管理单元(IOMMU)驱动用来管理内存管理单元中的IOMMU。IOMMU连接DMA IO 总线到内存上。IOMMU是设备在没有CPU帮助下直接访问内存的桥梁。这有助于减少处理器的负载。 +**iommu** - 输入/输出内存管理单元(IOMMU :Input/Output Memory Management Unit)驱动用来管理内存管理单元中的IOMMU。IOMMU连接DMA IO总线到内存上。IOMMU是设备在没有CPU帮助下直接访问内存的桥梁。这有助于减少处理器的负载。 **ipack** - Ipack代表的是IndustryPack。 这个驱动是一个虚拟总线,允许在载体和夹板之间操作。 -**irqchip** - 这些驱动程序允许硬件的中断请求(IRQ)发送到处理器,暂时停止一个正在运行的程序而去运行一个特殊的程序(称为一个中断处理程序)。 +**irqchip** - 这些驱动程序允许硬件的中断请求(IRQ)发送到处理器,暂时挂起一个正在运行的程序而去运行一个特殊的程序(称为一个中断处理程序)。 **isdn** - 这些驱动用于支持综合业务数字网(ISDN),这是用于同步数字传输语音、视频、数据和其他网络服务使用传统电话网络的电路的通信标准。 @@ -110,8 +111,7 @@ **media** - 媒体驱动提供了对收音机、调谐器、视频捕捉卡、DVB标准的数字电视等等的支持。驱动还提供了对不同通过USB或火线端口插入的多媒体设备的支持。 - -**memory** - 只是支持内存的重要驱动。 +**memory** - 支持内存的重要驱动。 **memstick** - 这个驱动用于支持Sony记忆棒。 @@ -123,7 +123,7 @@ **mmc** - MMC卡驱动用于处理用于MMC标准的闪存卡。 -**mtd** - 内存技术设备(MTD)驱动程序用于Linux和闪存的交互,这就就像一层闪存转换层。其他块和字符驱动程序不会以闪存设备的操作方式来做映射。尽管USB记忆卡和SD卡是闪存设备,但它们不使用这个驱动,因为他们隐藏在系统的块设备接口后。这个驱动用于新型闪存设备的通用闪存驱动器驱动。 +**mtd** - 内存技术设备(MTD :Memory technology devices)驱动程序用于Linux和闪存的交互,这就就像一层闪存转换层。其他块设备和字符设备的驱动程序不会以闪存设备的操作方式来做映射。尽管USB记忆卡和SD卡是闪存设备,但它们不使用这个驱动,因为他们隐藏在系统的块设备接口后。这个驱动用于新型闪存设备的通用闪存驱动器驱动。 **net** - 网络驱动提供像AppleTalk、TCP和其他的网络协议。这些驱动也提供对调制解调器、USB 2.0的网络设备、和射频设备的支持。 @@ -133,7 +133,7 @@ **nubus** - NuBus是一种32位并行计算总线。用于支持苹果设备。 -**of** - 此驱动程序提供设备树中创建,访问和解释程序的OF助手。设备树是一种数据结构,用于描述硬件。 +**of** - 此驱动程序提供设备树中创建、访问和解释程序的OF助手。设备树是一种数据结构,用于描述硬件。 **oprofile** - 这个驱动用于从驱动到用户空间进程(运行在用户态下的应用)评测整个系统。这帮助开发人员找到性能问题 @@ -143,7 +143,7 @@ **pci** - 这些驱动提供了PCI总线服务。 -**pcmcia** - 这些事笔记本主板驱动 +**pcmcia** - 这些是笔记本的pc卡驱动 **pinctrl** - 这些驱动用来处理引脚控制设备。引脚控制器可以禁用或启用I/O设备。 @@ -151,11 +151,12 @@ **pnp** - 即插即用驱动允许用户在插入一个像USB的设备后可以立即使用而不必手动配置设备。 -**power** - 电源驱动是内核可以测量电池电量,检测充电器,和电源管理。 +**power** - 电源驱动使内核可以测量电池电量,检测充电器和进行电源管理。 **pps** - Pulse-Per-Second驱动用来控制电流脉冲速率。这用于计时。 **ps3** - 这是Sony的游戏控制台驱动- PlayStation3。 + **ptp** - 图片传输协议(PTP)驱动支持一种从数码相机中传输图片的协议。 **pwm** - 脉宽调制(PWM)驱动用于控制设备的电流脉冲。主要用于控制像CPU风扇。 @@ -202,9 +203,9 @@ **uwb** - Ultra-WideBand驱动用来管理短距离,高带宽通信的超低功耗的射频设备 -**vfio** - 允许设备访问用户空间的VFIO驱动 +**vfio** - 允许设备访问用户空间的VFIO驱动。 -**vhost** - 这是用于宿主内核中的virtio服务器驱动。用于虚拟化中 +**vhost** - 这是用于宿主内核中的virtio服务器驱动。用于虚拟化中。 **video** - 这是用来管理显卡和监视器的视频驱动。 @@ -230,6 +231,6 @@ via: http://www.linux.org/threads/the-linux-kernel-drivers.4205/ -译者:[geekpi](https://github.com/geekpi) 校对:[校对者ID](https://github.com/校对者ID) +译者:[geekpi](https://github.com/geekpi) 校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出