Linux下PCI設(shè)備驅(qū)動程序開發(fā)
發(fā)布時間:2008/8/25 0:00:00 訪問次數(shù):488
一、pci總線系統(tǒng)體系結(jié)構(gòu)
pci是外圍設(shè)備互連(peripheral component interconnect)的簡稱,作為一種通用的總線接口標(biāo)準(zhǔn),它在目前的計算機(jī)系統(tǒng)中得到了非常廣泛的應(yīng)用。pci提供了一組完整的總線接口規(guī)范,其目的是描述如何將計算機(jī)系統(tǒng)中的外圍設(shè)備以一種結(jié)構(gòu)化和可控化的方式連接在一起,同時它還刻畫了外圍設(shè)備在連接時的電氣特性和行為規(guī)約,并且詳細(xì)定義了計算機(jī)系統(tǒng)中的各個不同部件之間應(yīng)該如何正確地進(jìn)行交互。
無論是在基于intel芯片的pc機(jī)中,或是在基于alpha芯片的工作站上,pci毫無疑問都是目前使用最廣泛的一種總線接口標(biāo)準(zhǔn)。同舊式的isa總線不同,pci將計算機(jī)系統(tǒng)中的總線子系統(tǒng)與存儲子系統(tǒng)完全地分開,cpu通過一塊稱為pci橋(pci-bridge)的設(shè)備來完成同總線子系統(tǒng)的交互,如圖1所示。
圖1 pci子系統(tǒng)的體系結(jié)構(gòu)
由于使用了更高的時鐘頻率,因此pci總線能夠獲得比isa總線更好的整體性能。pci總線的時鐘頻率一般在25mhz到33mhz范圍內(nèi),有些甚至能夠達(dá)到66mhz或者133mhz,而在64位系統(tǒng)中則最高能達(dá)到266mhz。盡管目前pci設(shè)備大多采用32位數(shù)據(jù)總線,但pci規(guī)范中已經(jīng)給出了64位的擴(kuò)展實現(xiàn),從而使pci總線能夠更好地實現(xiàn)平臺無關(guān)性,現(xiàn)在pci總線已經(jīng)能夠用于ia-32、alpha、powerpc、sparc64和ia-64等體系結(jié)構(gòu)中。
pci總線具有三個非常顯著的優(yōu)點,使得它能夠完成最終取代isa總線這一歷史使命:
在計算機(jī)和外設(shè)間傳輸數(shù)據(jù)時具有更好的性能;
能夠盡量獨立于具體的平臺;
可以很方便地實現(xiàn)即插即用。
圖2是一個典型的基于pci總線的計算機(jī)系統(tǒng)邏輯示意圖,系統(tǒng)的各個部分通過pci總線和pci-pci橋連接在一起。從圖中不難看出,cpu和ram需要通過pci橋連接到pci總線0(即主pci總線),而具有pci接口的顯卡則可以直接連接到主pci總線上。pci-pci橋是一個特殊的pci設(shè)備,它負(fù)責(zé)將pci總線0和pci總線1(即從pci主線)連接在一起,通常pci總線1稱為pci-pci橋的下游(downstream),而pci總線0則稱為pci-pci橋的上游(upstream)。圖中連接到從pci總線上的是scsi卡和以太網(wǎng)卡。為了兼容舊的isa總線標(biāo)準(zhǔn),pci總線還可以通過pci-isa橋來連接isa總線,從而能夠支持以前的isa設(shè)備。圖中isa總線上連接著一個多功能i/o控制器,用于控制鍵盤、鼠標(biāo)和軟驅(qū)。
圖2 pci系統(tǒng)示意圖
在此我只對pci總線系統(tǒng)體系結(jié)構(gòu)作了概括性介紹,如果讀者想進(jìn)一步了解,david a rusling在the linux kernel中對linux的pci子系統(tǒng)有比較詳細(xì)的介紹。
二、linux驅(qū)動程序框架
inux將所有外部設(shè)備看成是一類特殊文件,稱之為“設(shè)備文件”,如果說系統(tǒng)調(diào)用是linux內(nèi)核和應(yīng)用程序之間的接口,那么設(shè)備驅(qū)動程序則可以看成是linux內(nèi)核與外部設(shè)備之間的接口。設(shè)備驅(qū)動程序向應(yīng)用程序屏蔽了硬件在實現(xiàn)上的細(xì)節(jié),使得應(yīng)用程序可以像操作普通文件一樣來操作外部設(shè)備。
1. 字符設(shè)備和塊設(shè)備
linux抽象了對硬件的處理,所有的硬件設(shè)備都可以像普通文件一樣來看待:它們可以使用和操作文件相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口來完成打開、關(guān)閉、讀寫和i/o控制操作,而驅(qū)動程序的主要任務(wù)也就是要實現(xiàn)這些系統(tǒng)調(diào)用函數(shù)。linux系統(tǒng)中的所有硬件設(shè)備都使用一個特殊的設(shè)備文件來表示,例如,系統(tǒng)中的第一個ide硬盤使用/dev/hda表示。每個設(shè)備文件對應(yīng)有兩個設(shè)備號:一個是主設(shè)備號,標(biāo)識該設(shè)備的種類,也標(biāo)識了該設(shè)備所使用的驅(qū)動程序;另一個是次設(shè)備號,標(biāo)識使用同一設(shè)備驅(qū)動程序的不同硬件設(shè)備。設(shè)備文件的主設(shè)備號必須與設(shè)備驅(qū)動程序在登錄該設(shè)備時申請的主設(shè)備號一致,否則用戶進(jìn)程將無法訪問到設(shè)備驅(qū)動程序。
在linux操作系統(tǒng)下有兩類主要的設(shè)備文件:一類是字符設(shè)備,另一類則是塊設(shè)備。字符設(shè)備是以字節(jié)為單位逐個進(jìn)行i/o操作的設(shè)備,在對字符設(shè)備發(fā)出讀寫請求時,實際的硬件i/o緊接著就發(fā)生了,一般來說字符設(shè)備中的緩存是可有可無的,而且也不支持隨機(jī)訪問。塊設(shè)備則是利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū),當(dāng)用戶進(jìn)程對設(shè)備進(jìn)行讀寫請求時,驅(qū)動程序先查看緩沖區(qū)中的內(nèi)容,如果緩沖區(qū)中的數(shù)據(jù)能滿足用戶的要求就返回相應(yīng)的數(shù)據(jù),否則就調(diào)用相應(yīng)的請求函數(shù)來進(jìn)行實際的i/o操作。塊設(shè)備主要是針對磁盤等慢速設(shè)備設(shè)計的,其目的是避免耗費過多的cpu時間來等待操作的完成。一般說來,pci卡通常都屬于字符設(shè)備。
所有已經(jīng)注冊(即已經(jīng)加載了驅(qū)動程序)的硬件設(shè)備的主設(shè)備號可以從/proc/devices文件中得到。使用mknod命令可以創(chuàng)建指定類型的設(shè)備文件,同時為其分配相應(yīng)的主設(shè)備號和次設(shè)備號。例如,下面的命令:
[root@gary root]# mknod /dev/lp0 c
一、pci總線系統(tǒng)體系結(jié)構(gòu)
pci是外圍設(shè)備互連(peripheral component interconnect)的簡稱,作為一種通用的總線接口標(biāo)準(zhǔn),它在目前的計算機(jī)系統(tǒng)中得到了非常廣泛的應(yīng)用。pci提供了一組完整的總線接口規(guī)范,其目的是描述如何將計算機(jī)系統(tǒng)中的外圍設(shè)備以一種結(jié)構(gòu)化和可控化的方式連接在一起,同時它還刻畫了外圍設(shè)備在連接時的電氣特性和行為規(guī)約,并且詳細(xì)定義了計算機(jī)系統(tǒng)中的各個不同部件之間應(yīng)該如何正確地進(jìn)行交互。
無論是在基于intel芯片的pc機(jī)中,或是在基于alpha芯片的工作站上,pci毫無疑問都是目前使用最廣泛的一種總線接口標(biāo)準(zhǔn)。同舊式的isa總線不同,pci將計算機(jī)系統(tǒng)中的總線子系統(tǒng)與存儲子系統(tǒng)完全地分開,cpu通過一塊稱為pci橋(pci-bridge)的設(shè)備來完成同總線子系統(tǒng)的交互,如圖1所示。
圖1 pci子系統(tǒng)的體系結(jié)構(gòu)
由于使用了更高的時鐘頻率,因此pci總線能夠獲得比isa總線更好的整體性能。pci總線的時鐘頻率一般在25mhz到33mhz范圍內(nèi),有些甚至能夠達(dá)到66mhz或者133mhz,而在64位系統(tǒng)中則最高能達(dá)到266mhz。盡管目前pci設(shè)備大多采用32位數(shù)據(jù)總線,但pci規(guī)范中已經(jīng)給出了64位的擴(kuò)展實現(xiàn),從而使pci總線能夠更好地實現(xiàn)平臺無關(guān)性,現(xiàn)在pci總線已經(jīng)能夠用于ia-32、alpha、powerpc、sparc64和ia-64等體系結(jié)構(gòu)中。
pci總線具有三個非常顯著的優(yōu)點,使得它能夠完成最終取代isa總線這一歷史使命:
在計算機(jī)和外設(shè)間傳輸數(shù)據(jù)時具有更好的性能;
能夠盡量獨立于具體的平臺;
可以很方便地實現(xiàn)即插即用。
圖2是一個典型的基于pci總線的計算機(jī)系統(tǒng)邏輯示意圖,系統(tǒng)的各個部分通過pci總線和pci-pci橋連接在一起。從圖中不難看出,cpu和ram需要通過pci橋連接到pci總線0(即主pci總線),而具有pci接口的顯卡則可以直接連接到主pci總線上。pci-pci橋是一個特殊的pci設(shè)備,它負(fù)責(zé)將pci總線0和pci總線1(即從pci主線)連接在一起,通常pci總線1稱為pci-pci橋的下游(downstream),而pci總線0則稱為pci-pci橋的上游(upstream)。圖中連接到從pci總線上的是scsi卡和以太網(wǎng)卡。為了兼容舊的isa總線標(biāo)準(zhǔn),pci總線還可以通過pci-isa橋來連接isa總線,從而能夠支持以前的isa設(shè)備。圖中isa總線上連接著一個多功能i/o控制器,用于控制鍵盤、鼠標(biāo)和軟驅(qū)。
圖2 pci系統(tǒng)示意圖
在此我只對pci總線系統(tǒng)體系結(jié)構(gòu)作了概括性介紹,如果讀者想進(jìn)一步了解,david a rusling在the linux kernel中對linux的pci子系統(tǒng)有比較詳細(xì)的介紹。
二、linux驅(qū)動程序框架
inux將所有外部設(shè)備看成是一類特殊文件,稱之為“設(shè)備文件”,如果說系統(tǒng)調(diào)用是linux內(nèi)核和應(yīng)用程序之間的接口,那么設(shè)備驅(qū)動程序則可以看成是linux內(nèi)核與外部設(shè)備之間的接口。設(shè)備驅(qū)動程序向應(yīng)用程序屏蔽了硬件在實現(xiàn)上的細(xì)節(jié),使得應(yīng)用程序可以像操作普通文件一樣來操作外部設(shè)備。
1. 字符設(shè)備和塊設(shè)備
linux抽象了對硬件的處理,所有的硬件設(shè)備都可以像普通文件一樣來看待:它們可以使用和操作文件相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口來完成打開、關(guān)閉、讀寫和i/o控制操作,而驅(qū)動程序的主要任務(wù)也就是要實現(xiàn)這些系統(tǒng)調(diào)用函數(shù)。linux系統(tǒng)中的所有硬件設(shè)備都使用一個特殊的設(shè)備文件來表示,例如,系統(tǒng)中的第一個ide硬盤使用/dev/hda表示。每個設(shè)備文件對應(yīng)有兩個設(shè)備號:一個是主設(shè)備號,標(biāo)識該設(shè)備的種類,也標(biāo)識了該設(shè)備所使用的驅(qū)動程序;另一個是次設(shè)備號,標(biāo)識使用同一設(shè)備驅(qū)動程序的不同硬件設(shè)備。設(shè)備文件的主設(shè)備號必須與設(shè)備驅(qū)動程序在登錄該設(shè)備時申請的主設(shè)備號一致,否則用戶進(jìn)程將無法訪問到設(shè)備驅(qū)動程序。
在linux操作系統(tǒng)下有兩類主要的設(shè)備文件:一類是字符設(shè)備,另一類則是塊設(shè)備。字符設(shè)備是以字節(jié)為單位逐個進(jìn)行i/o操作的設(shè)備,在對字符設(shè)備發(fā)出讀寫請求時,實際的硬件i/o緊接著就發(fā)生了,一般來說字符設(shè)備中的緩存是可有可無的,而且也不支持隨機(jī)訪問。塊設(shè)備則是利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū),當(dāng)用戶進(jìn)程對設(shè)備進(jìn)行讀寫請求時,驅(qū)動程序先查看緩沖區(qū)中的內(nèi)容,如果緩沖區(qū)中的數(shù)據(jù)能滿足用戶的要求就返回相應(yīng)的數(shù)據(jù),否則就調(diào)用相應(yīng)的請求函數(shù)來進(jìn)行實際的i/o操作。塊設(shè)備主要是針對磁盤等慢速設(shè)備設(shè)計的,其目的是避免耗費過多的cpu時間來等待操作的完成。一般說來,pci卡通常都屬于字符設(shè)備。
所有已經(jīng)注冊(即已經(jīng)加載了驅(qū)動程序)的硬件設(shè)備的主設(shè)備號可以從/proc/devices文件中得到。使用mknod命令可以創(chuàng)建指定類型的設(shè)備文件,同時為其分配相應(yīng)的主設(shè)備號和次設(shè)備號。例如,下面的命令:
[root@gary root]# mknod /dev/lp0 c
熱門點擊
- 基于嵌入式處理器的電力諧波多功能實時分析系統(tǒng)
- 基于ARM9處理器的智能導(dǎo)游儀設(shè)計
- ARM、DSP、FPGA的特點和區(qū)別
- ucos-ii在嵌入式智能視覺監(jiān)控系統(tǒng)中的應(yīng)
- 統(tǒng)一建模語言UML在嵌入式系統(tǒng)設(shè)計中的應(yīng)用
- 基于ARM平臺的GPRS CQT測試系統(tǒng)的設(shè)
- ARM/uClinux應(yīng)用程序的開發(fā)
- 基于ARM7的LCD設(shè)計與實現(xiàn)
- Linux系統(tǒng)在嵌入式DVR中的應(yīng)用
- Fujitsu(富士通)發(fā)布SPARC64
推薦技術(shù)資料
- DFRobot—玩的就是
- 如果說新車間的特點是“靈動”,F(xiàn)QPF12N60C那么... [詳細(xì)]
- 扇出型面板級封裝(FOPLP)
- 全球首款無掩模光刻系統(tǒng)—DSP
- 紫光閃存E5200 PCIe 5.0 企業(yè)級
- NAND Flash 技術(shù)和系
- 高性能DIMM 內(nèi)存數(shù)據(jù)技術(shù)封
- PCIe Gen4 SSD主控
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究