Каким образом ресурсы менеджера устройств Windows соответствуют шести конфигурационным полям PCI - PullRequest
0 голосов
/ 08 июля 2019

после загрузки Windows, я использую windbg, чтобы проверить пространство конфигурации PCI и посмотреть шесть тактов.

3: kd>! Pci 100 3 0 0

10: BAR0 d000000c 11010000000000000000000000001100

14: BAR1 00000000

18: BAR2 e000000c 11100000000000000000000000001100

1c: BAR3 00000000

20: BAR4 0000e001 1110000000000001

24: BAR5 efd00000 11101111110100000000000000000000

из этого я могу знать, что есть две 64-битные ячейки памяти и одна 32-битная ячейка памяти.

В то же время я открываю диспетчер устройств -> свойства устройства -> Ресурсы и я получаю это:

Диапазон памяти 00000000D0000000 - 00000000DFFFFFFF

Диапазон памяти 00000000E0000000 - 00000000E01FFFFF

Диапазон памяти 00000000EFD00000 - 00000000EFD7FFFF

Диапазон памяти 00000000000A0000 - 00000000000BFFFF

из этого списка есть четыре адреса памяти, а в поле конфигурации PCI указано три, почему? а также как менеджер устройства узнает размер каждой памяти?

1 Ответ

0 голосов
/ 12 июля 2019

Я не могу ответить на часть о том, где появился диапазон памяти A0000, но я могу ответить на некоторые ваши вопросы.

Как менеджер устройства узнает размер каждой памяти?

На самом деле довольно легко ответить.К сожалению, я не могу связаться с прямым источником, так как у меня нет доступа к спецификации, но я могу объяснить это.До того, как ОС хоста (Windows) выделит адреса для размещения в регистре BAR (пространство конфигурации), на устройстве есть данные, помещенные в регистр BAR.Найденное содержимое - это длина данных, выделяемых для этого BAR. Что такое регистр базовых адресов (BAR) в PCIe? https://en.wikipedia.org/wiki/PCI_configuration_space

считывает запрошенный объем памяти устройства

Теперь с этим сказаноЯ замечаю некоторые странные вещи с вашими BAR, поэтому, пожалуйста, укажите это (https://wiki.osdev.org/PCI) для того, что я говорю. enter image description here Ваши первые 2 BAR (BAR0 и BAR2) действительно 64-битная памятьBAR, но, в частности, они выбираются заранее. BAR1 и BAR3 - это другая половина 64-битного BAR, которая не используется, что весьма необычно для 64-битных BAR, чтобы тратить это пространство. Далее на BAR4 мы видим, что бит1 установлен, подразумевая, что это пространство ввода-вывода ине пространство памяти. Тогда последний BAR5 Я полагаю, что вы не правы, для меня это выглядит как 32-битное непередаваемое пространство памяти BAR. В моем опыте системы устанавливают BAR на 00000000, когда они не используются, а не на этот случайный адрес.

Теперь, глядя на то, какие окна сообщают, мы видим 4 бара (имеет смысл для меня) .В размере, который он определил при первом чтении BAR (так что у вас нет возможности проверить этоТочка уже изменилась и давно прошла).Однако, как ни странно, ваш адрес ввода-вывода изменился с 0000e000 на .... A0000.Это может быть связано с тем, как работает пространство ввода / вывода. У меня, честно говоря, нет опыта работы с барами пространства ввода / вывода.Но, надеюсь, другая информация поможет.

...