戴文的Linux内核专题:03 驱动程序

驱动程序是使内核能够沟通和操作硬件或协议(规则和标准)的小程序。没有驱动程序,内核不知道如何与硬件沟通或者处理协议(内核实际上先发送指令给BIOS,然后BIOS传给硬件)。 Linux的内核代码在驱动程序文件夹中以源代码的形式包含了许多驱动程序。驱动文件夹中的每个文件夹会在下面说明。在配置和 编译内核时,这样有助于你了解驱动程序。否则,用户可能会在编译时加入不必要的或者漏掉重要的驱动。驱动代码通常会包含一个单行注释来指出驱动的目的。 比如,tc的驱动代码,有一行的注释说是用于TURBOchannel总线。由于这些文档,用户应该看驱动前几行的注释来了解它们的用途。

有几个术语你应该已经知道,所以下面的信息应该是明白的。一个I/O设备指的是输入/输出设备。例如调制解调器和网卡,他们发送和接收数据。监视器是一个输出设备 – 只有信息出来。键盘、鼠标和游戏杆是数据输入系统。存储设备用于存储数据,例如SD卡、硬盘、光盘、存储卡等。CPU(处理器)是计算机的“大脑”或“心脏” ,如果没有它,电脑就无法运作。主板则是一块连接板上不同组件的印刷线路板。主板及各个组件是计算机的运行的基础。许多计算机用户说主板是电脑的心脏(主板上有CPU)。主板包含了用于连接外设的端口,外设包括输入、输出和存储设备。总线是主板的电路,它连接着外设。网络设备用于两台或多台计算机之间的连接。端口则是用户可以插入另外一台设备或一根电缆的设备,例如,用户可以将插入一根火线记忆棒插入一个火线端口;将以太网电缆插入一个以太网端口。光碟的读取是利用激光,从可以散射或反射的激光的反射面上读出数据,一个常见的 光盘是DVD。许多系统说自己是32位或者64位,这指的是寄存器、地址总线或数据总线的位数。例如,在一块64位的主板上,数据总线(组件之间的银线)有64根并排到目的的线。存储器地址以位(0和1)的形式在存储器中编址,因此,一个32位存储地址包含32个0和1来表示存储器上的某处地址。

许多驱动程序是通用驱动程序,这意味着一个通用键盘驱动可以使内核可以处理几乎所有的键盘。然而,有些驱动是专用驱动,像苹果和Commodore就分别为苹果电脑和Amiga系统制造了专门的硬件。Linux内核中已经包含了许多诸如智能手机、苹果、Amiga系统、PS3、Android平板,和许多其他设备的驱动程序。

注意有些设备的驱动不在本目录中。比如,射频驱动在net和media文件夹下。

accessibility – 这些驱动提供支持一些辅助设备。在Linux 3.9.4中,这个文件夹中只有一个驱动就是盲文设备驱动。

acpi – 高级配置和电源接口(ACPI : Advanced Configuration and Power Interface)驱动用来管理电源使用。

amba – 高级微控制器总线架构(AMBA : Advanced Microcontroller Bus Architecture)是与片上系统(SoC)的管理和互连的协议。SoC是一块包含许多或所有必要的计算机组件的芯片。这里的AMBA驱动让内核能够运行在这上面。

ata – 该目录包含PATA和SATA设备的驱动程序。串行ATA(SATA)是一种连接主机总线适配器到像硬盘那样的存储器的计算机总线接口。并行ATA(PATA)用于连接存储设备,如硬盘驱动器,软盘驱动器,光盘驱动器的标准。PATA就是我们所说的IDE。

atm – 异步通信模式(ATM : Asynchronous Transfer Mode)是一种通信标准。这里有各种接到PCI桥的驱动(他们连接到PCI总线)和以太网控制器(控制以太网通信的集成电路芯片)。

auxdisplay – 这个文件夹提供了三个驱动。LCD 帧缓存(framebuffer)驱动、LCD控制器驱动和一个LCD驱动。这些驱动用于管理液晶显示器 —— 液晶显示器会在按压时显示波纹。注意:按压会损害屏幕,所以请不要用力戳LCD显示屏。

base – 这是个重要的目录包含了固件、系统总线、虚拟化能力等基本的驱动。

bcma – 这些驱动用于使用基于AMBA协议的总线。AMBA是由博通公司开发。

block – 这些驱动提供对块设备的支持,像软驱、SCSI磁带、TCP网络块设备等等。

bluetooth – 蓝牙是一种安全的无线个人区域网络标准(PANs)。蓝牙驱动就在这个文件夹,它允许系统使用各种蓝牙设备。例如,一个蓝牙鼠标不用电缆,并且计算机有一个电子狗(小型USB接收器)。Linux系统必须能够知道进入电子狗的信号,否则蓝牙设备无法工作。

bus – 这个目录包含了三个驱动。一个转换ocp接口协议到scp协议。一个是设备间的互联驱动,第三个是用于处理互联中的错误处理。

cdrom – 这个目录包含两个驱动。一个是cd-rom,包括DVD和CD的读写。第二个是gd-rom(只读GB光盘),GD光盘是1.2GB容量的光盘,这像一个更大的CD或者更小的DVD。GD通常用于世嘉游戏机中。

char – 字符设备驱动就在这里。字符设备每次传输数据传输一个字符。这个文件夹里的驱动包括打印机、PS3闪存驱动、东芝SMM驱动和随机数发生器驱动等。

clk – 这些驱动用于系统时钟。

clocksource – 这些驱动用于作为定时器的时钟。

connector – 这些驱动使内核知道当进程fork并使用proc连接器更改UID(用户ID)、GID(组ID)和SID(会话ID)。内核需要知道什么时候进程fork(CPU中运行多个任务)并执行。否则,内核可能会低效管理资源。

cpufreq – 这些驱动改变CPU的电源能耗。

cpuidle – 这些驱动用来管理空闲的CPU。一些系统使用多个CPU,其中一个驱动可以让这些CPU负载相当。

crypto – 这些驱动提供加密功能。

dca – 直接缓存访问(DCA : Direct Cache Access)驱动允许内核访问CPU缓存。CPU缓存就像CPU内置的RAM。CPU缓存的速度比RAM更快。然而,CPU缓存的容量比RAM小得多。CPU在这个缓存系统上存储了最重要的和执行的代码。

devfreq – 这个驱动程序提供了一个通用的动态电压和频率调整(DVFS : Generic Dynamic Voltage and Frequency Scaling)框架,可以根据需要改变CPU频率来节约能源。这就是所谓的CPU节能。

dio – 数字输入/输出(DIO :Digital Input/Output)总线驱动允许内核可以使用DIO总线。

dma – 直接内存访问(DMA)驱动允许设备无需CPU直接访问内存。这减少了CPU的负载。

edac – 错误检测和校正( Error Detection And Correction)驱动帮助减少和纠正错误。

eisa – 扩展工业标准结构总线(Extended Industry Standard Architecture)驱动提供内核对EISA总线的支持。

extcon – 外部连接器(EXTernal CONnectors)驱动用于检测设备插入时的变化。例如,extcon会检测用户是否插入了USB驱动器。

firewire – 这些驱动用于控制苹果制造的类似于USB的火线设备。

人格的完善是本,财富的确立是末。

戴文的Linux内核专题:03 驱动程序

相关文章:

你感兴趣的文章:

标签云: