Linux內(nèi)核開發(fā)之PCI設(shè)備驅(qū)動(dòng)_第1頁(yè)
Linux內(nèi)核開發(fā)之PCI設(shè)備驅(qū)動(dòng)_第2頁(yè)
Linux內(nèi)核開發(fā)之PCI設(shè)備驅(qū)動(dòng)_第3頁(yè)
Linux內(nèi)核開發(fā)之PCI設(shè)備驅(qū)動(dòng)_第4頁(yè)
Linux內(nèi)核開發(fā)之PCI設(shè)備驅(qū)動(dòng)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、淺談Lin ux內(nèi)核開發(fā)之PCI設(shè)備驅(qū)動(dòng)Page 1 of 7Gen erated by Foxit PDF Creator ? Foxit Software For evaluati on only.http:/www.ibm.eom/developerworks/c n/linu x/l-cn-pci/i ndex.html2010-1-4淺談Lin ux內(nèi)核開發(fā)之PCI設(shè)備驅(qū)動(dòng)Page 5 of 7Gen erated by Foxit PDF Creator ? Foxit Software For evaluati on only.淺談Linux內(nèi)核開發(fā)之PCI設(shè)備驅(qū)動(dòng)級(jí)別:初級(jí)趙

2、昊翔(haoxiang), 軟件工程師,Cisco Systems2009年6月11日本文介紹了 PCI的基本概念,并從Linux內(nèi)核的角度出發(fā),介紹了 PCI設(shè)備的初始化以及配置。PCI介紹隨著計(jì)算機(jī)應(yīng)用的不斷更新和發(fā)展(比如百兆網(wǎng)卡、視屏流等),計(jì)算機(jī)內(nèi)數(shù)據(jù)傳輸?shù)膸捯笤絹?lái)越高, 傳統(tǒng)內(nèi)部總線帶寬已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足這些應(yīng)用的需要,因此人們推出了PCI總線標(biāo)準(zhǔn)PCI是Peripheral Compo nent In terco nn ect的縮寫,它因?yàn)楦咝阅?、低成本以及良好的擴(kuò)展性而在計(jì)算機(jī)系統(tǒng)中被廣泛使用。上至服務(wù)器,下至嵌入式設(shè)備都能找到它的身影。圖1顯示了一個(gè)標(biāo)準(zhǔn)PCI總線的組織結(jié)構(gòu)

3、圖。圖1.標(biāo)準(zhǔn)PCI總線的組織結(jié)構(gòu)圖從圖中我們可以看出 PCI總線架構(gòu)主要被分成三部分:1. PCI設(shè)備。符合PCI總線標(biāo)準(zhǔn)的設(shè)備就被稱為 PCI設(shè)備,PCI總線架構(gòu)中可以包含多個(gè) PCI設(shè)備。圖 中的Audio、LAN都是一個(gè)PCI設(shè)備。PCI設(shè)備同時(shí)也分為主設(shè)備和目標(biāo)設(shè)備兩種,主設(shè)備是一次訪問(wèn) 操作的發(fā)起者,而目標(biāo)設(shè)備則是被訪問(wèn)者。2. PCI總線。PCI總線在系統(tǒng)中可以有多條,類似于樹狀結(jié)構(gòu)進(jìn)行擴(kuò)展,每條PCI總線都可以連接多個(gè)PCI設(shè)備/橋。上圖中有兩條 PCI總線。3. PCI橋。當(dāng)一條PCI總線的承載量不夠時(shí),可以用新的PCI總線進(jìn)行擴(kuò)展,而 PCI橋則是連接PCI總線之間的紐帶。

4、圖中的 PCI橋有兩個(gè),一個(gè)橋用來(lái)連接處理器、內(nèi)存以及PCI總線,而另外一條則用來(lái)連接另一條PCI總線。PCI總線操作PCI總線操作表示主設(shè)備向目標(biāo)設(shè)備所發(fā)起的操作請(qǐng)求,最多有16種類型。主要類型有:IO方式讀/寫,Memory方式讀/寫, Configuration 方式讀/寫等。PCI配制空間對(duì)于軟件開發(fā)者來(lái)說(shuō),該如何對(duì)PCI設(shè)備進(jìn)行編程呢? PCI總線標(biāo)準(zhǔn)中定義了一套配置空間寄存器用于讀取或者設(shè)置PCI設(shè)備的信息。每個(gè) PCI設(shè)備/橋都有自己的配置空間寄存器。配置空間共有256字節(jié),設(shè)備類型不同,其配置空間的布局也不盡相同。設(shè)備類型的區(qū)分可以通過(guò)配置空間內(nèi) 的Header Type寄存器

