1. 程式人生 > >戴文的Linux內核專題:03 驅動程序【轉】

戴文的Linux內核專題:03 驅動程序【轉】

規模 閃存 目錄 超級計算機 用戶 memory ipa mes 摩托

轉自:http://www.lai18.com/content/432194.html

驅動程序是使內核能夠溝通和操作硬件或協議(規則和標準)的小程序。沒有驅動程序,內核不知道如何與硬件溝通或者處理協議(內核實際上先發送指令給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的火線設備。
firmware - 這些驅動用於和像BIOS(計算機的基本輸入輸出系統固件)這樣的設備的固件通信。BIOS用於啟動操作系統和控制硬件與設備的固件。一些BIOS允許用戶超頻CPU。超頻是使CPU運行在一個更快的速度。CPU速度以MHz(百萬赫茲)或GHz衡量。一個3.7 GHz的CPU的的速度明顯快於一個700Mhz的處理器。
gpio - 通用輸入/輸出(GPIO :General Purpose Input/Output)是可由用戶控制行為的芯片的管腳。這裏的驅動就是控制GPIO。
gpu - 這些驅動控制VGA、GPU和直接渲染管理(DRM :Direct Rendering Manager )。VGA是640*480的模擬計算機顯示器或是簡化的分辨率標準。GPU是圖形處理器。DRM是一個Unix渲染系統。
hid - 這驅動用於對USB人機界面設備的支持。
hsi - 這個驅動用於內核訪問像Nokia N900這樣的蜂窩式調制解調器。
hv - 這個驅動用於提供Linux中的鍵值對(KVP :Key Value Pair)功能。
hwmon - 硬件監控驅動用於內核讀取硬件傳感器上的信息。比如,CPU上有個溫度傳感器。那麽內核就可以追蹤溫度的變化並相應地調節風扇的速度。
hwspinlock - 硬件轉鎖驅動允許系統同時使用兩個或者更多的處理器,或使用一個處理器上的兩個或更多的核心。
i2c - I2C驅動可以使計算機用I2C協議處理主板上的低速外設。系統管理總線(SMBus :System Management Bus)驅動管理SMBus,這是一種用於輕量級通信的two-wire總線。
ide - 這些驅動用來處理像CDROM和硬盤這些PATA/IDE設備。
idle - 這個驅動用來管理Intel處理器的空閑功能。
iio - 工業I/O核心驅動程序用來處理數模轉換器或模數轉換器。
infiniband - Infiniband是在企業數據中心和一些超級計算機中使用的一種高性能的端口。這個目錄中的驅動用來支持Infiniband硬件。
input - 這裏包含了很多驅動,這些驅動都用於輸入處理,包括遊戲桿、鼠標、鍵盤、遊戲端口(舊式的遊戲桿接口)、遙控器、觸控、耳麥按鈕和許多其他的驅動。如今的操縱桿使用USB端口,但是在上世紀80、90年代,操縱桿是插在遊戲端口的。
iommu - 輸入/輸出內存管理單元(IOMMU :Input/Output Memory Management Unit)驅動用來管理內存管理單元中的IOMMU。IOMMU連接DMA IO總線到內存上。IOMMU是設備在沒有CPU幫助下直接訪問內存的橋梁。這有助於減少處理器的負載。
ipack - Ipack代表的是IndustryPack。 這個驅動是一個虛擬總線,允許在載體和夾板之間操作。
irqchip - 這些驅動程序允許硬件的中斷請求(IRQ)發送到處理器,暫時掛起一個正在運行的程序而去運行一個特殊的程序(稱為一個中斷處理程序)。
isdn - 這些驅動用於支持綜合業務數字網(ISDN),這是用於同步數字傳輸語音、視頻、數據和其他網絡服務使用傳統電話網絡的電路的通信標準。
leds - 用於LED的驅動。
lguest - lguest用於管理客戶機系統的中斷。中斷是CPU被重要任務打斷的硬件或軟件信號。CPU接著給硬件或軟件一些處理資源。
macintosh - 蘋果設備的驅動在這個文件夾裏。
mailbox - 這個文件夾(pl320-pci)中的驅動用於管理郵箱系統的連接。
md - 多設備驅動用於支持磁盤陣列,一種多塊硬盤間共享或復制數據的系統。
media - 媒體驅動提供了對收音機、調諧器、視頻捕捉卡、DVB標準的數字電視等等的支持。驅動還提供了對不同通過USB或火線端口插入的多媒體設備的支持。
memory - 支持內存的重要驅動。
memstick - 這個驅動用於支持Sony記憶棒。
message - 這些驅動用於運行LSI Fusion MPT(一種消息傳遞技術)固件的LSI PCI芯片/適配器。LSI大規模集成,這代表每片芯片上集成了幾萬晶體管、
mfd - 多用途設備(MFD)驅動提供了對可以提供諸如電子郵件、傳真、復印機、掃描儀、打印機功能的多用途設備的支持。這裏的驅動還給MFD設備提供了一個通用多媒體通信端口(MCP)層。
misc - 這個目錄包含了不適合在其他目錄的各種驅動。就像光線傳感器驅動。
mmc - MMC卡驅動用於處理用於MMC標準的閃存卡。
mtd - 內存技術設備(MTD :Memory technology devices)驅動程序用於Linux和閃存的交互,這就就像一層閃存轉換層。其他塊設備和字符設備的驅動程序不會以閃存設備的操作方式來做映射。盡管USB記憶卡和SD卡是閃存設備,但它們不使用這個驅動,因為他們隱藏在系統的塊設備接口後。這個驅動用於新型閃存設備的通用閃存驅動器驅動。
net - 網絡驅動提供像AppleTalk、TCP和其他的網絡協議。這些驅動也提供對調制解調器、USB 2.0的網絡設備、和射頻設備的支持。
nfc - 這個驅動是德州儀器的共享傳輸層之間的接口和NCI核心。
ntb - 不透明的橋接驅動提供了在PCIe系統的不透明橋接。PCIe是一種高速擴展總線標準。
nubus - NuBus是一種32位並行計算總線。用於支持蘋果設備。
of - 此驅動程序提供設備樹中創建、訪問和解釋程序的OF助手。設備樹是一種數據結構,用於描述硬件。
oprofile - 這個驅動用於從驅動到用戶空間進程(運行在用戶態下的應用)評測整個系統。這幫助開發人員找到性能問題
parisc - 這些驅動用於HP生產的PA-RISC架構設備。PA-RISC是一種特殊指令集的處理器。
parport - 並口驅動提供了Linux下的並口支持。
pci - 這些驅動提供了PCI總線服務。
pcmcia - 這些是筆記本的pc卡驅動
pinctrl - 這些驅動用來處理引腳控制設備。引腳控制器可以禁用或啟用I/O設備。
platform -這個文件夾包含了不同的計算機平臺的驅動像Acer、Dell、Toshiba、IBM、Intel、Chrombooks等等。
pnp - 即插即用驅動允許用戶在插入一個像USB的設備後可以立即使用而不必手動配置設備。
power - 電源驅動使內核可以測量電池電量,檢測充電器和進行電源管理。
pps - Pulse-Per-Second驅動用來控制電流脈沖速率。這用於計時。
ps3 - 這是Sony的遊戲控制臺驅動- PlayStation3。
ptp - 圖片傳輸協議(PTP)驅動支持一種從數碼相機中傳輸圖片的協議。
pwm - 脈寬調制(PWM)驅動用於控制設備的電流脈沖。主要用於控制像CPU風扇。
rapidio - RapidIO驅動用於管理RapidIO架構,它是一種高性能分組交換,用於電路板上交互芯片的交互技術,也用於互相使用底板的電路板。
regulator - 校準驅動用於校準電流、溫度、或其他可能系統存在的校準硬件。
remoteproc - 這些驅動用來管理遠程處理器。
rpmsg - 這個驅動用來控制支持大量驅動的遠程處理器通訊總線(rpmsg)。這些總線提供消息傳遞設施,促進客戶端驅動程序編寫自己的連接協議消息。
rtc - 實時時鐘(RTC)驅動使內核可以讀取時鐘。
s390 - 用於31/32位的大型機架構的驅動。
sbus - 用於管理基於SPARC的總線驅動。
scsi - 允許內核使用SCSI標準外圍設備。例如,Linux將在與SCSI硬件傳輸數據時使用SCSI驅動。
sfi -簡單固件接口(SFI)驅動允許固件發送信息表給操作系統。這些表的數據稱為SFI表。
sh - 該驅動用於支持SuperHway總線。
sn - 該驅動用於支持IOC3串口。
spi - 這些驅動處理串行設備接口總線(SPI),它是一個在在全雙工下運行的同步串行數據鏈路標準,。全雙工是指兩個設備可以同一時間同時發送和接收信息。雙工指的是雙向通信。設備在主/從模式下通信(取決於設備配置)。
ssb - ssb(Sonics Silicon Backplane)驅動提供對在不同博通芯片和嵌入式設備上使用的迷你總線的支持。
staging - 該目錄含有許多子目錄。這裏所有的驅動還需要在加入主內核前經過更多的開發工作。
target - SCSI設備驅動
tc - 這些驅動用於TURBOchannel,TURBOchannel是數字設備公司開發的32位開放總線。這主要用於DEC工作站。
thermal - thermal驅動使CPU保持較低溫度。
tty - tty驅動用於管理物理終端連接。
uio - 該驅動允許用戶編譯運行在用戶空間而不是內核空間的驅動。這使用戶驅動不會導致內核崩潰。
usb - USB設備允許內核使用USB端口。閃存驅動和記憶卡已經包含了固件和控制器,所以這些驅動程序允許內核使用USB接口和與USB設備。
uwb - Ultra-WideBand驅動用來管理短距離,高帶寬通信的超低功耗的射頻設備
vfio - 允許設備訪問用戶空間的VFIO驅動。
vhost - 這是用於宿主內核中的virtio服務器驅動。用於虛擬化中。
video - 這是用來管理顯卡和監視器的視頻驅動。
virt - 這些驅動用來虛擬化。
virtio - 這個驅動用來在虛擬PCI設備上使用virtio設備。用於虛擬化中。
vlynq - 這個驅動控制著由德州儀器開發的專有接口。這些都是寬帶產品,像WLAN和調制解調器,VOIP處理器,音頻和數字媒體信號處理芯片。
vme - WMEbus最初是為摩托羅拉68000系列處理器開發的總線標準
w1 - 這些驅動用來控制one-wire總線。
watchdog - 該驅動管理看門狗定時器,這是一個可以用來檢測和恢復異常的定時器。
xen - 該驅動是Xen管理程序系統。這是個允許用戶運行多個操作系統在一臺計算機的軟件或硬件。這意味著xen的代碼將允許用戶在同一時間的一臺計算機上運行兩個或更多的Linux系統。用戶也可以在Linux上運行Windows、Solaris、FreeBSD、或其他操作系統。
zorro - 該驅動提供Zorro Amiga總線支持。

via: http://www.linux.org/threads/the-linux-kernel-drivers.4205/
譯者:geekpi 校對:wxy
本文由 LCTT 原創翻譯,Linux中國 榮譽推出

戴文的Linux內核專題:03 驅動程序【轉】