2014-11-24 46 views
0

我沒有運行o/s,所以我無法使用lspci(我希望lspci會從文件輸入!)來解碼pcie。我試圖瞭解功能在哪裏開始,以及如何解碼Next Cap Pointer來配置空間。我有一個十六進制轉儲(這是一個Xilinx Ultrascale FPGA,但問題是通用的)。根據Xilinx PG156第2-24頁,功能從配置空間開始的0x80開始,但0x80(0x80030001)的值似乎沒有意義,下一個指針爲零,但顯然有更多功能。手動解碼pcie配置空間capabilites - 查找示例

我無法在線或在標準中找到有關能力開始的明確答案。

000 0x813410ee 
004 0x00100000 
008 0x06800000 
00c 0x00010000 
010 0x0000000c 
014 0x00000000 
018 0x00000000 
01c 0x00000000 
020 0x00000000 
024 0x00000000 
028 0x00000000 
02c 0x00000000 
030 0x00000000 
034 0x000000c0 
038 0x00000000 
03c 0x00000100 
040 0x00000000 
044 0x00000000 
048 0x00000000 
04c 0x00000000 
050 0x00000000 
054 0x00000000 
058 0x00000000 
05c 0x00000000 
060 0x00000000 
064 0x00000000 
068 0x00000000 
06c 0x00000000 
070 0x00000000 
074 0x00000000 
078 0x00000000 
07c 0x00000000 
080 0x80030001 
084 0x00000008 
088 0x00000000 
08c 0x00000000 
090 0x00800005 
094 0x00000000 
098 0x00000000 
09c 0x00000000 
0a0 0x00000000 
0a4 0x00000000 
0a8 0x00000000 
0ac 0x00000000 
0b0 0x00000011 
0b4 0x00000000 
0b8 0x00000000 
0bc 0x00000000 
0c0 0x00420010 
0c4 0x00008023 
0c8 0x00012910 
0cc 0x0073f043 
0d0 0x20410000 
0d4 0x00000000 
0d8 0x00400000 
0dc 0x00000000 
0e0 0x00000000 
0e4 0x00000012 
0e8 0x00000000 
0ec 0x0000000e 
0f0 0x00030003 
0f4 0x00000000 
0f8 0x00000000 
0fc 0x00000000 
100 0x30020001 
104 0x00000000 
108 0x00400000 
10c 0x00462030 
110 0x00000001 
114 0x0000e000 
118 0x00000000 
11c 0x00000000 
120 0x00000000 
124 0x00000000 
128 0x00000000 
12c 0x00000000 
130 0x00000000 
134 0x00000000 
138 0x00000000 
13c 0x00000000 
140 0x0001000e 
144 0x00000000 
148 0x00000000 
14c 0x00000000 
150 0x30010003 
154 0x00000000 
158 0x00000000 
15c 0x00000000 
160 0x00010004 
164 0x00000000 
168 0x00000000 
16c 0x00000000 
170 0x00000000 
174 0x00000000 
178 0x00000000 
17c 0x00000000 
180 0x00000000 
184 0x00000000 
188 0x00000000 
18c 0x00000000 
190 0x00000000 
194 0x00000000 
198 0x00000000 
19c 0x00000000 
1a0 0x00000000 
1a4 0x00000000 
1a8 0x00000000 
1ac 0x00000000 
1b0 0x00000000 
1b4 0x00000000 
1b8 0x00010018 
1bc 0x00000000 
1c0 0x00010016 
1c4 0x00000007 
1c8 0x00000000 
1cc 0x00000100 
1d0 0x00000000 
1d4 0x00000000 
1d8 0x00000000 
1dc 0x00000000 
1e0 0x00000000 
1e4 0x00000000 
1e8 0x00000000 
1ec 0x00000000 
1f0 0x00000000 
1f4 0x00000000 
1f8 0x00000000 
1fc 0x00000000 
200 0x00000010 
204 0x00000000 
208 0x00000000 
20c 0x00000000 
210 0x00000000 
214 0x00010000 
218 0x00000000 
21c 0x00000553 
220 0x00000001 
224 0x00000000 
228 0x00000000 
22c 0x00000000 
230 0x00000000 
234 0x00000000 
238 0x00000000 
23c 0x00000000 
240 0x00000000 
244 0x00000000 
248 0x00000000 
24c 0x00000000 
250 0x00000000 
254 0x00000000 
258 0x00000000 
25c 0x00000000 
260 0x00000000 
264 0x00000000 
268 0x00000000 
26c 0x00000000 
270 0x00000000 
274 0x30010017 
278 0x00000005 
27c 0x00000000 
280 0x00000000 
284 0x00000000 
288 0x00000000 
28c 0x00000000 
290 0x00000000 
294 0x00000000 
298 0x00000000 
29c 0x00000000 
2a0 0x00000000 
2a4 0x00000000 
2a8 0x00000000 
2ac 0x00000000 
2b0 0x00000000 
2b4 0x00000000 
2b8 0x00000000 
2bc 0x00000000 
2c0 0x00000000 
2c4 0x00000000 
2c8 0x00000000 
2cc 0x00000000 
2d0 0x00000000 
2d4 0x00000000 
2d8 0x00000000 
2dc 0x00000000 
2e0 0x00000000 
2e4 0x00000000 
2e8 0x00000000 
2ec 0x00000000 
2f0 0x00000000 
2f4 0x00000000 
2f8 0x00000000 
2fc 0x00000000 
300 0x30010019 
304 0x00000000 
308 0x00000000 
30c 0x3f003f00 
310 0x3f003f00 
314 0x3f003f00 
318 0x3f003f00 
31c 0x00000000 
320 0x00000000 
324 0x00000000 
328 0x00000000 
32c 0x00000000 
330 0x00000000 
334 0x00000000 
338 0x00000000 
33c 0x00000000 
340 0x00000000 
344 0x00000000 
348 0x00000000 
34c 0x00000000 
350 0x00000000 
354 0x00000000 
358 0x00000000 
35c 0x00000000 
360 0x00000000 
364 0x00000000 
368 0x00000000 
36c 0x00000000 
370 0x00000000 
374 0x00000000 
378 0x00000000 
37c 0x00000000 
380 0x00000000 
384 0x00000000 
388 0x00000000 
38c 0x00000000 
390 0x00000000 
394 0x00000000 
398 0x00000000 
39c 0x00000000 
3a0 0x00000000 
3a4 0x00000000 
3a8 0x00000000 
3ac 0x00000000 
3b0 0x00000000 
3b4 0x00000000 
3b8 0x00000000 
3bc 0x00000000 
3c0 0x00010002 
3c4 0x00000000 
3c8 0x00000000 
3cc 0x00000000 
3d0 0x00000000 
3d4 0x800000ff 
3d8 0x00000000 
3dc 0x00000000 
3e0 0x00000000 
3e4 0x00000000 
3e8 0x00000000 
3ec 0x00000000 
3f0 0x00000000 
3f4 0x00000000 
3f8 0x00000000 
3fc 0x00000000 