5、(OEh)進(jìn)行,該寄存器值為 00h表示當(dāng)前設(shè)備是一個(gè) PCI設(shè)備,01h表示當(dāng)前設(shè)備 是一個(gè)PCI橋。配置空間的前64字節(jié)是配置空間起始段,它對(duì)于每種類型的設(shè)備都是相同的。顯示了PCI設(shè)備的配置空間起始段。圖2. PCI設(shè)備的配置空間起始段r 31lfi1501Dexict IDYwidor IDOOhStatusCommand04hClai? Cod;Rfv sion IDOS!13:S7三幵定:甘Tim?:OChAddress Register 1lOhBa?* Addr 已耳壯衛(wèi)即已214hAddress 栗fgwer 3l$h3as? Addrtss Renier 4ICh3asf

6、Address?2Ch24hCsidtu? CIS PointyJ$hSubsvtrem IDSubsyieir*ndoi ID2ChExpansion R0: Base Addrtss匚 apabitj pQin:er34h畑 口I2込.GritIntirrupr PinInrerrupT Line3Ch圖3顯示了 PCI橋的配置空間起始段圖3. PCI橋的配置空間起始段r 3i16150IDA'endor IDOOh04hSiacuCommail JCodeReiisioa IDro$hBISTHeader TypeL arene v Timer口血:皺SizeroctiBat?

7、Addr?tt R亡工即烈 1LOhr uhLatency TimerSuborduiare 虹 XtunberSecQndaryF Bui NumberP-unary Bi肝 Xumlwrl£h iChI O Lun:10 Bas-f20112-lh2ShPE良:邊他栄 >Ie;uon-?refccajt;e 匚詢0疔 3a=e匕出換討新b叢315? Upper 32 3i:sLimi: Vppr 32 別的r:chI O Limit Upper 16 BibIO E於亡 Upper 1(5 Bits30h34hRe 汎 wdCapabiliiie? PokierHxpano

8、n ROM Base Addres?3$hBridce ControlInternipt PinInter nipt Lin?pCh配置空間寄存器有些是只讀的,有些是可寫的,下面介紹幾個(gè)在編程時(shí)會(huì)用到的寄存器Device ID 和 Ven dor ID 寄存器這兩個(gè)寄存器分別存放了設(shè)備信息和廠商信息(值在 0x0000和OxFFFF之間,但不能取OxFFFF ),因此軟 件開發(fā)者可以通過(guò)讀取這兩個(gè)寄存器的值,并與0xFFFF比較,從而判斷當(dāng)前設(shè)備是否有效。Comma nd 和 Status 寄存器Comma nd寄存器存放了設(shè)備的配置信息,比如是否允許 Memory/IO方式的總線操作、是否為

9、主設(shè)備等。 Status寄存器存放了設(shè)備的狀態(tài)信息,比如中斷狀態(tài)、錯(cuò)誤狀態(tài)等。Header Type 寄存器這個(gè)寄存器前面曾經(jīng)提過(guò),它定義了設(shè)備類型,比如 PCI設(shè)備、PCI橋等。Base Address 寄存器這個(gè)寄存器有三個(gè)作用。1該寄存器存放了 Memory/IO訪問(wèn)空間的起始地址。2該寄存器存放了 Memory/IO訪問(wèn)空間的大小,這個(gè)數(shù)據(jù)可以通過(guò)下面的方式讀出:a. 往寄存器里寫 OxFFFFFFFF ;b. 讀出寄存器的值,并取反;c. 將上一步的值加上1后就是該空間的大小。3. 該寄存器定義了這段地址空間的訪問(wèn)類型(Memory方式還是IO方式)。PCI設(shè)備最多有6個(gè)Base A

10、ddress 寄存器,而 PCI橋最多有2個(gè)Base Address 寄存器。Subord in ate Bus Number,Sec ondary Bus Number 禾口 Primary Bus Number 寄存器這三個(gè)寄存器只在 PCI橋配置空間中存在,因?yàn)?PCI橋會(huì)連接兩條PCI總線,上行的總線被稱為 Primary Bus,下行的總線被稱為 Secondary Bus , Primary Bus Number 和 Secondary Bus Number 寄存器分別存儲(chǔ) 了上行和下行總線的編號(hào),而Subordi nate Bus Number 寄存器則是存儲(chǔ)了當(dāng)前橋所能直接或者

