Я разрабатываю модуль ядра Linux, который будет проверять несколько вещей в пространстве конфигурации pci контроллера DRAM. Для этого я собираюсь использовать pci_get_device()
и pci_read_config_*
.
Но перед этим мне нужно знать B: D: F или идентификатор поставщика / идентификатор устройства контроллера DRAM.
Итак, есть ли способ найти это или я жестко запрограммировал значение (сверяясь с таблицей данных) в модуле?
Я знаю, что вывод lspci
показывает эту деталь, так что это должно быть возможно.
lspci
00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 0b)
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 0b)
...
Спасибо за разъяснение. Я понимаю, что мне нужно жестко запрограммировать идентификатор поставщика и идентификатор устройства контроллера DRAM для каждого процессора.
Под "B: D: F", я полагаю, вы имеете в виду шину: устройство: номера функций. Они описывают адрес функции PCI в системе (или, скорее, в «домене» PCI), хотя в Linux номера шины назначаются динамически, поэтому они несколько произвольны. Эти числа не имеют ничего общего с идентификатором поставщика и идентификатором устройства (плюс идентификатор субпоставщика и идентификатор субустройства), которые указывают, что устройство на самом деле является, а не его местоположение. Обычно жестко кодируют идентификатор поставщика и идентификатор устройства (и вспомогательные идентификаторы) и / или код класса PCI, но не принято жестко кодировать номера шины: устройство: функции.