欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Linux操作系統下的PCI驅動(dòng)開(kāi)發(fā)

  O 引言

  PCI總線(xiàn)是一種成熟的計算機標準總線(xiàn),而Linux操作系統則是一種源代碼公開(kāi)的操作系統。Linux構架完全沿襲了UNIX的系統架構,它不但擁有UNIX的全部功能,而且具有UNIX穩定、可靠、安全的優(yōu)點(diǎn),尤其是Linux加入GNU并遵循公共版權許可證(GPL)之后,幾乎所有的GNU軟件都可以移植到Linux,從而完善和提高了Linux系統的使用性,并逐步成為通信、工業(yè)控制、消費電子等領(lǐng)域的主流操作系統。

  本文主要對Linux環(huán)境下開(kāi)發(fā)PCI9054芯片驅動(dòng)的具體方法進(jìn)行描述,并給出了如何將驅動(dòng)程序編譯進(jìn)內核,以使驅動(dòng)模塊靜態(tài)加載的方法。

  1 PCI9054簡(jiǎn)介

  PCI總線(xiàn)協(xié)議一般需要繁瑣的邏輯驗證和時(shí)序分析工作,而且開(kāi)發(fā)周期較長(cháng),因此,更多的做法是采用通用PCI接口芯片,這樣,只需要控制接口芯片的幾根控制線(xiàn),就可以完成PCI總線(xiàn)的數據傳輸,故可大大減少開(kāi)發(fā)時(shí)間和成本。

  PCI9054是由美國PLX公司生產(chǎn)的PCI橋接芯片,該芯片采用先進(jìn)的PLX流水線(xiàn)結構技術(shù),符合PCI本地總線(xiàn)規范2.2版,并配有可選的串行EEPROM接口。芯片的本地總線(xiàn)時(shí)鐘可與PCI時(shí)鐘異步,其內部有6種可編程FIFO,可以實(shí)現零等待突發(fā)傳輸及本地總線(xiàn)與PCI總線(xiàn)的異步操作,同時(shí)支持主模式、從模式、DMA傳輸模式,可廣泛用于嵌入式系統中。

  PCI9054的地址資源是由其基址寄存器來(lái)設置的,PCI9054的配置空間有六個(gè)基址寄存器:BARO~BAR5,其中BARO映射到配置空間的基地址,BARl為映射到I/O空間的基地址,BAR2~BAR5可以定義為映射到內存地址空間的基地址。配置空間的內容可被Linux核心中的PCI初始化代碼使用,I/O空間和內存地址空間可提供給設備驅動(dòng)程序使用。

  2 Linux下的PCI驅動(dòng)程序

  Linux將所有外部設備看成是一類(lèi)特殊文件,即“設備文件”,它可分為兩大類(lèi):字符設備和塊設備。字符設備是必須以串行順序依次進(jìn)行訪(fǎng)問(wèn)的設備,如觸摸屏、磁帶驅動(dòng)器、鼠標等。塊設備則是利用一塊系統內存作為緩沖區,以塊為單位進(jìn)行操作,如硬盤(pán)、軟驅等。字符設備不經(jīng)過(guò)系統的快速緩沖,而塊設備則需經(jīng)過(guò)系統的快速緩沖。此外,Linux下還存在一類(lèi)外設,即“網(wǎng)絡(luò )設備”,網(wǎng)絡(luò )設備主要針對數據包的接收和發(fā)送而設計,它并不對應于文件系統的節點(diǎn)。PCI驅動(dòng)通??梢钥醋鲎址O備的驅動(dòng)來(lái)設計。

  Linux的操作過(guò)程分為兩個(gè)步驟:首先用PCI驅動(dòng)將內核與設備掛接起來(lái);緊接著(zhù)通過(guò)應用程序來(lái)根據設備文件所屬類(lèi)型并通過(guò)驅動(dòng)提供的接口函數來(lái)操作設備。這使得PCI驅動(dòng)至少應該包含兩部分內容:一是PCI設備驅動(dòng),二是具體設備本身的驅動(dòng)。

  Linux系統啟動(dòng)后會(huì )自動(dòng)檢測PCI設備信息,并分別記錄在pci_dev結構體中形成一個(gè)PCI設備鏈表pci_devices。這個(gè)結構體記錄了PCI設備幾乎所有的硬件信息,包括廠(chǎng)商ID、設備ID、各種資源等,PCI驅動(dòng)就是根據廠(chǎng)商ID和設備ID來(lái)連接設備并加載驅動(dòng)的。

  驅動(dòng)加載以后,為了操作設備文件,Linux會(huì )在include/linux/fs.h中提供一個(gè)數據結構file_operaTIons,該數據結構可向Linux文件系統注冊一組文件操作,以定義設備提供的諸如open、close、read、write等操作,內核則將通過(guò)file_operations結構訪(fǎng)問(wèn)驅動(dòng)程序所提供的函數。

  3 PCI9054驅動(dòng)的實(shí)現

  Linux下設備驅動(dòng)程序的編寫(xiě)應遵循一定的框架結構進(jìn)行,大致可分為模塊的加載與卸載、設備的初始化、設備的打開(kāi)及操作、中斷處理和設備的釋放等幾部分。

  3.1 模塊的加載與初始化

  當Linux內核啟動(dòng)時(shí),會(huì )完成對所有PCI設備的掃描、登錄和資源分配等初始化操作,并建立起所有PCI設備的拓撲結構,此后,在加載PCI驅動(dòng)程序時(shí),就會(huì )通過(guò)加載驅動(dòng)程序模塊入口跳轉到設備初始化模塊。Linux2.4內核與Linux2.6內核的初始化方式是不同的,在Linux-2.4內核中,初始化程序首先會(huì )使用pci_present函數來(lái)判斷PCI總線(xiàn)是否被內核支持,然后使用register_chrdev函數來(lái)注冊設備,這樣就可以輪詢(xún)PCI總線(xiàn)上的設備,并利用pci_find_device函數檢查設備是否插在總線(xiàn)插槽上。如果在,則保存其所占用的插槽位置信息,并返回pci_dev結構,然后將pci_dev結構加入到設備鏈表中,直到輪詢(xún)完畢。圖1所示是Linux下PCI驅動(dòng)程序的流程圖。

  3.2 設備的打開(kāi)及操作

  通過(guò)上述步驟,系統內核就可以發(fā)現并打開(kāi)設備了。設備打開(kāi)模塊中主要完成檢查讀寫(xiě)模式以及申請對設備的控制權等工作。同時(shí)可分配并填private_data數據結構、申請PCI設備I/O資源的占用、申請中斷、注冊中斷處理程序。

  Linux是以操作文件的方式來(lái)操作設備的,也就是通過(guò)系統定義的file_operation結構體向Linux文件系統注冊一些操作設備的函數。其file_operation結構體的定義如下:

  當應用程序對設備文件進(jìn)行諸如open、close、read、write等操作時(shí),Linux內核將通過(guò)file_operation結構訪(fǎng)問(wèn)驅動(dòng)程序提供的函數。

  簡(jiǎn)單的讀寫(xiě)任務(wù)直接用read、write函數就可以完成,而復雜的控制則需要使用ioctl函數。ioctl函數是設備驅動(dòng)程序中對設備的I/O通道進(jìn)行管理的函數,可以對設備的一些特性進(jìn)行控制。因此,為實(shí)現對PCI設備各種I/O資源的訪(fǎng)問(wèn)和實(shí)現不同的傳輸方式,通常都需要使用ioc-tl函數,驅動(dòng)程序的ioctl控制命令差不多完全是用一個(gè)switch語(yǔ)句來(lái)實(shí)現的,可實(shí)現初始化信息的初始化控制、讀寫(xiě)配置空間、讀寫(xiě)I/O端口地址空間、讀寫(xiě)I/O內存空間、DMA傳輸等多種控制操作。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
【原創(chuàng )】Linux PCI驅動(dòng)框架分析(二)
【原創(chuàng )】Linux虛擬化KVM-Qemu分析(十)之virtio驅動(dòng)
Android系統下CAN總線(xiàn)驅動(dòng)程序的設計與實(shí)現
淺談Linux PCI設備驅動(dòng)(一)
Linux內核中I2C總線(xiàn)及設備長(cháng)啥樣?
網(wǎng)卡驅動(dòng)注冊到PCI總線(xiàn)這一過(guò)程的分析
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久