11、間接訪問(wèn)到的總線的最大編號(hào)。PPC對(duì)于PCI的支持通常PPC會(huì)提供一個(gè)(或更多的) PCI控制器來(lái)連接PCI總線,通過(guò)PCI控制器,CPU可以發(fā)起 Con figuration讀寫操作來(lái)訪問(wèn)所連接的所有PCI設(shè)備/橋的配置空間。每個(gè) PCI設(shè)備/橋都會(huì)用(總線號(hào),設(shè)備號(hào),功能號(hào))這一組合來(lái)進(jìn)行編號(hào),因此在PCI控制器中輸入設(shè)備對(duì)應(yīng)的(總線號(hào),設(shè)備號(hào),功能號(hào))就能尋址到具體的PCI設(shè)備/橋。以PPC8548為例,它提供了兩個(gè)寄存器來(lái)實(shí)現(xiàn)Configuration操作,分別是CFG_ADDR和CFG_DATA寄存器,如果想對(duì)某個(gè)設(shè)備發(fā)起讀/寫操作,則首先將該設(shè)備的(總線號(hào),設(shè)備號(hào),功能號(hào))寫入 C

12、FG_ADDR中,這代表尋址一個(gè)具體的PCI設(shè)備,同時(shí)在CFG_ADDR中寫入需要操作的配置空間寄存器的編號(hào),最后從CFG_DATA中讀取/寫入相應(yīng)的數(shù)據(jù)即可。Linux內(nèi)核對(duì)PCI的支持Linux內(nèi)核(2.6版本)在初始化之初就對(duì)所有PCI設(shè)備進(jìn)行了掃描并且配制,具體操作分為下面幾個(gè)步驟。編譯時(shí)的PCI配制如果想要Linux內(nèi)核支持PCI,首先需要對(duì)其配制文件進(jìn)行相應(yīng)的修改,在config文件中需要配置下面的宏參數(shù)。1. Linux提供了 PCI配制全局控制宏參數(shù) CONFIG_PCI,它控制著PCI控制器和設(shè)備是否能夠被配制的流程,因此該宏值需要被設(shè)置成“ Y一2. 對(duì)于某些處理器來(lái)說(shuō),比

13、如PPC85XX、PPC83XX等,它們提供了兩個(gè)或者更多的PCI控制器,因此在 config 文件中專門提供了諸如 CONFIG_MPC85xx_PCI2 、CONFIG_MPC83xx_PCI2 等宏參數(shù),它 們控制著第二個(gè)(或更多的)PCI控制器的配置流程,因此如果需要使用第二個(gè)(或更多的)PCI控制器時(shí),需要將相應(yīng)的宏值設(shè)置成“ Y'在編譯內(nèi)核之前,如果在 config文件中提供了以上宏參數(shù)的設(shè)置,則編譯出來(lái)的內(nèi)核映像提供了對(duì)于PCI支持的功能。PCI相關(guān)數(shù)據(jù)結(jié)構(gòu)Linux提供了三類數(shù)據(jù)結(jié)構(gòu)用以描述PCI控制器、PCI設(shè)備以及PCI總線。PCI控制器PCI控制器用pci_con

