




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
精品文檔-下載后可編輯Linux操作系統(tǒng)下的PCI驅(qū)動(dòng)開(kāi)發(fā)-基礎(chǔ)電子摘要:以PCI9054為例,介紹了在Linux操作系統(tǒng)下,PCI的驅(qū)動(dòng)過(guò)程,同時(shí)針對(duì)Linux內(nèi)核版本2.4,介紹了PCI驅(qū)動(dòng)的靜態(tài)加載方法,通過(guò)硬件對(duì)該P(yáng)CI驅(qū)動(dòng)程序進(jìn)行了簡(jiǎn)單測(cè)試。
0引言
PCI總線是一種成熟的計(jì)算機(jī)標(biāo)準(zhǔn)總線,而Linux操作系統(tǒng)則是一種源代碼公開(kāi)的操作系統(tǒng)。Linux構(gòu)架完全沿襲了UNIX的系統(tǒng)架構(gòu),它不但擁有UNIX的全部功能,而且具有UNIX穩(wěn)定、可靠、安全的優(yōu)點(diǎn),尤其是Linux加入GNU并遵循公共版權(quán)許可證(GPL)之后,幾乎所有的GNU軟件都可以移植到Linux,從而完善和提高了Linux系統(tǒng)的使用性,并逐步成為通信、工業(yè)控制、消費(fèi)電子等領(lǐng)域的主流操作系統(tǒng)。
本文主要對(duì)Linux環(huán)境下開(kāi)發(fā)PCI9054芯片驅(qū)動(dòng)的具體方法進(jìn)行描述,并給出了如何將驅(qū)動(dòng)程序編譯進(jìn)內(nèi)核,以使驅(qū)動(dòng)模塊靜態(tài)加載的方法。
1PCI9054簡(jiǎn)介
PCI總線協(xié)議一般需要繁瑣的邏輯驗(yàn)證和時(shí)序分析工作,而且開(kāi)發(fā)周期較長(zhǎng),因此,更多的做法是采用通用PCI接口芯片,這樣,只需要控制接口芯片的幾根控制線,就可以完成PCI總線的數(shù)據(jù)傳輸,故可大大減少開(kāi)發(fā)時(shí)間和成本。
PCI9054是由美國(guó)PLX公司生產(chǎn)的PCI橋接芯片,該芯片采用先進(jìn)的PLX流水線結(jié)構(gòu)技術(shù),符合PCI本地總線規(guī)范2.2版,并配有可選的串行EEPROM接口。芯片的本地總線時(shí)鐘可與PCI時(shí)鐘異步,其內(nèi)部有6種可編程FIFO,可以實(shí)現(xiàn)零等待突發(fā)傳輸及本地總線與PCI總線的異步操作,同時(shí)支持主模式、從模式、DMA傳輸模式,可廣泛用于嵌入式系統(tǒng)中。
PCI9054的地址資源是由其基址寄存器來(lái)設(shè)置的,PCI9054的配置空間有六個(gè)基址寄存器:BARO~BAR5,其中BARO映射到配置空間的基地址,BARl為映射到I/O空間的基地址,BAR2~BAR5可以定義為映射到內(nèi)存地址空間的基地址。配置空間的內(nèi)容可被Linux中的PCI初始化代碼使用,I/O空間和內(nèi)存地址空間可提供給設(shè)備驅(qū)動(dòng)程序使用。
2Linux下的PCI驅(qū)動(dòng)程序
Linux將所有外部設(shè)備看成是一類特殊文件,即“設(shè)備文件”,它可分為兩大類:字符設(shè)備和塊設(shè)備。字符設(shè)備是必須以串行順序依次進(jìn)行訪問(wèn)的設(shè)備,如觸摸屏、磁帶驅(qū)動(dòng)器、鼠標(biāo)等。塊設(shè)備則是利用一塊系統(tǒng)內(nèi)存作為緩沖區(qū),以塊為單位進(jìn)行操作,如硬盤、軟驅(qū)等。字符設(shè)備不經(jīng)過(guò)系統(tǒng)的快速緩沖,而塊設(shè)備則需經(jīng)過(guò)系統(tǒng)的快速緩沖。此外,Linux下還存在一類外設(shè),即“網(wǎng)絡(luò)設(shè)備”,網(wǎng)絡(luò)設(shè)備主要針對(duì)數(shù)據(jù)包的接收和發(fā)送而設(shè)計(jì),它并不對(duì)應(yīng)于文件系統(tǒng)的節(jié)點(diǎn)。PCI驅(qū)動(dòng)通常可以看做字符設(shè)備的驅(qū)動(dòng)來(lái)設(shè)計(jì)。
Linux的操作過(guò)程分為兩個(gè)步驟:首先用PCI驅(qū)動(dòng)將內(nèi)核與設(shè)備掛接起來(lái);緊接著通過(guò)應(yīng)用程序來(lái)根據(jù)設(shè)備文件所屬類型并通過(guò)驅(qū)動(dòng)提供的接口函數(shù)來(lái)操作設(shè)備。這使得PCI驅(qū)動(dòng)至少應(yīng)該包含兩部分內(nèi)容:一是PCI設(shè)備驅(qū)動(dòng),二是具體設(shè)備本身的驅(qū)動(dòng)。
Linux系統(tǒng)啟動(dòng)后會(huì)自動(dòng)檢測(cè)PCI設(shè)備信息,并分別記錄在pci_dev結(jié)構(gòu)體中形成一個(gè)PCI設(shè)備鏈表pci_devices。這個(gè)結(jié)構(gòu)體記錄了PCI設(shè)備幾乎所有的硬件信息,包括廠商ID、設(shè)備ID、各種資源等,PCI驅(qū)動(dòng)就是根據(jù)廠商ID和設(shè)備ID來(lái)連接設(shè)備并加載驅(qū)動(dòng)的。
驅(qū)動(dòng)加載以后,為了操作設(shè)備文件,Linux會(huì)在include/linux/fs.h中提供一個(gè)數(shù)據(jù)結(jié)構(gòu)file_operations,該數(shù)據(jù)結(jié)構(gòu)可向Linux文件系統(tǒng)注冊(cè)一組文件操作,以定義設(shè)備提供的諸如open、close、read、write等操作,內(nèi)核則將通過(guò)file_operations結(jié)構(gòu)訪問(wèn)驅(qū)動(dòng)程序所提供的函數(shù)。
3PCI9054驅(qū)動(dòng)的實(shí)現(xiàn)
Linux下設(shè)備驅(qū)動(dòng)程序的編寫(xiě)應(yīng)遵循一定的框架結(jié)構(gòu)進(jìn)行,大致可分為模塊的加載與卸載、設(shè)備的初始化、設(shè)備的打開(kāi)及操作、中斷處理和設(shè)備的釋放等幾部分。
3.1模塊的加載與初始化
當(dāng)Linux內(nèi)核啟動(dòng)時(shí),會(huì)完成對(duì)所有PCI設(shè)備的掃描、登錄和資源分配等初始化操作,并建立起所有PCI設(shè)備的拓?fù)浣Y(jié)構(gòu),此后,在加載PCI驅(qū)動(dòng)程序時(shí),就會(huì)通過(guò)加載驅(qū)動(dòng)程序模塊入口跳轉(zhuǎn)到設(shè)備初始化模塊。Linux2.4內(nèi)核與Linux2.6內(nèi)核的初始化方式是不同的,在Linux-2.4內(nèi)核中,初始化程序首先會(huì)使用pci_present函數(shù)來(lái)判斷PCI總線是否被內(nèi)核支持,然后使用register_chrdev函數(shù)來(lái)注冊(cè)設(shè)備,這樣就可以輪詢PCI總線上的設(shè)備,并利用pci_find_device函數(shù)檢查設(shè)備是否插在總線插槽上。如果在,則保存其所占用的插槽位置信息,并返回pci_dev結(jié)構(gòu),然后將pci_dev結(jié)構(gòu)加入到設(shè)備鏈表中,直到輪詢完畢。圖1所示是Linux下PCI驅(qū)動(dòng)程序的流程圖。
這樣做的目的是根據(jù)編譯選項(xiàng)$(CON-FIG_PLX9054)來(lái)決定是否要添加設(shè)備驅(qū)動(dòng)。
之后,再在…\linux-2.4.x\drivers\char\Config.in中添加語(yǔ)句
tristate’PLX9054Support’CONFIG_PLX9054,這樣就可以在運(yùn)行menuconfig時(shí)產(chǎn)生與設(shè)備對(duì)應(yīng)的編譯選項(xiàng),圖2所示是其編譯選項(xiàng)界面圖。圖中,在前面的尖括號(hào)中點(diǎn)Y表示靜態(tài)加載,點(diǎn)M表示作為模塊動(dòng)態(tài)加載。
,運(yùn)行makemenuconfig,剪切內(nèi)核,并選中需要的模塊所對(duì)應(yīng)的編譯選項(xiàng),編譯內(nèi)核。
5驅(qū)動(dòng)程序的測(cè)試
由于所編寫(xiě)的驅(qū)動(dòng)程序是在PLX驅(qū)動(dòng)的基礎(chǔ)上得來(lái)的,因此,在這里,為了方便測(cè)試起見(jiàn),也應(yīng)使用PLX公司的SDK包中的測(cè)試程序來(lái)
查看PCI9054的配置情況,圖3所示為五個(gè)基址寄存器的映射情況。圖4所示為公共緩沖區(qū)的映射情況示意圖。
6結(jié)束語(yǔ)
本文首先介紹了在Linux下開(kāi)發(fā)PCI驅(qū)動(dòng)的方法,然后介紹了如何將驅(qū)動(dòng)靜態(tài)編譯到內(nèi)核,這種方法非常適用于
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CWAN 0016-2020鐵路車輛用鐵素體不銹鋼及耐大氣腐蝕鋼焊接工藝評(píng)定規(guī)范
- T/CSRME 027-2022鹽穴儲(chǔ)氣庫(kù)對(duì)接連通井造腔技術(shù)指南
- T/CSBME 079-2024肺癌PET/CT正電子藥物臨床使用質(zhì)量驗(yàn)收要求
- T/CSBME 061-2022乳腺X射線高壓發(fā)生器
- T/CRIA 26003-2023鋼簾線單位產(chǎn)品能源消耗限額
- T/CNFMA B030-2023戶外林業(yè)機(jī)械以鋰離子電池為動(dòng)力源的手持式長(zhǎng)桿修枝剪刀
- T/CMMA 6-2019鎂質(zhì)膠凝材料及制品術(shù)語(yǔ)
- T/CITS 0003-2022標(biāo)準(zhǔn)“領(lǐng)跑者”評(píng)價(jià)要求電冰箱檢驗(yàn)檢測(cè)服務(wù)
- T/CIMA 0027-2021交流采樣測(cè)量裝置檢驗(yàn)規(guī)范
- T/CIIA 032.2-2022風(fēng)電企業(yè)綠色供應(yīng)鏈信息管理平臺(tái)第2部分:能源數(shù)據(jù)采集要求
- 網(wǎng)絡(luò)優(yōu)化低PHR高占比提升優(yōu)化處理案例總結(jié)
- 《公路隧道施工技術(shù)規(guī)范》(3660-2020)【可編輯】
- 2023-2024學(xué)年安徽省合肥市七年級(jí)下學(xué)期期末語(yǔ)文質(zhì)量檢測(cè)試題(含答案)
- 華為認(rèn)證安全方向HCIP-Security H12-725 V4.0更新題庫(kù)匯總(含答案)
- 中國(guó)城市區(qū)域劃分表(超實(shí)用)
- 2022分布式并網(wǎng)光伏調(diào)試方案
- 卷?yè)P(yáng)機(jī)調(diào)速控制系統(tǒng)設(shè)計(jì)
- 研學(xué)旅行PPT模板
- 精神科常見(jiàn)并發(fā)癥發(fā)生危險(xiǎn)及防范課件
- 精益管理之精益生產(chǎn)
- 架空索道安裝施工工藝標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論