Um zu wiederholen, was bereits in den Kommentaren erwähnt wurde:
Identifizieren Sie zunächst die aktuellen I2C-Adapter, für die Treiber geladen sind i2detect -l
.
Aus dem Namen des Adapters kann man oft die Funktion erraten, die Radeon
Adapter sind für EDID (Monitorinformationen) und der SMBus I801
Adapter ist vom Motherboard als Teil der Southbridge (Sie werden es sehen lspci
).
Beachten Sie, dass die Nummerierung möglicherweise nicht konstant ist. Um den richtigen Adapter zu finden, sehen Sie sich den Inhalt von an /sys/bus/i2c/devices/i2c-*/name
.
Der nächste Schritt besteht darin, I2C-Geräte zu identifizieren, die an einen bestimmten Adapter angeschlossen sind. In Ihrem Fall ist dies die Adapternummer 8
, also i2cdetect -y 8
der notwendige Befehl.
EEPROMs haben normalerweise Adressen von 50
bis 53
. Im Allgemeinen ist es ziemlich schwierig herauszufinden, welcher Chip an einer bestimmten Adresse angeschlossen ist. die Hardware genau zu untersuchen, die Chipnummern zu notieren und nach Datenblättern zu suchen, um mögliche I2C-Adressen einzugrenzen, hilft.
EEPROMs sind jedoch ziemlich standard. Sie können mit dem Kernel- eeprom
Treiber auf die EEPROMs zugreifen . Nach dem Modifizieren wird der Inhalt unter angezeigt /sys/bus/i2c/drivers/eeprom/
.
Auf meinem Motherboard habe ich EEPROMs für zwei DIMM-RAMs 50
und 52
kann das decode-dimms
Programm aus dem Debian- i2c-tools
Paket verwenden, um die Vital Product Data (VPD) der DIMMs zu decodieren .
Es ist möglich, dass diese Geräte in Ihrem System auch nur RAM-VPDs sind, und die NVME-VPDs sind woanders. Es ist auch möglich, dass Ihre NVMEs einen anderen I2C-Bus auf einem anderen Adapter verwenden, und Sie haben keinen Linux-Kernel-Treiber für diesen Adapter geladen (oder noch niemand hat einen solchen Treiber geschrieben).
Zumindest wissen Sie jetzt, wie Sie i2cdetect
EEPROMs identifizieren können.
Bearbeiten
Wie in den Kommentaren erwähnt, unterscheidet sich der BMC-Mikrocontroller vollständig von der Host-CPU. Möglicherweise hat er Zugriff auf andere Hardware als die Host-CPU. Also die Antwort auf "aber warum kann der BMC es sehen?" ist "weil es völlig anders ist und was der BMC tun kann und was nicht, beeinflusst nicht unbedingt das, was die Host-CPU kann und was nicht".
Ihre eigentliche Frage ist anscheinend "Wie kann ich auf die VPD von NVME auf der Host-CPU zugreifen". Ich habe die NVME-Verwaltungsschnittstellenspezifikation gegoogelt und besagt, dass Verwaltungsendpunkte sowohl über einen I2C / SMBus-Port als auch über einen PCIe-Port erreicht werden können.
Meine Vermutung wäre also, dass der Management Endpoint Ihrer Hardware nur über PCIe erreichbar ist.
Weiteres Googeln fand eine Management Endpoint-CLI, die über ioctls
den Linux- nvme
Treiber funktioniert, zumindest durch den kurzen Blick auf den Code, den ich gemacht habe.
An Ihrer Stelle würde ich mit diesem Tool versuchen, auf die Management Endpoint-Oberfläche Ihrer Hardware zuzugreifen und zu prüfen, ob Sie die VPD auf diese Weise nicht erhalten können.
Ich habe kein NVME-Gerät hier und kann daher nicht testen.