windows驅動開發-PCI討論(二)

認識PCI設備,還是要從配置空間說起,當PCI在ACPI和PCI復合體上電和枚舉完成后,PCI根復合體會從PCI設備讀出PCI設備的配置空間,許多信息(例如寄存器、內存空間、中斷信息等等)都是是從配置空間獲取的,所以接下來會詳細講解PCI配置空間。

PCI配置空間的大小是256個字節(0x00~0xFF),而PCIe的配置空間擴大到了0x00~0xFFF;一般來說配置空間會像下面這樣分區:

接下來盡可能詳細的解釋這部分配置:

type 0 Header

配置空間的截圖如下:

這部分需要注意的是寄存器,status寄存器、command寄存器、BIST寄存器、Base Address Register0~5、ROM寄存器、INT寄存器、PMCSR寄存器,其它只讀位的寄存器暫時不討論。

status寄存器:

狀態寄存器用于記錄PCI總線相關事件的狀態信息:

command寄存器:

命令寄存器提供對設備生成和響應PCI周期的能力的粗略控制。當0被寫入該寄存器時,除了配置訪問之外的所有訪問,設備都從PCI總線上邏輯斷開。所有設備都需要支持此基本功能級別。根據設備的功能,可以實現也可以不實現命令寄存器中的各個位:

BIST寄存器:

此可選寄存器用于BIST的控制和狀態。不支持BIST的設備必須始終返回值0(即,將其視為保留寄存器)。調用BIST的設備不得妨礙PCI總線的正常操作。?

Base Address Register0~5:

BAR寄存器比較特殊,它可能有多種形態:

和其他寄存器不一樣,這個寄存器反而不建議去修改,雖然這個寄存器是可以讀寫的,但是往往只有系統知道如何正確的初始化,并且對于驅動來說,直到怎么使用這個寄存器比如何初始化它更重要。

一個經典的PCIe案例中,寄存器被分為三類,64位地址空間需要6個寄存器才能完全映射,如果仔細觀察,就會發現寄存器和資源幾乎一致:

第一個稱之為基礎寄存器空間,它往往用于初始化對應的PCI設備中的子系統以及燒錄系統等特殊行為,在任何時候它都是可用的,一般它會被映射到I/O空間內;

第二個稱之為設備寄存器空間,往往用于具體的PCIe的設備的功能設置,這部分可能大于4KB但是小于1MB;一般大小為4KB的倍數(這并不意外,低于4KB也會被設置為4KB的寄存器空間,因為內存頁面的設置是以頁面為單位的,寄存器設置也是如此),不過這部分需要總線驅動映射之后才可以用,在PCI設備中,一般會有一個嵌入式系統,這個系統初始化之前,是沒辦法映射設備寄存器和功能寄存器空間。

第三個也是功能寄存器空間,這里面可以映射的數量級更多一些;也是需要設備初始化之后才可以使用的。

ROM寄存器:

該寄存器被定義為處理該擴展ROM的基地址和大小信息。PCI設備可以帶一個擴展ROM,通過執行ROM中存放的代碼來完成與設備有關的初始化,同時也有可能完成系統的引導功能。

??

INT LINE寄存器


中斷線路寄存器用于傳輸中斷線路路由信息。寄存器必須由任何使用中斷引腳的設備或設備功能來實現。POST軟件將在初始化和配置系統時將路由信息寫入該寄存器。
該寄存器中的值告訴設備的中斷引腳連接到系統中斷控制器的哪個輸入。設備本身不使用該值,而是由設備驅動程序和操作系統使用。設備驅動程序和操作系統可以使用這些信息來確定優先級和矢量信息。此寄存器中的值是特定于系統體系結構的。

PMCSR寄存器

此16位寄存器用于管理PCI功能的電源管理狀態以及啟用/監視PME:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17782.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17782.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17782.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

動手學操作系統(三、通過IO接口直接控制顯卡)

動手學操作系統(三、通過IO接口直接控制顯卡) 在之前的學習內容中,我們成功編寫了MBR主引導記錄,在終端上進行了打印顯示,在這一節我們使用MBR通過IO接口來直接控制顯卡輸出字符。 文章目錄 動手學操作系統&#xff0…

PostgreSQL Windows 數據庫主從模式 熱同步

1.操作主服務器 1.1修改pg_hba.conf // 這邊就設置所有用戶,所有ip都可以交互 host replication all 0.0.0.0/0 md52.2 創建流復制用戶 // 創建流復制用戶replicator CREATE USER replica REPLICATION LOGIN PASSWORD replica…

邏輯回歸(頭歌)

第1關:邏輯回歸算法大體思想 #encodingutf8import numpy as np#sigmoid函數 def sigmoid(t):#輸入:負無窮到正無窮的實數#輸出:轉換后的概率值#********** Begin **********#result 1.0 / (1 np.exp(-t))#********** End **********#retur…

43、Flink 的 Window Join 詳解

1.Window Join a)概述 Window join 作用在兩個流中有相同 key 且處于相同窗口的元素上,窗口可以通過 window assigner 定義,并且兩個流中的元素都會被用于計算窗口的結果。 兩個流中的元素在組合之后,會被傳遞給用戶定義的 Joi…

外匯天眼:野村證券和Laser Digital與GMO互聯網集團合作發行日元和美元穩定幣

野村控股和Laser Digital將與GMO互聯網集團合作,在日本探索發行日元和美元穩定幣。GMO互聯網集團的美國子公司GMO-Z.com Trust Company, Inc. 在紐約州金融服務部的監管框架下,在以太坊、恒星幣和Solana等主要區塊鏈上發行穩定幣。GMO-Z.com Trust Compa…

MySQL增刪查改進階

