PCI不同的位址域

2021-06-12 16:53:18 字數 1453 閱讀 1926

pci的位址域

簡單的說,pci配置空間是pci裝置的內部屬性,裝置內部儲存了256bytes的空間作為內部register定義該裝置的屬性。訪問配置空間使用io讀寫(x86架構中使用cf8h/cfch埠);而pci裝置的memory/io空間則是對映到cpu位址域中,需要占用的memory/io位址空間。訪問這部分位址域只要使用簡單直接的memory、io訪問方式就可以實現。

a、 pci配置空間

每個pci裝置的配置空間資料都不一樣。基本上都是以固定的形式。每個外圍裝置在其 pci 配置空間中都包含一組明確定義的配置暫存器。這些暫存器不僅用於標識裝置,還用於提供裝置配置資訊。生成配置週期的方法取決於主機架構,x86 計算機中使用的是特殊的 i/o 埠(cf8h/cfch埠)。在其他平台上,可以將 pci 配置空間記憶體對映到對應於主機位址域中 pci 主橋 (host bridge) 的某些位址位置,比如mips架構中。

針對不同型別的pci裝置,配置空間可以歸納為兩種,type0、type1,基本上兩種byte是一致的,type0表示一般型別的pci裝置,type1則是pci bridge。

下圖即為pci定義的type0的配置空間頭部

type0的配置空間header部分

b、 pci memory空間

pci裝置為了能正常使用,需要分配記憶體空間,以便driver來控制操作pci裝置。這些動作是有bios來在scan pci匯流排並初始化的時候完成的,依據該pci裝置的屬性:需要多大的記憶體空間(bar0/bar1,etc),bios將按照一定的演算法,給予所有需要memory空間的pci裝置分配記憶體空間。並將分配記憶體段的基位址填入到配置空間中的bar0/bar1暫存器.

看下圖,pci裝置所占用的memory空間是在4g匯流排(32bit cpu的memory位址域)的高階部分。

pci記憶體空間在cpu位址域中的對映

c、 pci io 空間

對於io空間,和memory空間是乙個道理,只是有些pci裝置需要分配io空間;有些裝置需要分配memory空間而已,當然還有裝置比較複雜,會同時需要分配memory、io空間。io空間的分配也是從cpu 的io空間高階部分開始分配的,即64k byte的io空間。

最直接的方式看memory io 空間的分配情況,可以在xp系統下的『裝置管理器』中檢視到。

裝置管理器中檢視memory分配情況

裝置管理器中檢視io分配情況

系統位址空間,PCI位址空間

1 系統位址空間與 pci 位址空間 1.1 pci 位址空間 pci 匯流排具有 32 位資料 位址復用匯流排,所以其儲存位址空間為 2的32次方 4gb 也就是 pci 上的所有裝置共同對映到這 4gb 上,每個 pci 裝置占用唯一的一段 pci 位址,以便於 pci 匯流排統一定址。每個 p...

PCI匯流排位址空間與系統位址空間的關係

1 pci位址空間 pci匯流排具有 32位資料 位址復用匯流排,所以其儲存位址空間為 2的32次方 4gb 也就是 pci上的所有裝置共同對映到這 4gb上,每個 pci裝置占用唯一的一段 pci位址,以便於 pci匯流排統一定址。每個 pci裝置通過 pci暫存器中的基位址暫存器來指定對映的首位...

PCI匯流排位址空間與系統位址空間的關係

摘自 1 pci位址空間 pci匯流排具有 32位資料 位址復用匯流排,所以其儲存位址空間為 2的32次方 4gb 也就是 pci上的所有裝置共同對映到這 4gb上,每個 pci裝置占用唯一的一段 pci位址,以便於 pci匯流排統一定址。每個 pci裝置通過 pci暫存器中的基位址暫存器來指定對映...