14、troller結(jié)構(gòu)來(lái)描述,它有以下幾個(gè)主要的屬性:? index :該屬性標(biāo)志PCI控制器的編號(hào)。? next :該屬性指向下一個(gè) PCI控制器,通過(guò)next屬性,PCI控制器可以形成一個(gè)單向鏈表。? first_busno :該屬性標(biāo)志了連接在該控制器上第一條總線的編號(hào)。? last_busno :該屬性標(biāo)志了連接在該控制器上最后一條總線的編號(hào)。? ops :該屬性標(biāo)志了當(dāng)前 PCI控制器所對(duì)應(yīng)的PCI配制空間讀寫操作函數(shù)。? io_space :該屬性標(biāo)志了當(dāng)前 PCI控制器所支持的10地址空間。? mem_space :該屬性標(biāo)志了當(dāng)前 PCI控制器所支持的Memory地址區(qū)間。? cf

15、g_addr :該屬性標(biāo)志了當(dāng)前 PCI控制器發(fā)起Configuration訪問(wèn)方式時(shí)所需要寫入的地址空間。? cfg_data :該屬性標(biāo)志了當(dāng)前 PCI控制器發(fā)起Configuration訪問(wèn)方式時(shí)所需要讀寫的數(shù)據(jù)空間。? bus :該屬性標(biāo)志了當(dāng)前 PCI控制器所連接的PCI總線,它對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是pci_bus。PCI總線PCI總線用pci_bus結(jié)構(gòu)來(lái)描述,它有以下幾個(gè)主要的屬性:? pare nt :可通過(guò)該屬性索引到上層PCI總線。? self :該屬性標(biāo)志了連接的上行PCI橋(對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是pci_dev )。? children :該屬性標(biāo)志了總線連接的所有PCI子總線鏈表

16、。? devices :該屬性標(biāo)志了總線連接的所有PCI設(shè)備鏈表。? ops :該屬性標(biāo)志了總線上所有PCI設(shè)備的配制空間讀寫操作函數(shù)。? number :該屬性標(biāo)志了當(dāng)前 PCI總線的編號(hào)。? primary :該屬性標(biāo)志了 PCI上行總線編號(hào)。? secondary :該屬性標(biāo)志了 PCI下行總線編號(hào)。? subordinate :該屬性標(biāo)志了能夠訪問(wèn)到的最大總線編號(hào)。? resource :該屬性標(biāo)志了 Memory/IO 地址空間。PCI設(shè)備PCI設(shè)備用pci_dev結(jié)構(gòu)來(lái)描述,它有以下幾個(gè)主要的屬性:? global_list : Linux定義了一個(gè)全局列表來(lái)索引所有的PCI設(shè)備,

17、該屬性標(biāo)志了這個(gè)全局列表的首指針。? bus :該屬性標(biāo)志了當(dāng)前設(shè)備所在的PCI總線(對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是pci_bus )。? devfn :該屬性標(biāo)志了設(shè)備編號(hào)和功能編號(hào)。? ven dor :該屬性標(biāo)志了供應(yīng)商編號(hào)。? device :該屬性標(biāo)志了設(shè)備編號(hào)。? driver :該屬性標(biāo)志了設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)代碼(對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是pci_driver )。? irq :該屬性標(biāo)志了中斷號(hào)。? resource :該屬性標(biāo)志了 Memory/IO 地址區(qū)間。內(nèi)核里的PCI數(shù)據(jù)結(jié)構(gòu)圖當(dāng)Linux內(nèi)核在做PCI初始化工作時(shí),它會(huì)根據(jù)圖4建立一個(gè)由pci_controller、pci_bus和pci_de

18、v三者組成的一個(gè)組織結(jié)構(gòu)圖。根據(jù)這個(gè)結(jié)構(gòu),軟件開發(fā)者可以很方便的通過(guò)_PCI控制器索引到9每個(gè) PCT設(shè)備或者PCI總線。http:/www.ibm.eom/developerworks/c n/linu x/l-cn-pci/i ndex.html2010-1-4淺談Lin ux內(nèi)核開發(fā)之PCI設(shè)備驅(qū)動(dòng)Page 6 of 7Gen erated by Foxit PDF Creator ? Foxit Software For evaluati on only.http:/www.ibm.eom/developerworks/c n/linu x/l-cn-pci/i ndex.html20

