Para repetir na resposta o que já foi mencionado nos comentários:
Primeiro, identifique os atuais adaptadores I2C para os quais existem drivers carregados com i2detect -l
.
A partir do nome do adaptador, muitas vezes é possível adivinhar a função, os adaptadores Radeon
são para EDID (Monitor informações), eo adaptador SMBus I801
é da placa-mãe como parte da southbridge (você verá com lspci
).
Observe que a numeração pode não ser constante entre os inicializadores. Para encontrar o adaptador correto, veja o conteúdo de /sys/bus/i2c/devices/i2c-*/name
.
O próximo passo é identificar os dispositivos I2C conectados a um adaptador específico. No seu caso, esse é o número do adaptador 8
, portanto i2cdetect -y 8
é o comando necessário.
EEPROMs geralmente têm endereços de 50
a 53
. Em geral, é muito difícil descobrir qual chip específico está conectado em um determinado endereço; inspecionar o hardware de perto, observando os números dos chips e procurando por folhas de dados para diminuir possíveis endereços I2C ajuda.
Mas EEPROMs são razoavelmente padrão. Você pode acessar o EEPROMS com o driver% kerneleeprom
; depois do modprobing, o conteúdo aparecerá em /sys/bus/i2c/drivers/eeprom/
.
Na minha placa-mãe, tenho EEPROMs para duas RAMs de DIMM em 50
e 52
, e posso usar o programa decode-dimms
do pacote Debian i2c-tools
para decodificar o Vital Product Data (VPD) dos DIMMs.
É possível que esses dispositivos em seu sistema também sejam apenas RAM VPDs e os NVD VPDs estejam em outro lugar. Também é possível que seus NVMEs usem um barramento I2C diferente em um adaptador diferente, e você não tem o driver do kernel Linux carregado para este adaptador (ou ninguém já escreveu um driver desse tipo).
Mas pelo menos agora você sabe como usar o i2cdetect
para identificar EEPROMs.
Editar
Como dito nos comentários, o microcontrolador BMC é completamente diferente da CPU do host, e é possível que ele tenha acesso a hardware diferente do que a CPU hospedeira faz. Então a resposta para "mas por que o BMC pode vê-lo?" é "porque é totalmente diferente, e o que o BMC pode e não pode fazer não influencia necessariamente o que a CPU hospedeira pode e não pode fazer".
Dito isso, parece que sua verdadeira questão é "como posso acessar o VPD do NVME na CPU host". Eu pesquisei na especificação da NVME Management Interface , e ela diz que os Endpoints de gerenciamento podem ser alcançados por meio de um I2C / SMBus porta e uma porta PCIe.
Então, meu palpite é que o Management Endpoint do seu hardware só pode ser acessado via PCIe.
Além disso, o googling encontrou uma CLI de endpoint de gerenciamento , que funciona via ioctls
no driver nvme
do Linux, pelo menos da rápida olhada no código que eu fiz.
Então, em seu lugar, eu tentaria essa ferramenta para acessar a interface do Management Endpoint em seu hardware e ver se você não consegue obter o VPD dessa maneira.
Eu não tenho um dispositivo NVME aqui, então não posso testar.