數據庫約束表的關系增刪查改 目錄 一.數據庫約束類型 NOT NULL約束類型 UNIQUE 唯一約束 DEFAULT 默認值約束 PRIMARY KEY:主鍵約束 FOREIGN KEY :W外鍵約束 二,查詢 count()兩種用法 sum,avg,max…

Vue3_創建項目

目錄 一、創建vue項目 1.下載vue 2.進入剛才創建的項目 3.安裝依賴 4.運行項目 ?5.打包項目放入生產環境 二、vue項目組成 1.項目文件結構 2.項目重要文件 Vue (發音為 /vju?/,類似 view) 是一款用于構建用戶界面的 JavaScript 框架。它基于標準 HTML、C…

Go語言中實現RSA加解密、簽名驗證算法

隨著互聯網的高速發展,人們對安全的要求也越來越高。密碼學中兩大經典算法,一個是對稱加解密,另一個是非對稱加解密,這里就來分享一下非對稱加密算法的代表:RSA加解密。 在Go語言中實現RSA加解密還是比較簡單的&#…

【安全產品】基于HFish的MySQL蜜罐溯源實驗記錄

MySQL蜜罐對攻擊者機器任意文件讀取 用HFish在3306端口部署MySQL蜜罐 配置讀取文件路徑 攻擊者的mysql客戶端版本為5.7(要求低于8.0) 之后用命令行直連 mysql -h 124.222.136.33 -P 3306 -u root -p 可以看到成功連上蜜罐的3306服務,但進行查詢后會直接lost con…

ai機器人電銷資源有哪些?真的能幫到我們提高效率嗎ai智能語音機器人部署

隨著互聯網科技的發展,各種各樣的科技產物都應用于電銷企業,ai機器人電銷就是其中一個。那么ai機器人電銷可靠嗎?ai機器人電銷資源有哪些?我們一起來看看。 AI機器人在電銷資源方面有以下一些用途和功能: 自動識別潛在…

for循環綁定id,更新html頁面的文字內容

需求&#xff1a;將方法中內容對齊 實現方式 給for循環中每個方法添加一個動態的id在DOM結果渲染完后&#xff0c;更新頁面數據&#xff0c;否則會報錯&#xff0c;找不到對應節點或對應節點為空 <view v-for"(item, index) in itemList" :key"index"…

OWASP十大API漏洞解析:如何抵御Bot攻擊?

新型數字經濟中&#xff0c;API是物聯網設備、Web和移動應用以及業務合作伙伴流程的入口點。然而&#xff0c;API也是犯罪分子的前門&#xff0c;許多人依靠Bot來發動攻擊。對于安全團隊來說&#xff0c;保護API并緩解Bot攻擊至關重要。那么Bot在API攻擊中處于怎樣的地位&#…

香橙派Kunpeng Pro測評

目錄 香橙派Kunpeng Pro開發板試用體驗 觀察理解與適用場景 體驗步驟 試用感受

【ARM+Codesys案例】T3/RK3568/樹莓派+Codesys枕式包裝機運動控制器

枕式包裝機是一種包裝能力非常強&#xff0c;且能適合多種規格用于食品和非食品包裝的連續式包裝機。它不但能用于無商標包裝材料的包裝&#xff0c;而且能夠使用預先印有商標圖案的卷筒材料進行高速包裝。同時&#xff0c;具有穩定性高、生產效率高&#xff0c;適合連續包裝、…

C語言 數組—— 一維數組下標越界問題分析

目錄 數組元素的訪問 一維數組元素的越界訪問 二維數組元素的越界訪問 小結 數組元素的訪問 訪問數組元素時&#xff0c; 下標越界 是大忌&#xff01; ? 編譯器通常不檢查下標越界&#xff0c;導致程序運行時錯誤 ? 下標越界&#xff0c;將訪問數組以外的空間 ? …

pyqt窗體水印

pyqt窗體水印 介紹效果代碼 介紹 給窗體加上水印 效果 代碼 import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtGui import QPainter, QColor, QFont,QPen from PyQt5.QtCore import Qtclass WatermarkedWindow(QMainWindow):def __init__(se…

鴻蒙4.2小版本推出,鴻蒙5.0已經不遠了

上個月&#xff0c;市場上迎來了華為鴻蒙系統4字開頭的小升級&#xff0c;版本來到了4.2版本。 我們先來看看4.2版本都給用戶帶來哪些特色&#xff1a; 界面切換更流暢&#xff1a;無論是響應速度還是操作手感&#xff0c;用戶都將感受到更加迅速和順滑的體驗 搜星速度的顯著…

工具:Visual Studio Code

一、VSCode生成exe 二、在vs中斷點調試 如果沒效果需要安裝如下與unity相連接的插件 三、注釋 1、代碼注釋 注釋和取消都是都是同一個命令&#xff1a;選中代碼&#xff0c;然后按住CtrlShift/ 2、方法或類注釋 /// 四、導航 五、將變量注釋展示到解釋面板 1、直接顯示 [Too…

Git提交時出現Merge branch ‘master‘ of ...之解決方法

最近遇到了一個問題 我是用git提交代碼的時候 分支上 顯示的是merge 意思是 合并代碼了 每次都會 創建一個分支 因為我和另一個小伙伴共同 開發一個項目 所以 小伙伴告訴我 總是創建新的分支 我細細看了一下 測試了一下 我們兩個人 修改不同的文件 同時修改 他提交了 我再提…

pip安裝軟件包提示“沒有那個文件或目錄”問題的處理

文章目錄 一、Python.h&#xff1a;沒有那個文件或目錄二、lber.h&#xff1a;沒有那個文件或目錄 一、Python.h&#xff1a;沒有那個文件或目錄 pip install -I python-ldap3.0.0b1 #異常提示In file included from Modules/LDAPObject.c:3:0:Modules/common.h:9:20: 致命錯…