背景

背景

背景

dmidecodeユーティリティは--dump-binオプションを使用してネイティブバイナリダンプを生成できます。

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

他のシステムで再利用して、dmidecodeが元のシステムで実行されたのと同じ効果を生成できます。

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

一部のコンピュータにはこれらのバイナリがあり、それを使用してdmidecodeをラップするスクリプトをテストします(ハードウェア設定が異なるようにdmidecodeの動作をシミュレートする必要があります)。

質問

しかし、いくつかのマシンには生のバイナリはありませんが、する4.*カーネルによって公開された/sys/firmware/dmi/tablesのコピーを入手してください。 kernel.org ドキュメント説明する:

[...] dmi/tables は、/dev/mem から読み取るユーティリティではなく、sysfs を介してネイティブ SMBIOS エントリポイントと DMI テーブルを提供します。ネイティブSMBIOSエントリポイントとDMIテーブルはバイナリプロパティとして表示され、以下からアクセスできます。

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

これら2つのテーブルを使用して、完全なDMI情報を取得できます。

質問

最初の例のように再利用できるように、/sys/firmware/dmi/tablesファイルを使用して元のバイナリダンプを再設定できますか?

私はこれらのファイルをまとめましたが、成功しませんでした(Invalid entry length (0). DMI table is broken! Stop.)。

答え1

ここに画像の説明を入力してください。

ここに画像の説明を入力してください。

ここに画像の説明を入力してください。

コードを参照してください。https://github.com/mirror/dmidecode/blob/master/dmidecode.c。頑張ってください。

ここに画像の説明を入力してください。

例: 7f + 00 + 80 + 30 + 7b = 18a

18aは8bit = 8aを保持します。

DMI の新しいアドレスは 0x20 でハードコーディングされます。

答え2

smbios_entry_pointdmidecodeの16進ダンプをバイナリ出力と比較すると、次のことがわかります。似たようなdmidecode 出力のバイト 0-31。同様にDMI、バイト32+と一致します。バイト32がありません。いつも空いているようです。

十分に近づいて見せて効果があってほしいです。

echo -en '\0' >NUL
sudo cat /sys/firmware/dmi/tables/smbios_entry_point NUL /sys/firmware/dmi/tables/DMI >table
dmidecode --from-dump table

ただし、dmidecode は次の出力で競合します。

# dmidecode 2.12-dmifs
Reading SMBIOS/DMI data from file table.
SMBIOS 2.8 present.
Bus error (core dumped)

SMBIOS/DMIの仕様は次のとおりです。インターネットで利用可能(pdf);ヘッダーに許容されるダミー値を決定することはそれほど難しくありません。少なくとも今は読者に練習問題として残しておきます。 ;)

関連情報