19、10-1-4淺談Lin ux內(nèi)核開發(fā)之PCI設(shè)備驅(qū)動(dòng)Page 9 of 7Gen erated by Foxit PDF Creator ? Foxit Software For evaluati on only.圖4.組織結(jié)構(gòu)圖p ci_c ontrollff卩 c uparent cyiiliire 口self dwices bus-unesinext>busbu弓sib'ingsiblingp&.devpci_d 的pcLdevPCI控制器初始化parttit c:iLd:en next self decs bus=Opci_de-vpci_de-| nextnex

20、tsiblingsibling當(dāng)一個(gè)支持PCI的內(nèi)核映像開始運(yùn)行時(shí),它會(huì)在系統(tǒng)初始化時(shí)對(duì)PPC85XX 為例)。PCI進(jìn)行配置。函數(shù)調(diào)用鏈如下所示(以圖5.函數(shù)調(diào)用鏈內(nèi)核從start_kernel()函數(shù)處開始進(jìn)行系統(tǒng)初始化,一直執(zhí)行到mpc85xx_setup_hose()函數(shù)處便是配制 PCI控制器以及連接在該控制器上所有設(shè)備的過(guò)程。一 一所有這些函數(shù)的定義處都加上了 _init的符號(hào)類型,由 _init修飾的函數(shù)表明在鏈接最終的內(nèi)核映像時(shí),這些 函數(shù)將被放在一個(gè)特殊的初始化代碼段中(.init.text,可以在鏈接文件 vmlinux.lds.S中找到相關(guān)的段描述), 這個(gè)初始化代碼段會(huì)

21、隨著內(nèi)核初始化完成而被釋放。在這一步驟中,內(nèi)核會(huì)對(duì)它所支持的所有PCI控制器進(jìn)行初始化工作,每個(gè)PCI控制器都對(duì)應(yīng)一個(gè)pci_controller屬性的變量,初始化工作會(huì)在這些變量中設(shè)置Memory/IO訪問(wèn)空間的起始地址以及結(jié)束地址、設(shè)置當(dāng)前PCI控制器所連接的第一條和最后一條PCI總線編號(hào)等等。PCI自動(dòng)掃描系統(tǒng)如何知道當(dāng)前連接了多少PCI設(shè)備?有多少根PCI總線?每個(gè)PCI設(shè)備的訪問(wèn)空間如何配置?等等。這些都得靠PCI自動(dòng)掃描來(lái)完成。PCI自動(dòng)掃描主要做下面的工作:1. 掃描PCI總線,識(shí)別PCI總線上的所有設(shè)備。2. 對(duì)于連接在PCI總線上的所有PCI橋進(jìn)行總線編號(hào)。3. 對(duì)于連接在P

22、CI總線上的所有PCI設(shè)備和PCI橋進(jìn)行Memory/IO 訪問(wèn)空間的配置。這部分代碼在 pciauto_bus_scan() 函數(shù)中(位于 arch/ppc/syslib/pci_auto.c 中)。識(shí)別PCI總線上的設(shè)備PCI總線掃描的原理是從總線 0掃描到總線255,對(duì)于每條總線,系統(tǒng)都會(huì)掃描所有(總線號(hào),設(shè)備號(hào),功 能號(hào)),通過(guò) Con figuration方式讀出每個(gè)設(shè)備的 Device ID和Vendor ID寄存器,如果這兩個(gè)寄存器的值是 個(gè)有效值(非OxFFFF ),則說(shuō)明當(dāng)前設(shè)備是個(gè)有效的PCI設(shè)備/橋。進(jìn)而再讀取該設(shè)備的 Header Type寄存器,如果該寄存器為1,則表

23、示當(dāng)前設(shè)備是 PCI橋,否則是PCI設(shè)備。對(duì)所有PCI總線進(jìn)行編號(hào)PCI橋如何知道它所連接的 PCI總線情況呢?這就需要對(duì)PCI橋進(jìn)行總線編號(hào)。前面介紹過(guò)PCI橋提供了Primary Bus Number 、Sec on dary Bus Number 和 Subordi nate Bus Number 三個(gè)寄存器用于標(biāo)志該橋所連接 的PCI總線,下面通過(guò)一個(gè)示例來(lái)說(shuō)明內(nèi)核對(duì)于PCI總線是如何進(jìn)行編號(hào)的。圖6.示例1. 系統(tǒng)運(yùn)行初始,Bus A為0,通過(guò)上面的PCI總線掃描得到連接在 Bus A上的PCI橋(即圖中的Bridge 1 )。2. 下面開始設(shè)置Bridge 1的Bus寄存器。將Pr

24、imary Bus Number 寄存器設(shè)置成Bus A的編號(hào),即0。將Secondary Bus Number 寄存器設(shè)置成 Bus B的編號(hào),它的值等于(Bus A + 1 ),也就是1。由于 暫時(shí)無(wú)法知道該橋所能訪問(wèn)的所有下行總線數(shù)目,Subordinate Bus Number 寄存器暫時(shí)設(shè)置成 OxFF。3. 當(dāng)掃描完所有Bus A上所有(設(shè)備號(hào),功能號(hào))后,開始掃描Bus B,Bus B的編號(hào)在掃描完Bus A后已經(jīng)得到,為1。Bus B的掃描方法同步驟(1),先掃描出Bus B上的PCI橋(即圖中的Bridge 2),然后配置 Primary Bus Number 寄存器為 1,

25、 Secondary Bus Number 寄存器為 2,而 Subordinate Bus Number 寄存器依然為 OxFF。4. Bus B掃描完后得到Bus C的編號(hào),為2。下面開始掃描 Bus C,因?yàn)锽us C上沒(méi)有PCI橋,于是在 掃描完其它(設(shè)備號(hào),功能號(hào))后, Bus C的掃描結(jié)束。5. 由于Bridge 2所能訪問(wèn)到的最大 Bus編號(hào)是2,因此重新設(shè)置 Bridge 2的Subordinate Bus Number 寄存器為2。6. 由于Bridge 1所能訪問(wèn)到的最大 Bus編號(hào)也是2,因此重新設(shè)置 Bridge 1的Subordinate Bus Number 寄存器

