Reconstruindo o despejo binário do dmidecode de / sys / firmware / dmi / tables

1

Antecedentes

O utilitário dmidecode é capaz de criar um despejo binário bruto usando --dump-bin option:

root@here:~$ dmidecode --dump-bin foo.dump

que pode ser reutilizado em outra máquina, produzindo efeito como se o dmidecode estivesse sendo executado na máquina original:

me@elsewhere:~$ dmidecode --dump-bin foo.dump
# dmidecode 2.12
SMBIOS 2.7 present.
68 structures occupying 2688 bytes.
Table at 0xBAE9D000.
[...]

Eu tenho esses binários de algumas máquinas e os uso para testar um script que envolve o dmidecode (portanto, eu preciso simular o comportamento do dmidecode como se a configuração do hardware fosse diferente).

Problema

Mas a partir de várias máquinas, não tenho o binário bruto, mas do tem cópia de / sys / firmware / dmi / tables como exposto pelo 4. * kernel. Documentos no kernel.org dizem:

[...] The dmi/tables provides raw SMBIOS entry point and DMI tables through sysfs as an alternative to utilities reading them from /dev/mem. The raw SMBIOS entry point and DMI table are presented as binary attributes and are accessible via:

/sys/firmware/dmi/tables/smbios_entry_point
/sys/firmware/dmi/tables/DMI

The complete DMI information can be obtained using these two tables.

Pergunta

É possível usar os arquivos / sys / firmware / dmi / tables para reconstruir (em um script Bash / Python / Perl / ...) o despejo binário bruto para que ele possa ser reutilizado como em primeiro exemplo?

Eu tentei apenas agrupar os arquivos, mas não obtive êxito ( Invalid entry length (0). DMI table is broken! Stop. ).

    
por Alois Mahdal 16.12.2015 / 15:59

1 resposta

0

Se você comparar um dump hexadecimal de smbios_entry_point com a saída binária do dmidecode, verá que é similar aos bytes 0-31 da saída do dmidecode. Da mesma forma, DMI corresponde a bytes 32+. O byte 32 está faltando; Eu suponho que é sempre nulo.

Parece perto o suficiente para que eu esperasse que funcionasse.

echo -en '
# dmidecode 2.12-dmifs
Reading SMBIOS/DMI data from file table.
SMBIOS 2.8 present.
Bus error (core dumped)
' >NUL sudo cat /sys/firmware/dmi/tables/smbios_entry_point NUL /sys/firmware/dmi/tables/DMI >table dmidecode --from-dump table

No entanto, o dmidecode falha com a seguinte saída:

echo -en '
# dmidecode 2.12-dmifs
Reading SMBIOS/DMI data from file table.
SMBIOS 2.8 present.
Bus error (core dumped)
' >NUL sudo cat /sys/firmware/dmi/tables/smbios_entry_point NUL /sys/firmware/dmi/tables/DMI >table dmidecode --from-dump table

A especificação SMBIOS / DMI é disponível na Internet (pdf) ; Não deve ser muito difícil determinar valores fictícios aceitáveis para o cabeçalho. Estou deixando isso como um exercício para o leitor, pelo menos por enquanto;)

    
por 27.09.2016 / 19:10