上篇文章說到列舉過程中的資源分配,這篇文章具體說下。
首先要知道需要分配哪些資源,主要就2個:匯流排(bus)資源和記憶體(memory)資源。
匯流排資源:
bus資源就是給裝置分配唯一的id,其中bus號為8個bit,所以bus範圍為0-255,device是5個bit,所以範圍是0-31,function是3個bit,所以範圍是0-7,每個裝置都要有bus號,同乙個bus號,有不同的device,基本都是switch下行口才有,而同乙個bus號,同乙個device號,不同的function號,是指這個pcie裝置是乙個multi-function裝置,比如有多個網口的網絡卡可能是這樣的。
記憶體資源:
關於這裡分配的memory資源,這個memory資源和pcie的幾個空間(配置空間,io空間,memory空間,message空間)裡面的memory空間是不太一樣的。這裡分配的memory資源是給裝置bar使用,bar空間一般都是乙個pcie裝置功能使用需要的,比如nvme裝置的bar0對映的其實就是nvme controller相關的暫存器。
看root port和pcie switch裝置的暫存器,可以看到關於資源都有乙個範圍,比如i/o behind,memory behind,越靠近根埠的資源範圍越大,這是乙個很明顯的道理,這個根埠下面所有的裝置資源都應該包含在根埠下面,而下面的switch自己本身占用了一定資源後,剩餘的資源才繼續分配給下面,每個裝置占用的資源都是不能衝突的,不然兩個裝置用同一塊記憶體,豈不亂套了,而且基於這個設計,前面說過的tlp報文路由方式就可以通過位址路由了。裝置需要的bar空間大小,是通過往bar暫存器寫全f,然後pcie裝置把大小填到bar暫存器裡面,軟體再讀取bar暫存器就知道要給這個裝置的bar空間分配多少資源了。
資源分配這一塊,在熱插拔流程中體現更明顯。因為下面的裝置可以替換,每個裝置需要的資源大小不一樣,移除後資源該怎麼處理,接入後再怎麼分配,這些都是支援熱插拔的主機板系統應該考慮的問題。
PCIe裝置驅動demo
pcie pci express 是intel提出的新一代的匯流排介面,目前普及的pcie 3.0的傳輸速率為8gt s,下一代pcie 4.0將翻番為16gt s,因為傳輸速率快廣泛應用於資料中心 雲計算 人工智慧 機器學習 視覺計算 顯示卡 儲存和網路等領域。pcie插槽是可以向下相容的,比如p...
PCIe裝置的配置空間
關於pci裝置的配置空間網上已經有很多資料了,如下圖就是pci裝置必須支援的64個位元組的配置空間,範圍為0x00 0x3f。很多pci裝置僅僅支持者64位元組的配置空間。pci和pcie配置空間的區別如下文。此外pci pci x和pcie裝置還擴充套件了0x40和0xff這段配置空間,這段空間主...
PCIE 裝置掃瞄的過程
初步了解完pci匯流排標準之後,我們接下來正式開始pcie裝置的漫遊之旅。從我們按下pc的電源按鈕開始,bios就接管系統控制權開始工作,它會先進行一些記憶體和裝置的初始化工作 當然,也包括我們的pci裝置 由於商業上的原因,phoenix等廠商的bios 需要授權協議,在此,我們以另外乙個款開源b...