26、為2。7. 總線編號(hào)結(jié)束。配置訪問(wèn)空間當(dāng)系統(tǒng)需要訪問(wèn) PCI設(shè)備時(shí),它需要產(chǎn)生 Configuration、Memory或者IO的讀寫操作,對(duì)于 Memory/IO 的 訪問(wèn)方式來(lái)說(shuō),它們需要定義一個(gè)地址范圍,落在這個(gè)地址范圍的操作會(huì)被認(rèn)為是相應(yīng)的Memory/IO的讀寫操作。通常PCI設(shè)備提供了最多6組Base Address寄存器,在PCI總線掃描時(shí),每當(dāng)掃描出一個(gè)可用的PCI設(shè)備后,會(huì)對(duì)該設(shè)備的 Base Address寄存器進(jìn)行Memory/IO訪問(wèn)空間的配置。而對(duì)于PCI橋來(lái)說(shuō),它只提供了 2組Base Address寄存器,當(dāng)PCI總線掃描出一個(gè) PCI橋后,也會(huì)對(duì)該橋 的Base

27、 Address寄存器進(jìn)行Memory/IO訪問(wèn)空間的配置。需要注意的是,在構(gòu)建系統(tǒng)之初,需要明確當(dāng)前系統(tǒng)的地址范圍,戈y分出特定的物理地址作為PCI Memory或者PCI IO空間,在給PCI設(shè)備/橋進(jìn)行訪問(wèn)空間配置時(shí),就是取事先約定的地址空間中的某段地址進(jìn)行配 置,所有設(shè)備/橋的訪問(wèn)地址不能沖突。定義系統(tǒng)的Memory/IO 訪問(wèn)空間是在 mpc85xx_setup_hose() 函數(shù)中提供的(位于 arch/ppc/syslib/ppc85xx_setup.c 中)。PCI設(shè)備和總線初始化這一操作在pcibiosnit()函數(shù)中進(jìn)行(位于 arch/ppc/kernel/pci.c 中)。它會(huì)在前面操作結(jié)束后,對(duì)PCI總線和PCI設(shè)備分別分配pci_bus和pci_dev類型的節(jié)點(diǎn),并建立如所示的組織結(jié)構(gòu)關(guān)系。Lin ux的PCI設(shè)備初始化Linux會(huì)將PCI的相關(guān)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論