手动解码 pcie 配置空间功能 - 例如



我没有运行操作系统,所以我无法使用 lspci 之类的东西解码 pcie(我希望 lspci 能从文件中获取输入!

我下面有一个十六进制转储(这是一个 Xilinx Ultrascale FPGA,但问题是通用的),我试图了解功能从哪里开始以及如何解码下一个上限指针以遍历配置空间。 根据 Xilinx PG156 第 2-24 页,功能从配置空间的开头开始0x80,但0x80 (0x80030001) 处的值似乎没有意义,下一个指针为零,但显然有更多的功能。

我无法在网上或标准中找到关于功能从哪里开始的明确答案。

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

我没有运行操作系统,所以我无法使用 lspci 之类的东西解码 pcie(我希望 lspci 能从文件中获取输入!

LSPCI可以从文件中获取输入!

在一台计算机上使用 lcpci -xx 生成十六进制输出。将其保存在文本文件中。使用 lspci -F [文件名] 读取它。

现在您需要做的就是生成一个与原始文件格式相同的文本文件(它只是配置空间的十六进制转储)。

好的,我已经找到了它是如何工作的。 有两种功能,标准和扩展。 指向第一个标准功能的指针位于配置寄存器的低 8 位偏移0x34。

所以

034 0x000000c0

指向0xc0

0c0 0x00420010

我们在其中找到 PCIe 功能寄存器 (0x10)、下一个指针(0x00,链端)和一些元数据(0x0042 参考规范 7.8.2 进行解码)。

另外,我们在偏移0x0100开始时具有扩展功能(规范的参考文献 7.9)。

100 0x30020001

在这里,我们找到高级错误报告功能 ID (0x0001)、其版本 (2) 和下一个指针 (0x300)。

300 0x30010019

在这里,我们找到了辅助PCI Express扩展功能(0x0019),其版本(1)和下一个指针(0x300 - 由于指向自身而没有意义)。

功能指针位于地址 0x34。您在那里看到的值是要转到的地址。在你的情况下0xc0。在地址 0xC0 处,您有值 0x10。这表示 PCI 快速功能结构。下一个值是0x00。这表示链表的结束,否则你会在这里看到一个地址并跳到那里继续。0x10 是 PCI Express 功能结构0x05是 MSI 功能结构0x01是一个

至于 PCIe 扩展功能标头结构 :我认为有一个错误。

位 15:0 - ID这是可用于标识 PCIe 扩展功能的 ID 值。可以通过在 PCIe 硬块实例上设置属性来修改此值。只读。

位 19:16 - 修订版这是可用于标识 PCIe 扩展功能的修订版 ID 值。可以通过在 PCIe 硬块实例上设置属性来修改此值。只读

31:20 - 长度此字段指示整个结构中的字节数,包括 PCI Express 扩展功能标头、特定于供应商的标头和其余数据。只读

但是,这些信息与实际数字没有意义(正如您自己所说)....

相关内容

最新更新