Чтобы повторить в ответе то, что уже упоминалось в комментариях:
Сначала определите существующие адаптеры 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
программу из i2c-tools
пакета Debian для декодирования 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, поэтому я не могу проверить.