回答

2

我沒有一個O/S運行,所以我不能解碼PCIE使用像lspci(我希望lspci會從文件輸入!)。

lspci可以從文件輸入!

在一臺機器上使用lcpci -xx來生成十六進制輸出。將其保存在文本文件中。使用lspci -F [filename]將其讀入。

現在您只需要以與原始文件相同的格式生成文本文件(它只是配置空間的十六進制轉儲文件)。

+0

謝謝,我設法從tcl僞造pcie的輸出並將其讀回解碼。 – TomKeddie 2016-09-27 21:00:04

0

好的,我已經發現它是如何工作的。有兩種功能,標準和擴展。指向第一個標準功能的指針位於配置寄存器的低8位,偏移量爲0x34。

所以

034 0x000000c0

指向將0xC0

0C0 0x00420010

我們在那裏找到的PCIe能力寄存器(0x10的)下一個指針(0x00時,鏈的末端)和一些元數據(0x0042參考7.8.2規範解碼)。

另外我們在偏移量0x0100(規範參考7.9)處開始擴展功能。

100 0x30020001

在這裏,我們找到了高級錯誤報告功能ID(0×0001),其版本(2)和下一個指針(是0x300)。

300 0x30010019

在這裏,我們找到了次要的PCI Express擴展功能(0x0019),它的版本(1)和下一個指針(是0x300 - 這沒有任何意義爲指向其自身)。

+0

Altera在http://www.alterawiki.com/wiki/PCI_Configuration_Space#Header_.26_Capability_Register_Sets上有一個很好的例子,它手動遍歷配置空間。 – TomKeddie 2015-07-11 00:50:51

1

功能指針位於地址0x34。 您在那裏看到的值是要去的地址。 在你的情況下0xc0。 在地址0xC0處,您的值爲0x10。 這表示PCI Express功能結構。下一個值是0x00。這表示鏈接列表的結束,否則你會在這裏看到一個地址並跳到那裏繼續。 0x10的是PCI Express功能結構 爲0x05是MSI能力結構 0x01爲一個

0

至於將PCIe擴展能力頭結構:我認爲有一個錯誤。

位15:0 - ID 這是可用於識別PCIe擴展功能的ID值。可以通過在PCIe硬塊實例上設置屬性來修改此值。只讀。

位19:16 - 修訂版 這是可用於識別PCIe擴展功能的版本ID值。可以通過在PCIe硬塊實例上設置屬性來修改此值。只讀

31:20 - 長度 此字段指示整個結構中的字節數,包括PCI Express擴展功能標頭,供應商專用標頭和其餘數據。只讀

但是信息不與實際的數字意義上(像你說的你自己)......