2014-11-24 5 views
0

У меня нет работы o/s, поэтому я не могу декодировать pcie, используя что-то вроде lspci (я хочу, чтобы lspci принимал входные данные из файла!).Декодирование pcie config space capabilites вручную - например, для примера

У меня есть шестнадцатеричный дамп ниже (это FPGA Xilinx Ultrascale, но вопрос является общим), я пытаюсь понять, где начинаются возможности и как декодировать указатели Next Cap, чтобы ходить в конфигурационном пространстве. Согласно 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 

ответ

2

не имеют о/s работает, так что я не могу расшифровать PCIe используя что-то вроде lspci (я хочу, чтобы lspci принимал входные данные из файла!).

lspci может принимать входные данные из файла!

Используйте lcpci -xx на одной машине для генерации шестнадцатеричного выхода. Сохраните его в текстовом файле. Используйте lspci -F [имя_файла], чтобы прочитать его.

Теперь вам нужно создать текстовый файл в том же формате, что и исходный файл (это всего лишь шестнадцатеричный дамп конфигурационного пространства).

+0

Спасибо, мне удалось подделать вывод pcie из tcl и прочитать его обратно для декодирования. – TomKeddie

0

Хорошо, я выяснил, как это работает. Существует два типа стандартных, стандартных и расширенных. Указатель на первую стандартную возможность находится в младших 8 битах регистра конфигурации со смещением 0x34.

Так

034 0x000000c0

Очки для 0xc0

0c0 0x00420010

Где мы находим регистр возможностей PCIe (0х10), а следующий указатель (0x00, конец цепи) и некоторые метаданные (0x0042 ref 7.8.2 спецификации для декодирования).

Отдельно у нас есть расширенные возможности при запуске со смещением 0x0100 (см. 7,9 спецификации).

100 0x30020001

Здесь мы находим Advanced отчетов об ошибках Capability идентификатор (0x0001), его версию (2) и следующий указатель (0x300).

300 0x30010019

Здесь мы находим Расширена возможность Secondary PCI Express (0x0019), его версию (1) и следующий указатель (0x300 - это не имеет смысла, как его указывающей к себе).

+0

Altera имеет отличный пример в http://www.alterawiki.com/wiki/PCI_Configuration_Space#Header_.26_Capability_Register_Sets, который вручную перемещает пространство конфигурации. – TomKeddie

1

Указатель возможностей расположен по адресу 0x34. Значение, которое вы видите, есть адрес для перехода. В вашем случае 0xc0. По адресу 0xC0 вы имеете значение 0x10. Это указывает на структуру возможностей PCI Express. Следующее значение равно 0x00. Это указывает на конец связанного списка, иначе вы бы увидели адрес здесь и прыгнули туда, чтобы продолжить. 0x10 представляет собой PCI Express Возможность Структура 0x05 представляет собой MSI Capability Структура 0x01 является

0

Что касается PCIe расширенной структуры возможностей заголовка: Я думаю, что есть ошибка.

Бит 15: 0 - ID Это значение ID, которое может использоваться для идентификации расширенной возможности PCIe. Это значение можно изменить, установив свойство на экземпляр жесткого диска PCIe. Только чтение.

Бит 19:16 - Ред. Это значение идентификатора ревизии, которое может использоваться для идентификации расширенной возможности PCIe. Это значение можно изменить, установив свойство на экземпляр жесткого диска PCIe.Только чтение

31:20 - Length В этом поле указывается количество байтов всей структуры, включая заголовок расширенной возможности PCI Express, заголовок, специфичный для поставщика, и остальные данные. Только чтение

Однако информация не имеет смысла с реальными числами (как вы сами говорите) ....