Подобно тому, что запрашивает IPMI, как я получу доступ к VPD каждого устройства на целевом сервере через SMBus/I2C? Нужен ли драйвер для этого или достаточно модуля i2c-dev? Как проверить, что на целевой шине, если к серверу подключено несколько устройств хранения?

Я использую i2cdetect для проверки шины i2c, однако я не могу проверить, к какой шине подключено мое устройство или у нее вообще есть шина. Я точно знаю, что мне нужна шина / адаптер i2c, чтобы определить фактическое устройство i2c. Создание клиента i2c может сделать это, но мне все еще нужно проверить его соединение с шиной, а создание клиента i2c ограничивает определение устройств i2c, перечисленных в id_table. Как можно больше я хочу, чтобы он обнаруживал все устройства хранения независимо от того, есть ли у него устройство i2c или нет.

i2cdetect выходы:

i2c-0   i2c         Radeon i2c bit bus 0x90             I2C adapter
i2c-1   i2c         Radeon i2c bit bus 0x91             I2C adapter
i2c-2   i2c         Radeon i2c bit bus 0x92             I2C adapter
i2c-3   i2c         Radeon i2c bit bus 0x93             I2C adapter
i2c-4   i2c         Radeon i2c bit bus 0x94             I2C adapter
i2c-5   i2c         Radeon i2c bit bus 0x95             I2C adapter
i2c-6   i2c         Radeon i2c bit bus 0x96             I2C adapter
i2c-7   i2c         Radeon i2c bit bus 0x97             I2C adapter
i2c-8   smbus       SMBus I801 adapter at f000          SMBus adapter

Вывод i2cdetect -y 8:

         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          -- -- -- -- -- 08 -- -- -- -- -- -- -- 
    10: -- -- -- -- 14 15 -- -- -- -- -- -- -- -- -- -- 
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
    30: 30 -- 32 -- -- -- -- -- -- -- -- -- -- -- -- -- 
    40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- -- 
    50: 50 51 52 53 -- -- -- -- -- -- -- -- -- -- -- -- 
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 6e -- 
    70: -- -- -- -- -- -- -- --        

Любые ответы будут оценены. Большое спасибо.

1 ответ1

0

Чтобы повторить в ответе то, что уже упоминалось в комментариях:

Сначала определите существующие адаптеры I2C, для которых есть драйверы, загруженные с помощью i2detect -l .

По названию адаптера часто можно догадаться о функции, адаптеры Radeon предназначены для EDID (информация о мониторе), а адаптер SMBus I801 от материнской платы как часть южного моста (вы увидите это с помощью lspci).

Обратите внимание, что нумерация может не быть постоянной в зависимости от ботинок. Чтобы найти правильный адаптер, посмотрите содержимое /sys/bus/i2c/devices/i2c-*/name .

Следующим шагом является определение устройств I2C, подключенных к определенному адаптеру. В вашем случае это адаптер номер 8 , поэтому i2cdetect -y 8 - необходимая команда.

EEPROM обычно имеют адреса от 50 до 53 . В общем, довольно сложно выяснить, какой именно чип подключен по определенному адресу; помогает тщательный осмотр аппаратного обеспечения, учет номеров чипов и поиск таблиц данных для сужения возможных адресов I2C.

Но EEPROM довольно стандартны. Вы можете получить доступ к EEPROMS с помощью драйвера eeprom ядра; после modprobing содержимое будет отображаться в /sys/bus/i2c/drivers/eeprom/ .

На моей материнской плате у меня есть EEPROM для двух RAM DIMM на 50 и 52 , и я могу использовать программу decode-dimms из пакета Debian i2c-tools для декодирования Vital Product Data (VPD) модулей DIMM.

Вполне возможно, что эти устройства в вашей системе также являются только виртуальными дисководами ОЗУ, а виртуальные накопители NVME находятся где-то еще. Также возможно, что ваш NVME использует другую шину I2C на другом адаптере, и у вас не загружен драйвер ядра Linux для этого адаптера (или никто еще не написал такой драйвер).

Но, по крайней мере, теперь вы знаете, как использовать i2cdetect для идентификации EEPROM.

редактировать

Как сказано в комментариях, микроконтроллер BMC полностью отличается от центрального процессора, и возможно, что он имеет доступ к другому оборудованию, чем центральный процессор. Так что ответ на вопрос "но почему BMC может это увидеть?""есть", потому что он совершенно другой, и то, что BMC может и не может делать, не обязательно влияет на то, что может и не может делать центральный процессор ».

Тем не менее, кажется, что ваш реальный вопрос «как я могу получить доступ к VPD NVME на хост-процессоре». Я погуглил спецификацию интерфейса управления NVME, и там говорится, что конечные точки управления могут быть достигнуты как через порт I2C/SMBus, так и через порт PCIe.

Поэтому я предполагаю, что конечная точка управления вашего оборудования доступна только через PCIe.

Дальнейшее поиск в Google нашло CLI Management Endpoint, который работает через ioctls в драйвере Linux nvme , по крайней мере, из быстрого просмотра кода, который я сделал.

Поэтому на вашем месте я бы попробовал этот инструмент для доступа к интерфейсу Management Endpoint на вашем оборудовании и выяснил, не можете ли вы получить VPD таким образом.

У меня нет устройства NVME, поэтому я не могу проверить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .